changeset 15654:2a7fa7c641d8

notify: change behavior of "changegroup" hook Change the behavior so that the sender (the "From" header in the notification mail) in case of the "changegroup" hook is the user that did the first commit in the changegroup. The option is configurable, if you set "notify.fromauthor" to "True" in your config, the new behavior is activated. If you do not set the option, the behavior is as before. The commit adds to an existing test to show various aspects of the changed behavior.
author Nikolaus Schueler <nikolaus.schueler@lantiq.com>
date Thu, 15 Dec 2011 13:57:54 +0100
parents 93c77d5b9752
children 5402fd9dd13e
files hgext/notify.py tests/test-notify-changegroup.t tests/test-notify.t
diffstat 3 files changed, 105 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/notify.py	Thu Dec 15 16:23:26 2011 +0100
+++ b/hgext/notify.py	Thu Dec 15 13:57:54 2011 +0100
@@ -108,6 +108,11 @@
 notify.mbox
   If set, append mails to this mbox file instead of sending. Default: None.
 
+notify.fromauthor
+  If set, use the first committer of the changegroup for the "From" field of
+  the notification mail. If not set, take the user from the pushing repo.
+  Default: False.
+
 If set, the following entries will also be used to customize the notifications:
 
 email.from
@@ -338,11 +343,14 @@
     ui.pushbuffer()
     data = ''
     count = 0
+    author = ''
     if hooktype == 'changegroup' or hooktype == 'outgoing':
         start, end = ctx.rev(), len(repo)
         for rev in xrange(start, end):
             if n.node(repo[rev]):
                 count += 1
+                if not author:
+                    author = repo[rev].user()
             else:
                 data += ui.popbuffer()
                 ui.note(_('notify: suppressing notification for merge %d:%s\n') %
@@ -360,5 +368,9 @@
         n.diff(ctx)
 
     data += ui.popbuffer()
+    fromauthor = ui.config('notify', 'fromauthor')
+    if author and fromauthor:
+        data = '\n'.join(['From: %s' % author, data])
+
     if count:
         n.send(ctx, count, data)
--- a/tests/test-notify-changegroup.t	Thu Dec 15 16:23:26 2011 +0100
+++ b/tests/test-notify-changegroup.t	Thu Dec 15 13:57:54 2011 +0100
@@ -124,3 +124,91 @@
   +a
   +a
   (run 'hg update' to get a working copy)
+
+Check that using the first committer as the author of a changeset works:
+Check that the config option works.
+Check that the first committer is indeed used for "From:".
+Check that the merge user is NOT used for "From:"
+
+Create new file
+
+  $ echo a > b/b
+  $ echo b >> b/b
+  $ echo c >> b/b
+  $ hg --traceback --cwd b commit -Amnewfile -u committer_1
+  adding b
+
+commit as one user
+
+  $ echo x > b/b
+  $ echo b >> b/b
+  $ echo c >> b/b
+  $ hg --traceback --cwd b commit -Amx -u committer_2
+
+commit as other user, change file so we can do an (automatic) merge
+
+  $ hg --cwd b up 2
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo a > b/b
+  $ echo b >> b/b
+  $ echo y >> b/b
+  $ hg --traceback --cwd b commit -Amy -u committer_3
+  created new head
+
+merge as a different user
+
+  $ hg --cwd b merge --config notify.fromauthor=True
+  merging b
+  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+
+  $ hg --traceback --cwd b commit -Am "merged"
+
+push
+
+  $ hg --traceback --cwd b --config notify.fromauthor=True push ../a 2>&1 |
+  >     python -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
+  pushing to ../a
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 4 changesets with 4 changes to 1 files
+  Content-Type: text/plain; charset="us-ascii"
+  MIME-Version: 1.0
+  Content-Transfer-Encoding: 7bit
+  Date: * (glob)
+  Subject: * (glob)
+  From: committer_1
+  X-Hg-Notification: changeset 84e487dddc58
+  Message-Id: <*> (glob)
+  To: baz, foo@bar
+  
+  changeset 84e487dddc58 in $TESTTMP/a
+  details: $TESTTMP/a?cmd=changeset;node=84e487dddc58
+  summary: newfile
+  
+  changeset b29c7a2b6b0c in $TESTTMP/a
+  details: $TESTTMP/a?cmd=changeset;node=b29c7a2b6b0c
+  summary: x
+  
+  changeset 0957c7d64886 in $TESTTMP/a
+  details: $TESTTMP/a?cmd=changeset;node=0957c7d64886
+  summary: y
+  
+  changeset 485b4e6b0249 in $TESTTMP/a
+  details: $TESTTMP/a?cmd=changeset;node=485b4e6b0249
+  summary: merged
+  
+  diffs (7 lines):
+  
+  diff -r ba677d0156c1 -r 485b4e6b0249 b
+  --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+  +++ b/b	Thu Jan 01 00:00:00 1970 +0000
+  @@ -0,0 +1,3 @@
+  +x
+  +b
+  +y
+  $ hg --cwd a rollback
+  repository tip rolled back to revision 1 (undo push)
+
--- a/tests/test-notify.t	Thu Dec 15 16:23:26 2011 +0100
+++ b/tests/test-notify.t	Thu Dec 15 13:57:54 2011 +0100
@@ -116,6 +116,11 @@
   notify.mbox
     If set, append mails to this mbox file instead of sending. Default: None.
   
+  notify.fromauthor
+    If set, use the first committer of the changegroup for the "From" field of
+    the notification mail. If not set, take the user from the pushing repo.
+    Default: False.
+  
   If set, the following entries will also be used to customize the
   notifications: