[PATCH] issue1547, diffstat: don't fail on non-terminal devices
Alexander Solovyov
piranha at piranha.org.ua
Thu Mar 12 05:43:30 CDT 2009
# HG changeset patch
# User Alexander Solovyov <piranha at piranha.org.ua>
# Date 1236799591 -7200
# Node ID f92f1c450acab0380c3981d74d4f2c73f82fc04c
# Parent c2e962bdcc377b61f09bfbf545781c6ae3ea9621
issue1547, diffstat: don't fail on non-terminal devices
This patch adds check agains terminal width guessing so it will return meaning
value instead of failing.
Also it introduces optional width parameter for diffstat so width guess wouldn't
be performed at all. It's usage is added to every non-interactive user of diffstat.
diff --git a/hgext/hgcia.py b/hgext/hgcia.py
--- a/hgext/hgcia.py
+++ b/hgext/hgcia.py
@@ -112,7 +112,7 @@
n = self.ctx.node()
pbuf = patchbuf()
patch.export(self.cia.repo, [n], fp=pbuf)
- return patch.diffstat(pbuf.lines) or ''
+ return patch.diffstat(pbuf.lines, width=80) or ''
def logmsg(self):
diffstat = self.cia.diffstat and self.diffstat() or ''
diff --git a/hgext/notify.py b/hgext/notify.py
--- a/hgext/notify.py
+++ b/hgext/notify.py
@@ -243,7 +243,7 @@
difflines = ''.join(chunks).splitlines()
if self.ui.configbool('notify', 'diffstat', True):
- s = patch.diffstat(difflines)
+ s = patch.diffstat(difflines, width=80)
# s may be nil, don't include the header if it is
if s:
self.ui.write('\ndiffstat:\n\n%s' % s)
diff --git a/hgext/patchbomb.py b/hgext/patchbomb.py
--- a/hgext/patchbomb.py
+++ b/hgext/patchbomb.py
@@ -90,7 +90,7 @@
ui.warn(_('Please enter a valid value.\n'))
def cdiffstat(ui, summary, patchlines):
- s = patch.diffstat(patchlines)
+ s = patch.diffstat(patchlines, width=80)
if summary:
ui.write(summary, '\n')
ui.write(s, '\n')
diff --git a/mercurial/patch.py b/mercurial/patch.py
--- a/mercurial/patch.py
+++ b/mercurial/patch.py
@@ -1359,10 +1359,14 @@
if filename:
yield (filename, adds, removes)
-def diffstat(lines):
+def diffstat(lines, width=None):
+ '''
+ Return diff statistics of lines formatted to the width. In case if
+ bool(width) == False try to guess it.
+ '''
output = []
stats = list(diffstatdata(lines))
- width = util.termwidth() - 2
+ width = (width or util.termwidth()) - 2
maxtotal, maxname = 0, 0
totaladds, totalremoves = 0, 0
diff --git a/mercurial/util.py b/mercurial/util.py
--- a/mercurial/util.py
+++ b/mercurial/util.py
@@ -2013,7 +2013,7 @@
continue
arri = fcntl.ioctl(fd, termios.TIOCGWINSZ, '\0' * 8)
return array.array('h', arri)[1]
- except ValueError:
+ except (ValueError, AttributeError):
pass
except ImportError:
pass
diff --git a/tests/test-patchbomb b/tests/test-patchbomb
--- a/tests/test-patchbomb
+++ b/tests/test-patchbomb
@@ -11,8 +11,6 @@
echo "[extensions]" >> $HGRCPATH
echo "patchbomb=" >> $HGRCPATH
-COLUMNS=80; export COLUMNS
-
hg init t
cd t
echo a > a
More information about the Mercurial-devel
mailing list