diff --git a/hgext/notify.py b/hgext/notify.py --- a/hgext/notify.py +++ b/hgext/notify.py @@ -108,6 +108,11 @@ notify.merge 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 @@ def hook(ui, repo, hooktype, node=None, 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 @@ def hook(ui, repo, hooktype, node=None, 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) diff --git a/tests/test-notify-changegroup.t b/tests/test-notify-changegroup.t --- a/tests/test-notify-changegroup.t +++ b/tests/test-notify-changegroup.t @@ -124,3 +124,91 @@ unbundle with correct source +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) + diff --git a/tests/test-notify.t b/tests/test-notify.t --- a/tests/test-notify.t +++ b/tests/test-notify.t @@ -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: