# HG changeset patch # User Matt Mackall # Date 1285526682 18000 # Node ID 52aac5c5c2a6b8afa802861e479a8b3e6c4488fb # Parent 17c62039cadd47f6dfaa6dbdda67e0f2cf3d2638 tests: unify test-notify diff -r 17c62039cadd -r 52aac5c5c2a6 tests/test-notify --- a/tests/test-notify Sun Sep 26 13:43:21 2010 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -#!/bin/sh - -cat <> $HGRCPATH -[extensions] -notify= - -[hooks] -incoming.notify = python:hgext.notify.hook - -[notify] -sources = pull -diffstat = False - -[usersubs] -foo@bar = * - -[reposubs] -* = baz -EOF - -hg help notify -hg init a -echo a > a/a -echo % commit -hg --traceback --cwd a commit -Ama -d '0 0' - -echo % clone -hg --traceback clone a b - -echo a >> a/a -echo % commit -hg --traceback --cwd a commit -Amb -d '1 0' - -# on Mac OS X 10.5 the tmp path is very long so would get stripped in the subject line -cat <> $HGRCPATH -[notify] -maxsubject = 200 -EOF - -# the python call below wraps continuation lines, which appear on Mac OS X 10.5 because -# of the very long subject line -echo '% pull (minimal config)' -hg --traceback --cwd b pull ../a 2>&1 | - python -c 'import sys,re; print re.sub("([n:])\\n[\\t ]", "\\1 ", sys.stdin.read()),' | - sed -e 's/\(Message-Id:\).*/\1/' \ - -e 's/changeset \([0-9a-f]* *\)in .*test-notif/changeset \1in test-notif/' \ - -e 's/^details: .*test-notify/details: test-notify/' \ - -e 's/^Date:.*/Date:/' - -cat <> $HGRCPATH -[notify] -config = $HGTMP/.notify.conf -domain = test.com -strip = 3 -template = Subject: {desc|firstline|strip}\nFrom: {author}\nX-Test: foo\n\nchangeset {node|short} in {webroot}\ndescription:\n\t{desc|tabindent|strip} - -[web] -baseurl = http://test/ -EOF - -echo % fail for config file is missing -hg --cwd b rollback -hg --cwd b pull ../a 2>&1 | grep 'error.*\.notify\.conf' > /dev/null && echo pull failed - -touch "$HGTMP/.notify.conf" - -echo % pull -hg --cwd b rollback -hg --traceback --cwd b pull ../a 2>&1 | sed -e 's/\(Message-Id:\).*/\1/' \ - -e 's/changeset \([0-9a-f]*\) in .*/changeset \1/' \ - -e 's/^Date:.*/Date:/' - -cat << EOF >> $HGRCPATH -[hooks] -incoming.notify = python:hgext.notify.hook - -[notify] -sources = pull -diffstat = True -EOF - -echo % pull -hg --cwd b rollback -hg --traceback --cwd b pull ../a 2>&1 | sed -e 's/\(Message-Id:\).*/\1/' \ - -e 's/changeset \([0-9a-f]*\) in .*/changeset \1/' \ - -e 's/^Date:.*/Date:/' - -echo % test merge -cd a -hg up -C 0 -echo a >> a -hg ci -Am adda2 -d '2 0' -hg merge -hg ci -m merge -d '3 0' -cd .. - -hg --traceback --cwd b pull ../a 2>&1 | sed -e 's/\(Message-Id:\).*/\1/' \ - -e 's/changeset \([0-9a-f]*\) in .*/changeset \1/' \ - -e 's/^Date:.*/Date:/' - diff -r 17c62039cadd -r 52aac5c5c2a6 tests/test-notify.out --- a/tests/test-notify.out Sun Sep 26 13:43:21 2010 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,219 +0,0 @@ -notify extension - hooks for sending email notifications at commit/push time - -Subscriptions can be managed through a hgrc file. Default mode is to print -messages to stdout, for testing and configuring. - -To use, configure the notify extension and enable it in hgrc like this: - - [extensions] - notify = - - [hooks] - # one email for each incoming changeset - incoming.notify = python:hgext.notify.hook - # batch emails when many changesets incoming at one time - changegroup.notify = python:hgext.notify.hook - - [notify] - # config items go here - -Required configuration items: - - config = /path/to/file # file containing subscriptions - -Optional configuration items: - - test = True # print messages to stdout for testing - strip = 3 # number of slashes to strip for url paths - domain = example.com # domain to use if committer missing domain - style = ... # style file to use when formatting email - template = ... # template to use when formatting email - incoming = ... # template to use when run as incoming hook - changegroup = ... # template when run as changegroup hook - maxdiff = 300 # max lines of diffs to include (0=none, -1=all) - maxsubject = 67 # truncate subject line longer than this - diffstat = True # add a diffstat before the diff content - sources = serve # notify if source of incoming changes in this list - # (serve == ssh or http, push, pull, bundle) - merge = False # send notification for merges (default True) - [email] - from = user@host.com # email address to send as if none given - [web] - baseurl = http://hgserver/... # root of hg web site for browsing commits - -The notify config file has same format as a regular hgrc file. It has two -sections so you can express subscriptions in whatever way is handier for you. - - [usersubs] - # key is subscriber email, value is ","-separated list of glob patterns - user@host = pattern - - [reposubs] - # key is glob pattern, value is ","-separated list of subscriber emails - pattern = user@host - -Glob patterns are matched against path to repository root. - -If you like, you can put notify config file in repository that users can push -changes to, they can manage their own subscriptions. - -no commands defined -% commit -adding a -% clone -updating to branch default -1 files updated, 0 files merged, 0 files removed, 0 files unresolved -% commit -% pull (minimal config) -pulling from ../a -searching for changes -adding changesets -adding manifests -adding file changes -added 1 changesets with 1 changes to 1 files -Content-Type: text/plain; charset="us-ascii" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Date: -Subject: changeset in test-notify/b: b -From: test -X-Hg-Notification: changeset 0647d048b600 -Message-Id: -To: baz, foo@bar - -changeset 0647d048b600 in test-notify/b -details: test-notify/b?cmd=changeset;node=0647d048b600 -description: b - -diffs (6 lines): - -diff -r cb9a9f314b8b -r 0647d048b600 a ---- a/a Thu Jan 01 00:00:00 1970 +0000 -+++ b/a Thu Jan 01 00:00:01 1970 +0000 -@@ -1,1 +1,2 @@ - a -+a -(run 'hg update' to get a working copy) -% fail for config file is missing -rolling back to revision 0 (undo pull) -pull failed -% pull -rolling back to revision 0 (undo pull) -pulling from ../a -searching for changes -adding changesets -adding manifests -adding file changes -added 1 changesets with 1 changes to 1 files -Content-Type: text/plain; charset="us-ascii" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Test: foo -Date: -Subject: b -From: test@test.com -X-Hg-Notification: changeset 0647d048b600 -Message-Id: -To: baz@test.com, foo@bar - -changeset 0647d048b600 -description: - b -diffs (6 lines): - -diff -r cb9a9f314b8b -r 0647d048b600 a ---- a/a Thu Jan 01 00:00:00 1970 +0000 -+++ b/a Thu Jan 01 00:00:01 1970 +0000 -@@ -1,1 +1,2 @@ - a -+a -(run 'hg update' to get a working copy) -% pull -rolling back to revision 0 (undo pull) -pulling from ../a -searching for changes -adding changesets -adding manifests -adding file changes -added 1 changesets with 1 changes to 1 files -Content-Type: text/plain; charset="us-ascii" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Test: foo -Date: -Subject: b -From: test@test.com -X-Hg-Notification: changeset 0647d048b600 -Message-Id: -To: baz@test.com, foo@bar - -changeset 0647d048b600 -description: - b -diffstat: - - a | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -diffs (6 lines): - -diff -r cb9a9f314b8b -r 0647d048b600 a ---- a/a Thu Jan 01 00:00:00 1970 +0000 -+++ b/a Thu Jan 01 00:00:01 1970 +0000 -@@ -1,1 +1,2 @@ - a -+a -(run 'hg update' to get a working copy) -% test merge -1 files updated, 0 files merged, 0 files removed, 0 files unresolved -created new head -0 files updated, 0 files merged, 0 files removed, 0 files unresolved -(branch merge, don't forget to commit) -pulling from ../a -searching for changes -adding changesets -adding manifests -adding file changes -added 2 changesets with 0 changes to 0 files -Content-Type: text/plain; charset="us-ascii" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Test: foo -Date: -Subject: adda2 -From: test@test.com -X-Hg-Notification: changeset 0a184ce6067f -Message-Id: -To: baz@test.com, foo@bar - -changeset 0a184ce6067f -description: - adda2 -diffstat: - - a | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -diffs (6 lines): - -diff -r cb9a9f314b8b -r 0a184ce6067f a ---- a/a Thu Jan 01 00:00:00 1970 +0000 -+++ b/a Thu Jan 01 00:00:02 1970 +0000 -@@ -1,1 +1,2 @@ - a -+a -Content-Type: text/plain; charset="us-ascii" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Test: foo -Date: -Subject: merge -From: test@test.com -X-Hg-Notification: changeset 22c88b85aa27 -Message-Id: -To: baz@test.com, foo@bar - -changeset 22c88b85aa27 -description: - merge -(run 'hg update' to get a working copy) diff -r 17c62039cadd -r 52aac5c5c2a6 tests/test-notify.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-notify.t Sun Sep 26 13:44:42 2010 -0500 @@ -0,0 +1,305 @@ + + $ cat <> $HGRCPATH + > [extensions] + > notify= + > + > [hooks] + > incoming.notify = python:hgext.notify.hook + > + > [notify] + > sources = pull + > diffstat = False + > + > [usersubs] + > foo@bar = * + > + > [reposubs] + > * = baz + > EOF + $ hg help notify + notify extension - hooks for sending email notifications at commit/push time + + Subscriptions can be managed through a hgrc file. Default mode is to print + messages to stdout, for testing and configuring. + + To use, configure the notify extension and enable it in hgrc like this: + + [extensions] + notify = + + [hooks] + # one email for each incoming changeset + incoming.notify = python:hgext.notify.hook + # batch emails when many changesets incoming at one time + changegroup.notify = python:hgext.notify.hook + + [notify] + # config items go here + + Required configuration items: + + config = /path/to/file # file containing subscriptions + + Optional configuration items: + + test = True # print messages to stdout for testing + strip = 3 # number of slashes to strip for url paths + domain = example.com # domain to use if committer missing domain + style = ... # style file to use when formatting email + template = ... # template to use when formatting email + incoming = ... # template to use when run as incoming hook + changegroup = ... # template when run as changegroup hook + maxdiff = 300 # max lines of diffs to include (0=none, -1=all) + maxsubject = 67 # truncate subject line longer than this + diffstat = True # add a diffstat before the diff content + sources = serve # notify if source of incoming changes in this list + # (serve == ssh or http, push, pull, bundle) + merge = False # send notification for merges (default True) + [email] + from = user@host.com # email address to send as if none given + [web] + baseurl = http://hgserver/... # root of hg web site for browsing commits + + The notify config file has same format as a regular hgrc file. It has two + sections so you can express subscriptions in whatever way is handier for you. + + [usersubs] + # key is subscriber email, value is ","-separated list of glob patterns + user@host = pattern + + [reposubs] + # key is glob pattern, value is ","-separated list of subscriber emails + pattern = user@host + + Glob patterns are matched against path to repository root. + + If you like, you can put notify config file in repository that users can push + changes to, they can manage their own subscriptions. + + no commands defined + $ hg init a + $ echo a > a/a + +commit + + $ hg --cwd a commit -Ama -d '0 0' + adding a + + +clone + + $ hg --traceback clone a b + updating to branch default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo a >> a/a + +commit + + $ hg --traceback --cwd a commit -Amb -d '1 0' + +on Mac OS X 10.5 the tmp path is very long so would get stripped in the subject line + + $ cat <> $HGRCPATH + > [notify] + > maxsubject = 200 + > EOF + +the python call below wraps continuation lines, which appear on Mac OS X 10.5 because +of the very long subject line +pull (minimal config) + + $ hg --traceback --cwd b pull ../a | \ + > python -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),' + pulling from ../a + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + Content-Type: text/plain; charset="us-ascii" + MIME-Version: 1.0 + Content-Transfer-Encoding: 7bit + Date: * (glob) + Subject: changeset in */b: b (glob) + From: test + X-Hg-Notification: changeset 0647d048b600 + Message-Id: <*> (glob) + To: baz, foo@bar + + changeset 0647d048b600 in */b (glob) + details: *?cmd=changeset;node=0647d048b600 (glob) + description: b + + diffs (6 lines): + + diff -r cb9a9f314b8b -r 0647d048b600 a + --- a/a Thu Jan 01 00:00:00 1970 +0000 + +++ b/a Thu Jan 01 00:00:01 1970 +0000 + @@ -1,1 +1,2 @@ + a + +a + (run 'hg update' to get a working copy) + $ cat <> $HGRCPATH + > [notify] + > config = $HGTMP/.notify.conf + > domain = test.com + > strip = 3 + > template = Subject: {desc|firstline|strip}\nFrom: {author}\nX-Test: foo\n\nchangeset {node|short} in {webroot}\ndescription:\n\t{desc|tabindent|strip} + > + > [web] + > baseurl = http://test/ + > EOF + +fail for config file is missing + + $ hg --cwd b rollback + rolling back to revision 0 (undo pull) + $ hg --cwd b pull ../a 2>&1 | grep 'error.*\.notify\.conf' > /dev/null && echo pull failed + pull failed + $ touch "$HGTMP/.notify.conf" + +pull + + $ hg --cwd b rollback + rolling back to revision 0 (undo pull) + $ hg --traceback --cwd b pull ../a | \ + > python -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),' + pulling from ../a + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + Content-Type: text/plain; charset="us-ascii" + MIME-Version: 1.0 + Content-Transfer-Encoding: 7bit + X-Test: foo + Date: * (glob) + Subject: b + From: test@test.com + X-Hg-Notification: changeset 0647d048b600 + Message-Id: <*> (glob) + To: baz@test.com, foo@bar + + changeset 0647d048b600 in */b (glob) + description: b + diffs (6 lines): + + diff -r cb9a9f314b8b -r 0647d048b600 a + --- a/a Thu Jan 01 00:00:00 1970 +0000 + +++ b/a Thu Jan 01 00:00:01 1970 +0000 + @@ -1,1 +1,2 @@ + a + +a + (run 'hg update' to get a working copy) + + $ cat << EOF >> $HGRCPATH + > [hooks] + > incoming.notify = python:hgext.notify.hook + > + > [notify] + > sources = pull + > diffstat = True + > EOF + +pull + + $ hg --cwd b rollback + rolling back to revision 0 (undo pull) + $ hg --traceback --cwd b pull ../a | \ + > python -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),' + pulling from ../a + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + Content-Type: text/plain; charset="us-ascii" + MIME-Version: 1.0 + Content-Transfer-Encoding: 7bit + X-Test: foo + Date: * (glob) + Subject: b + From: test@test.com + X-Hg-Notification: changeset 0647d048b600 + Message-Id: <*> (glob) + To: baz@test.com, foo@bar + + changeset 0647d048b600 in */b (glob) + description: b + diffstat: + + a | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + + diffs (6 lines): + + diff -r cb9a9f314b8b -r 0647d048b600 a + --- a/a Thu Jan 01 00:00:00 1970 +0000 + +++ b/a Thu Jan 01 00:00:01 1970 +0000 + @@ -1,1 +1,2 @@ + a + +a + (run 'hg update' to get a working copy) + +test merge + + $ cd a + $ hg up -C 0 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo a >> a + $ hg ci -Am adda2 -d '2 0' + created new head + $ hg merge + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + $ hg ci -m merge -d '3 0' + $ cd .. + $ hg --traceback --cwd b pull ../a | \ + > python -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),' + pulling from ../a + searching for changes + adding changesets + adding manifests + adding file changes + added 2 changesets with 0 changes to 0 files + Content-Type: text/plain; charset="us-ascii" + MIME-Version: 1.0 + Content-Transfer-Encoding: 7bit + X-Test: foo + Date: * (glob) + Subject: adda2 + From: test@test.com + X-Hg-Notification: changeset 0a184ce6067f + Message-Id: <*> (glob) + To: baz@test.com, foo@bar + + changeset 0a184ce6067f in */b (glob) + description: adda2 + diffstat: + + a | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + + diffs (6 lines): + + diff -r cb9a9f314b8b -r 0a184ce6067f a + --- a/a Thu Jan 01 00:00:00 1970 +0000 + +++ b/a Thu Jan 01 00:00:02 1970 +0000 + @@ -1,1 +1,2 @@ + a + +a + Content-Type: text/plain; charset="us-ascii" + MIME-Version: 1.0 + Content-Transfer-Encoding: 7bit + X-Test: foo + Date: * (glob) + Subject: merge + From: test@test.com + X-Hg-Notification: changeset 22c88b85aa27 + Message-Id: <*> (glob) + To: baz@test.com, foo@bar + + changeset 22c88b85aa27 in */b (glob) + description: merge + (run 'hg update' to get a working copy)