##// END OF EJS Templates
Add support for diffstat in commit emails, and move diffstat from...
Matt Doar -
r3096:f422c826 default
parent child Browse files
Show More
@@ -240,6 +240,9 b' class notifier(object):'
240 240 prev = self.repo.changelog.parents(node)[0]
241 241 patch.diff(self.repo, prev, ref, fp=fp)
242 242 difflines = fp.getvalue().splitlines(1)
243 if self.ui.configbool('notify', 'diffstat', True):
244 s = patch.diffstat(difflines)
245 self.sio.write('\ndiffstat:\n\n' + s)
243 246 if maxdiff > 0 and len(difflines) > maxdiff:
244 247 self.sio.write(_('\ndiffs (truncated from %d to %d lines):\n\n') %
245 248 (len(difflines), maxdiff))
@@ -65,7 +65,7 b''
65 65
66 66 from mercurial.demandload import *
67 67 demandload(globals(), '''email.MIMEMultipart email.MIMEText email.Utils
68 mercurial:commands,hg,mail,ui
68 mercurial:commands,hg,mail,ui,patch
69 69 os errno popen2 socket sys tempfile time''')
70 70 from mercurial.i18n import gettext as _
71 71 from mercurial.node import *
@@ -76,27 +76,6 b' try:'
76 76 import readline
77 77 except ImportError: pass
78 78
79 def diffstat(patch):
80 fd, name = tempfile.mkstemp(prefix="hg-patchbomb-", suffix=".txt")
81 try:
82 p = popen2.Popen3('diffstat -p1 -w79 2>/dev/null > ' + name)
83 try:
84 for line in patch: print >> p.tochild, line
85 p.tochild.close()
86 if p.wait(): return
87 fp = os.fdopen(fd, 'r')
88 stat = []
89 for line in fp: stat.append(line.lstrip())
90 last = stat.pop()
91 stat.insert(0, last)
92 stat = ''.join(stat)
93 if stat.startswith('0 files'): raise ValueError
94 return stat
95 except: raise
96 finally:
97 try: os.unlink(name)
98 except: pass
99
100 79 def patchbomb(ui, repo, *revs, **opts):
101 80 '''send changesets as a series of patch emails
102 81
@@ -123,8 +102,8 b' def patchbomb(ui, repo, *revs, **opts):'
123 102 if not prompt(s, default = 'y', rest = '? ').lower().startswith('y'):
124 103 raise ValueError
125 104
126 def cdiffstat(summary, patch):
127 s = diffstat(patch)
105 def cdiffstat(summary, patchlines):
106 s = patch.diffstat(patchlines)
128 107 if s:
129 108 if summary:
130 109 ui.write(summary, '\n')
@@ -9,7 +9,8 b' from demandload import demandload'
9 9 from i18n import gettext as _
10 10 from node import *
11 11 demandload(globals(), "cmdutil mdiff util")
12 demandload(globals(), "cStringIO email.Parser errno os re shutil sys tempfile")
12 demandload(globals(), '''cStringIO email.Parser errno os re shutil sys tempfile
13 popen2''')
13 14
14 15 # helper functions
15 16
@@ -550,3 +551,24 b" def export(repo, revs, template='hg-%h.p"
550 551
551 552 for seqno, cset in enumerate(revs):
552 553 single(cset, seqno, fp)
554
555 def diffstat(patchlines):
556 fd, name = tempfile.mkstemp(prefix="hg-patchbomb-", suffix=".txt")
557 try:
558 p = popen2.Popen3('diffstat -p1 -w79 2>/dev/null > ' + name)
559 try:
560 for line in patchlines: print >> p.tochild, line
561 p.tochild.close()
562 if p.wait(): return
563 fp = os.fdopen(fd, 'r')
564 stat = []
565 for line in fp: stat.append(line.lstrip())
566 last = stat.pop()
567 stat.insert(0, last)
568 stat = ''.join(stat)
569 if stat.startswith('0 files'): raise ValueError
570 return stat
571 except: raise
572 finally:
573 try: os.unlink(name)
574 except: pass
General Comments 0
You need to be logged in to leave comments. Login now