diff tests/test-notify.t @ 12473:52aac5c5c2a6

tests: unify test-notify
author Matt Mackall <mpm@selenic.com>
date Sun, 26 Sep 2010 13:44:42 -0500
parents tests/test-notify@3b65c3c3cc8d
children 6cc4b14fb76b
line wrap: on
line diff
--- /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)