Add support for diffstat in commit emails, and move diffstat from
patchbomb to patch
--- a/hgext/notify.py Thu Sep 14 19:24:00 2006 -0700
+++ b/hgext/notify.py Wed Sep 13 13:14:08 2006 -0700
@@ -240,6 +240,9 @@
prev = self.repo.changelog.parents(node)[0]
patch.diff(self.repo, prev, ref, fp=fp)
difflines = fp.getvalue().splitlines(1)
+ if self.ui.configbool('notify', 'diffstat', True):
+ s = patch.diffstat(difflines)
+ self.sio.write('\ndiffstat:\n\n' + s)
if maxdiff > 0 and len(difflines) > maxdiff:
self.sio.write(_('\ndiffs (truncated from %d to %d lines):\n\n') %
(len(difflines), maxdiff))
--- a/hgext/patchbomb.py Thu Sep 14 19:24:00 2006 -0700
+++ b/hgext/patchbomb.py Wed Sep 13 13:14:08 2006 -0700
@@ -65,7 +65,7 @@
from mercurial.demandload import *
demandload(globals(), '''email.MIMEMultipart email.MIMEText email.Utils
- mercurial:commands,hg,mail,ui
+ mercurial:commands,hg,mail,ui,patch
os errno popen2 socket sys tempfile time''')
from mercurial.i18n import gettext as _
from mercurial.node import *
@@ -76,27 +76,6 @@
import readline
except ImportError: pass
-def diffstat(patch):
- fd, name = tempfile.mkstemp(prefix="hg-patchbomb-", suffix=".txt")
- try:
- p = popen2.Popen3('diffstat -p1 -w79 2>/dev/null > ' + name)
- try:
- for line in patch: print >> p.tochild, line
- p.tochild.close()
- if p.wait(): return
- fp = os.fdopen(fd, 'r')
- stat = []
- for line in fp: stat.append(line.lstrip())
- last = stat.pop()
- stat.insert(0, last)
- stat = ''.join(stat)
- if stat.startswith('0 files'): raise ValueError
- return stat
- except: raise
- finally:
- try: os.unlink(name)
- except: pass
-
def patchbomb(ui, repo, *revs, **opts):
'''send changesets as a series of patch emails
@@ -123,8 +102,8 @@
if not prompt(s, default = 'y', rest = '? ').lower().startswith('y'):
raise ValueError
- def cdiffstat(summary, patch):
- s = diffstat(patch)
+ def cdiffstat(summary, patchlines):
+ s = patch.diffstat(patchlines)
if s:
if summary:
ui.write(summary, '\n')
--- a/mercurial/patch.py Thu Sep 14 19:24:00 2006 -0700
+++ b/mercurial/patch.py Wed Sep 13 13:14:08 2006 -0700
@@ -9,7 +9,8 @@
from i18n import gettext as _
from node import *
demandload(globals(), "cmdutil mdiff util")
-demandload(globals(), "cStringIO email.Parser errno os re shutil sys tempfile")
+demandload(globals(), '''cStringIO email.Parser errno os re shutil sys tempfile
+ popen2''')
# helper functions
@@ -550,3 +551,24 @@
for seqno, cset in enumerate(revs):
single(cset, seqno, fp)
+
+def diffstat(patchlines):
+ fd, name = tempfile.mkstemp(prefix="hg-patchbomb-", suffix=".txt")
+ try:
+ p = popen2.Popen3('diffstat -p1 -w79 2>/dev/null > ' + name)
+ try:
+ for line in patchlines: print >> p.tochild, line
+ p.tochild.close()
+ if p.wait(): return
+ fp = os.fdopen(fd, 'r')
+ stat = []
+ for line in fp: stat.append(line.lstrip())
+ last = stat.pop()
+ stat.insert(0, last)
+ stat = ''.join(stat)
+ if stat.startswith('0 files'): raise ValueError
+ return stat
+ except: raise
+ finally:
+ try: os.unlink(name)
+ except: pass