# HG changeset patch # User Matt Doar # Date 1158178448 25200 # Node ID f422c8265ae52958fb28c7d655ed341994a6e252 # Parent 25857e00af8e60451bed01fa41cb588422050b14 Add support for diffstat in commit emails, and move diffstat from patchbomb to patch diff -r 25857e00af8e -r f422c8265ae5 hgext/notify.py --- 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)) diff -r 25857e00af8e -r f422c8265ae5 hgext/patchbomb.py --- 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') diff -r 25857e00af8e -r f422c8265ae5 mercurial/patch.py --- 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