[Python-checkins] hooks: Use diffstat instead of ctx.files() to report summary of changed files.

local-hg python-checkins at python.org
Wed Mar 23 16:29:20 CET 2011


http://hg.python.org/hooks/rev/b35f1e6f37d5
changeset:   67:b35f1e6f37d5
user:        Antoine Pitrou <solipsis at pitrou.net>
date:        Wed Mar 23 16:29:20 2011 +0100
summary:
  Use diffstat instead of ctx.files() to report summary of changed files.
This should fix the inconsistent display of changed files in merge changesets.

files:
 mail.py |  13 +++++++++----
 1 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/mail.py b/mail.py
--- a/mail.py
+++ b/mail.py
@@ -9,6 +9,7 @@
 from mercurial import cmdutil, patch
 from mercurial.node import nullid
 from mercurial.encoding import fromlocal
+from mercurial.util import iterlines
 import smtplib
 import os
 import sys
@@ -52,15 +53,19 @@
     body += [CSET_URL % (path, ctx)]
     body += [line for line in log.splitlines()[:-2]
              if line != 'tag:         tip']
-    body += ['summary:\n  ' + fromlocal(ctx.description()), '']
-    body += ['files:\n  ' + '\n  '.join(ctx.files()), '']
+    body += ['summary:\n  ' + fromlocal(ctx.description())]
+    # ctx.files() gives us misleading info on merges, we use a diffstat instead
+    body += ['', 'files:']
 
     diffopts = patch.diffopts(repo.ui, {'git': True, 'showfunc': True})
     parents = ctx.parents()
     node1 = parents and parents[0].node() or nullid
     node2 = ctx.node()
-    differ = patch.diff(repo, node1, node2, opts=diffopts)
-    body.append(''.join(chunk for chunk in differ))
+    diffchunks = list(patch.diff(repo, node1, node2, opts=diffopts))
+    body.append(''.join(line for line in
+                        patch.diffstat(iterlines(diffchunks), width=60, git=True)
+                        ))
+    body.append(''.join(chunk for chunk in diffchunks))
 
     body.append('-- ')
     body.append('Repository URL: %s%s' % (BASE, path))

-- 
Repository URL: http://hg.python.org/hooks


More information about the Python-checkins mailing list