--- /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 <<EOF >> $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 <<EOF >> $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 <<EOF >> $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)