diff options
Diffstat (limited to 'tests/test-notify.t')
-rw-r--r-- | tests/test-notify.t | 475 |
1 files changed, 475 insertions, 0 deletions
diff --git a/tests/test-notify.t b/tests/test-notify.t new file mode 100644 index 0000000..543ceba --- /dev/null +++ b/tests/test-notify.t @@ -0,0 +1,475 @@ + + $ 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 push notifications + + This extension implements hooks to send email notifications when changesets + are sent from or received by the local repository. + + First, enable the extension as explained in "hg help extensions", and register + the hook you want to run. "incoming" and "changegroup" hooks are run when + changesets are received, while "outgoing" hooks are for changesets sent to + another repository: + + [hooks] + # one email for each incoming changeset + incoming.notify = python:hgext.notify.hook + # one email for all incoming changesets + changegroup.notify = python:hgext.notify.hook + + # one email for all outgoing changesets + outgoing.notify = python:hgext.notify.hook + + This registers the hooks. To enable notification, subscribers must be assigned + to repositories. The "[usersubs]" section maps multiple repositories to a + given recipient. The "[reposubs]" section maps multiple recipients to a single + repository: + + [usersubs] + # key is subscriber email, value is a comma-separated list of repo glob + # patterns + user@host = pattern + + [reposubs] + # key is glob pattern, value is a comma-separated list of subscriber + # emails + pattern = user@host + + Glob patterns are matched against absolute path to repository root. + + In order to place them under direct user management, "[usersubs]" and + "[reposubs]" sections may be placed in a separate "hgrc" file and incorporated + by reference: + + [notify] + config = /path/to/subscriptionsfile + + Notifications will not be sent until the "notify.test" value is set to + "False"; see below. + + Notifications content can be tweaked with the following configuration entries: + + notify.test + If "True", print messages to stdout instead of sending them. Default: True. + + notify.sources + Space-separated list of change sources. Notifications are activated only + when a changeset's source is in this list. Sources may be: + + "serve" changesets received via http or ssh + "pull" changesets received via "hg pull" + "unbundle" changesets received via "hg unbundle" + "push" changesets sent or received via "hg push" + "bundle" changesets sent via "hg unbundle" + + Default: serve. + + notify.strip + Number of leading slashes to strip from url paths. By default, notifications + reference repositories with their absolute path. "notify.strip" lets you + turn them into relative paths. For example, "notify.strip=3" will change + "/long/path/repository" into "repository". Default: 0. + + notify.domain + Default email domain for sender or recipients with no explicit domain. + + notify.style + Style file to use when formatting emails. + + notify.template + Template to use when formatting emails. + + notify.incoming + Template to use when run as an incoming hook, overriding "notify.template". + + notify.outgoing + Template to use when run as an outgoing hook, overriding "notify.template". + + notify.changegroup + Template to use when running as a changegroup hook, overriding + "notify.template". + + notify.maxdiff + Maximum number of diff lines to include in notification email. Set to 0 to + disable the diff, or -1 to include all of it. Default: 300. + + notify.maxsubject + Maximum number of characters in email's subject line. Default: 67. + + notify.diffstat + Set to True to include a diffstat before diff content. Default: True. + + notify.merge + If True, send notifications for merge changesets. Default: True. + + notify.mbox + If set, append mails to this mbox file instead of sending. Default: None. + + notify.fromauthor + If set, use the committer of the first changeset in a 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 + Email "From" address to use if none can be found in the generated email + content. + + web.baseurl + Root repository URL to combine with repository paths when making references. + See also "notify.strip". + + 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 $TESTTMP/b: b + From: test + X-Hg-Notification: changeset 0647d048b600 + Message-Id: <*> (glob) + To: baz, foo@bar + + changeset 0647d048b600 in $TESTTMP/b (glob) + details: $TESTTMP/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) + $ cat <<EOF >> $HGRCPATH + > [notify] + > config = `pwd`/.notify.conf + > domain = test.com + > strip = 42 + > 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 + repository tip rolled 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 ".notify.conf" + +pull + + $ hg --cwd b rollback + repository tip rolled 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 + 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 + repository tip rolled 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 + 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 + 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 6a0cf76b2701 + Message-Id: <*> (glob) + To: baz@test.com, foo@bar + + changeset 6a0cf76b2701 in b + description: merge + (run 'hg update' to get a working copy) + +non-ascii content and truncation of multi-byte subject + + $ cat <<EOF >> $HGRCPATH + > [notify] + > maxsubject = 4 + > EOF + $ echo a >> a/a + $ hg --cwd a --encoding utf-8 commit -A -d '0 0' \ + > -m `python -c 'print "\xc3\xa0\xc3\xa1\xc3\xa2\xc3\xa3\xc3\xa4"'` + $ hg --traceback --cwd b --encoding utf-8 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: 8bit + X-Test: foo + Date: * (glob) + Subject: \xc3\xa0... (esc) + From: test@test.com + X-Hg-Notification: changeset 7ea05ad269dc + Message-Id: <*> (glob) + To: baz@test.com, foo@bar + + changeset 7ea05ad269dc in b + description: \xc3\xa0\xc3\xa1\xc3\xa2\xc3\xa3\xc3\xa4 (esc) + diffstat: + + a | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + + diffs (7 lines): + + diff -r 6a0cf76b2701 -r 7ea05ad269dc a + --- a/a Thu Jan 01 00:00:03 1970 +0000 + +++ b/a Thu Jan 01 00:00:00 1970 +0000 + @@ -1,2 +1,3 @@ + a + a + +a + (run 'hg update' to get a working copy) + +long lines + + $ cat <<EOF >> $HGRCPATH + > [notify] + > maxsubject = 67 + > test = False + > mbox = mbox + > EOF + $ python -c 'file("a/a", "ab").write("no" * 500 + "\n")' + $ hg --cwd a commit -A -m "long line" + $ hg --traceback --cwd b pull ../a + pulling from ../a + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + notify: sending 2 subscribers 1 changes + (run 'hg update' to get a working copy) + $ python -c 'import sys,re; print re.sub("\n\t", " ", file("b/mbox").read()),' + From test@test.com ... ... .. ..:..:.. .... (re) + Content-Type: text/plain; charset="us-ascii" + MIME-Version: 1.0 + Content-Transfer-Encoding: quoted-printable + X-Test: foo + Date: * (glob) + Subject: long line + From: test@test.com + X-Hg-Notification: changeset e0be44cf638b + Message-Id: <hg.e0be44cf638b.*.*@*> (glob) + To: baz@test.com, foo@bar + + changeset e0be44cf638b in b + description: long line + diffstat: + + a | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + + diffs (8 lines): + + diff -r 7ea05ad269dc -r e0be44cf638b a + --- a/a Thu Jan 01 00:00:00 1970 +0000 + +++ b/a Thu Jan 01 00:00:00 1970 +0000 + @@ -1,3 +1,4 @@ + a + a + a + +nonononononononononononononononononononononononononononononononononononono= + nononononononononononononononononononononononononononononononononononononon= + ononononononononononononononononononononononononononononononononononononono= + nononononononononononononononononononononononononononononononononononononon= + ononononononononononononononononononononononononononononononononononononono= + nononononononononononononononononononononononononononononononononononononon= + ononononononononononononononononononononononononononononononononononononono= + nononononononononononononononononononononononononononononononononononononon= + ononononononononononononononononononononononononononononononononononononono= + nononononononononononononononononononononononononononononononononononononon= + ononononononononononononononononononononononononononononononononononononono= + nononononononononononononononononononononononononononononononononononononon= + ononononononononononononononononononononononononononononononononononononono= + nonononononononononononono + |