test-notify.t
555 lines
| 15.7 KiB
| text/troff
|
Tads3Lexer
/ tests / test-notify.t
|
r12473 | |||
$ 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 | ||||
|
r14940 | notify extension - hooks for sending email push notifications | ||
|
r12473 | |||
|
r16950 | This extension implements hooks to send email notifications when changesets | ||
are sent from or received by the local repository. | ||||
|
r12473 | |||
|
r14940 | First, enable the extension as explained in "hg help extensions", and register | ||
|
r16950 | 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: | ||||
|
r12473 | |||
[hooks] | ||||
# one email for each incoming changeset | ||||
incoming.notify = python:hgext.notify.hook | ||||
|
r14940 | # one email for all incoming changesets | ||
|
r12473 | changegroup.notify = python:hgext.notify.hook | ||
|
r14940 | |||
# one email for all outgoing changesets | ||||
|
r14617 | outgoing.notify = python:hgext.notify.hook | ||
|
r12473 | |||
|
r16950 | 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: | ||||
|
r12473 | |||
[usersubs] | ||||
|
r17754 | # key is subscriber email, value is a comma-separated list of repo patterns | ||
|
r12473 | user@host = pattern | ||
[reposubs] | ||||
|
r17754 | # key is repo pattern, value is a comma-separated list of subscriber emails | ||
|
r12473 | pattern = user@host | ||
|
r17754 | A "pattern" is a "glob" matching the absolute path to a repository, optionally | ||
combined with a revset expression. A revset expression, if present, is | ||||
separated from the glob by a hash. Example: | ||||
[reposubs] | ||||
*/widgets#branch(release) = qa-team@example.com | ||||
This sends to "qa-team@example.com" whenever a changeset on the "release" | ||||
branch triggers a notification in any repository ending in "widgets". | ||||
|
r16950 | |||
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: | ||||
|
r14940 | |||
[notify] | ||||
config = /path/to/subscriptionsfile | ||||
|
r16950 | Notifications will not be sent until the "notify.test" value is set to | ||
"False"; see below. | ||||
|
r14940 | |||
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 | ||||
|
r16950 | 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. | ||||
|
r14940 | |||
notify.strip | ||||
Number of leading slashes to strip from url paths. By default, notifications | ||||
|
r16950 | reference repositories with their absolute path. "notify.strip" lets you | ||
|
r14940 | turn them into relative paths. For example, "notify.strip=3" will change | ||
"/long/path/repository" into "repository". Default: 0. | ||||
notify.domain | ||||
|
r16950 | Default email domain for sender or recipients with no explicit domain. | ||
|
r12473 | |||
|
r14940 | notify.style | ||
Style file to use when formatting emails. | ||||
notify.template | ||||
Template to use when formatting emails. | ||||
notify.incoming | ||||
|
r16950 | Template to use when run as an incoming hook, overriding "notify.template". | ||
|
r14940 | |||
notify.outgoing | ||||
|
r16950 | Template to use when run as an outgoing hook, overriding "notify.template". | ||
|
r14940 | |||
notify.changegroup | ||||
|
r16950 | Template to use when running as a changegroup hook, overriding | ||
|
r14940 | "notify.template". | ||
notify.maxdiff | ||||
Maximum number of diff lines to include in notification email. Set to 0 to | ||||
|
r16950 | disable the diff, or -1 to include all of it. Default: 300. | ||
|
r14940 | |||
notify.maxsubject | ||||
|
r16950 | Maximum number of characters in email's subject line. Default: 67. | ||
|
r14940 | |||
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. | ||||
|
r15561 | notify.mbox | ||
If set, append mails to this mbox file instead of sending. Default: None. | ||||
|
r15654 | notify.fromauthor | ||
|
r16950 | 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. | ||||
|
r15654 | |||
|
r14940 | If set, the following entries will also be used to customize the | ||
notifications: | ||||
email.from | ||||
|
r16950 | Email "From" address to use if none can be found in the generated email | ||
content. | ||||
|
r14940 | |||
web.baseurl | ||||
|
r16950 | Root repository URL to combine with repository paths when making references. | ||
See also "notify.strip". | ||||
|
r12473 | |||
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 | \ | ||||
|
r12646 | > python -c 'import sys,re; print re.sub("\n[\t ]", " ", sys.stdin.read()),' | ||
|
r12473 | 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) | ||||
|
r12640 | Subject: changeset in $TESTTMP/b: b | ||
|
r12473 | From: test | ||
X-Hg-Notification: changeset 0647d048b600 | ||||
Message-Id: <*> (glob) | ||||
To: baz, foo@bar | ||||
|
r15447 | changeset 0647d048b600 in $TESTTMP/b (glob) | ||
|
r12640 | details: $TESTTMP/b?cmd=changeset;node=0647d048b600 | ||
|
r12473 | 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 | ||||
|
r12646 | @@ -1,1 +1,2 @@ a | ||
|
r12473 | +a | ||
(run 'hg update' to get a working copy) | ||||
$ cat <<EOF >> $HGRCPATH | ||||
> [notify] | ||||
|
r12642 | > config = `pwd`/.notify.conf | ||
|
r12473 | > domain = test.com | ||
|
r12644 | > strip = 42 | ||
|
r12473 | > 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 | ||||
|
r13446 | repository tip rolled back to revision 0 (undo pull) | ||
|
r12473 | $ hg --cwd b pull ../a 2>&1 | grep 'error.*\.notify\.conf' > /dev/null && echo pull failed | ||
pull failed | ||||
|
r12642 | $ touch ".notify.conf" | ||
|
r12473 | |||
pull | ||||
$ hg --cwd b rollback | ||||
|
r13446 | repository tip rolled back to revision 0 (undo pull) | ||
|
r12473 | $ 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 | ||||
|
r12644 | changeset 0647d048b600 in b | ||
|
r12473 | 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 | ||||
|
r13446 | repository tip rolled back to revision 0 (undo pull) | ||
|
r12473 | $ 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 | ||||
|
r12644 | changeset 0647d048b600 in b | ||
|
r12473 | 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 | ||||
|
r12644 | changeset 0a184ce6067f in b | ||
|
r12473 | 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 | ||||
|
r14162 | X-Hg-Notification: changeset 6a0cf76b2701 | ||
|
r12473 | Message-Id: <*> (glob) | ||
To: baz@test.com, foo@bar | ||||
|
r14162 | changeset 6a0cf76b2701 in b | ||
|
r12473 | description: merge | ||
(run 'hg update' to get a working copy) | ||||
|
r13225 | |||
|
r15561 | non-ascii content and truncation of multi-byte subject | ||
|
r13225 | |||
$ 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 | ||||
|
r14162 | X-Hg-Notification: changeset 7ea05ad269dc | ||
|
r13225 | Message-Id: <*> (glob) | ||
To: baz@test.com, foo@bar | ||||
|
r14162 | changeset 7ea05ad269dc in b | ||
|
r13225 | 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): | ||||
|
r14162 | diff -r 6a0cf76b2701 -r 7ea05ad269dc a | ||
|
r13225 | --- 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) | ||||
|
r15561 | |||
long lines | ||||
$ cat <<EOF >> $HGRCPATH | ||||
> [notify] | ||||
> maxsubject = 67 | ||||
> test = False | ||||
> mbox = mbox | ||||
> EOF | ||||
|
r15767 | $ python -c 'file("a/a", "ab").write("no" * 500 + "\n")' | ||
|
r15561 | $ 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 | ||||
|
r15562 | Content-Transfer-Encoding: quoted-printable | ||
|
r15561 | 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 | ||||
|
r15562 | +nonononononononononononononononononononononononononononononononononononono= | ||
nononononononononononononononononononononononononononononononononononononon= | ||||
ononononononononononononononononononononononononononononononononononononono= | ||||
nononononononononononononononononononononononononononononononononononononon= | ||||
ononononononononononononononononononononononononononononononononononononono= | ||||
nononononononononononononononononononononononononononononononononononononon= | ||||
ononononononononononononononononononononononononononononononononononononono= | ||||
nononononononononononononononononononononononononononononononononononononon= | ||||
ononononononononononononononononononononononononononononononononononononono= | ||||
nononononononononononononononononononononononononononononononononononononon= | ||||
ononononononononononononononononononononononononononononononononononononono= | ||||
nononononononononononononononononononononononononononononononononononononon= | ||||
ononononononononononononononononononononononononononononononononononononono= | ||||
nonononononononononononono | ||||
|
r15561 | |||
|
r17754 | revset selection: send to address that matches branch and repo | ||
$ cat << EOF >> $HGRCPATH | ||||
> [hooks] | ||||
> incoming.notify = python:hgext.notify.hook | ||||
> | ||||
> [notify] | ||||
> sources = pull | ||||
> test = True | ||||
> diffstat = False | ||||
> maxdiff = 0 | ||||
> | ||||
> [reposubs] | ||||
> */a#branch(test) = will_no_be_send@example.com | ||||
> */b#branch(test) = notify@example.com | ||||
> EOF | ||||
$ hg --cwd a branch test | ||||
marked working directory as branch test | ||||
(branches are permanent and global, did you want a bookmark?) | ||||
$ echo a >> a/a | ||||
$ hg --cwd a ci -m test -d '1 0' | ||||
$ 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: test | ||||
From: test@test.com | ||||
X-Hg-Notification: changeset fbbcbc516f2f | ||||
Message-Id: <hg.fbbcbc516f2f.*.*@*> (glob) | ||||
To: baz@test.com, foo@bar, notify@example.com | ||||
changeset fbbcbc516f2f in b | ||||
description: test | ||||
(run 'hg update' to get a working copy) | ||||
revset selection: don't send to address that waits for mails | ||||
from different branch | ||||
$ hg --cwd a update default | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ echo a >> a/a | ||||
$ hg --cwd a ci -m test -d '1 0' | ||||
$ 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 0 changes to 0 files (+1 heads) | ||||
Content-Type: text/plain; charset="us-ascii" | ||||
MIME-Version: 1.0 | ||||
Content-Transfer-Encoding: 7bit | ||||
X-Test: foo | ||||
Date: * (glob) | ||||
Subject: test | ||||
From: test@test.com | ||||
X-Hg-Notification: changeset 38b42fa092de | ||||
Message-Id: <hg.38b42fa092de.*.*@*> (glob) | ||||
To: baz@test.com, foo@bar | ||||
changeset 38b42fa092de in b | ||||
description: test | ||||
(run 'hg heads' to see heads) | ||||