test-notify.t
469 lines
| 13.3 KiB
| text/troff
|
Tads3Lexer
/ tests / test-notify.t
Matt Mackall
|
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 | ||||
Patrick Mezard
|
r14940 | notify extension - hooks for sending email push notifications | ||
Matt Mackall
|
r12473 | |||
Patrick Mezard
|
r14940 | This extension let you run hooks sending email notifications when changesets | ||
are being pushed, from the sending or receiving side. | ||||
Matt Mackall
|
r12473 | |||
Patrick Mezard
|
r14940 | First, enable the extension as explained in "hg help extensions", and register | ||
the hook you want to run. "incoming" and "outgoing" hooks are run by the | ||||
changesets receiver while the "outgoing" one is for the sender: | ||||
Matt Mackall
|
r12473 | |||
[hooks] | ||||
# one email for each incoming changeset | ||||
incoming.notify = python:hgext.notify.hook | ||||
Patrick Mezard
|
r14940 | # one email for all incoming changesets | ||
Matt Mackall
|
r12473 | changegroup.notify = python:hgext.notify.hook | ||
Patrick Mezard
|
r14940 | |||
# one email for all outgoing changesets | ||||
Ingo Bressler
|
r14617 | outgoing.notify = python:hgext.notify.hook | ||
Matt Mackall
|
r12473 | |||
Patrick Mezard
|
r14940 | Now the hooks are running, subscribers must be assigned to repositories. Use | ||
the "[usersubs]" section to map repositories to a given email or the | ||||
"[reposubs]" section to map emails to a single repository: | ||||
Matt Mackall
|
r12473 | |||
[usersubs] | ||||
Patrick Mezard
|
r14940 | # key is subscriber email, value is a comma-separated list of glob | ||
# patterns | ||||
Matt Mackall
|
r12473 | user@host = pattern | ||
[reposubs] | ||||
Patrick Mezard
|
r14940 | # key is glob pattern, value is a comma-separated list of subscriber | ||
# emails | ||||
Matt Mackall
|
r12473 | pattern = user@host | ||
Patrick Mezard
|
r14940 | Glob patterns are matched against absolute path to repository root. The | ||
subscriptions can be defined in their own file and referenced with: | ||||
[notify] | ||||
config = /path/to/subscriptionsfile | ||||
Alternatively, they can be added to Mercurial configuration files by setting | ||||
the previous entry to an empty value. | ||||
At this point, notifications should be generated but will not be sent until | ||||
you set the "notify.test" entry to "False". | ||||
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 sent only if it | ||||
includes the incoming or outgoing changes source. Incoming sources can be | ||||
"serve" for changes coming from http or ssh, "pull" for pulled changes, | ||||
"unbundle" for changes added by "hg unbundle" or "push" for changes being | ||||
pushed locally. Outgoing sources are the same except for "unbundle" which is | ||||
replaced by "bundle". Default: serve. | ||||
notify.strip | ||||
Number of leading slashes to strip from url paths. By default, notifications | ||||
references repositories with their absolute path. "notify.strip" let you | ||||
turn them into relative paths. For example, "notify.strip=3" will change | ||||
"/long/path/repository" into "repository". Default: 0. | ||||
notify.domain | ||||
If subscribers emails or the from email have no domain set, complete them | ||||
with this value. | ||||
Matt Mackall
|
r12473 | |||
Patrick Mezard
|
r14940 | 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 incoming hook, override "notify.template". | ||||
notify.outgoing | ||||
Template to use when run as outgoing hook, override "notify.template". | ||||
notify.changegroup | ||||
Template to use when running as changegroup hook, override | ||||
"notify.template". | ||||
notify.maxdiff | ||||
Maximum number of diff lines to include in notification email. Set to 0 to | ||||
disable the diff, -1 to include all of it. Default: 300. | ||||
notify.maxsubject | ||||
Maximum number of characters in emails 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. | ||||
Mads Kiilerich
|
r15561 | notify.mbox | ||
If set, append mails to this mbox file instead of sending. Default: None. | ||||
Nikolaus Schueler
|
r15654 | notify.fromauthor | ||
If set, use the first committer of the changegroup for the "From" field of | ||||
the notification mail. If not set, take the user from the pushing repo. | ||||
Default: False. | ||||
Patrick Mezard
|
r14940 | 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 generated email content. | ||||
web.baseurl | ||||
Root repository browsing URL to combine with repository paths when making | ||||
references. See also "notify.strip". | ||||
Matt Mackall
|
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 | \ | ||||
Mads Kiilerich
|
r12646 | > python -c 'import sys,re; print re.sub("\n[\t ]", " ", sys.stdin.read()),' | ||
Matt Mackall
|
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) | ||||
Mads Kiilerich
|
r12640 | Subject: changeset in $TESTTMP/b: b | ||
Matt Mackall
|
r12473 | From: test | ||
X-Hg-Notification: changeset 0647d048b600 | ||||
Message-Id: <*> (glob) | ||||
To: baz, foo@bar | ||||
Mads Kiilerich
|
r15447 | changeset 0647d048b600 in $TESTTMP/b (glob) | ||
Mads Kiilerich
|
r12640 | details: $TESTTMP/b?cmd=changeset;node=0647d048b600 | ||
Matt Mackall
|
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 | ||||
Mads Kiilerich
|
r12646 | @@ -1,1 +1,2 @@ a | ||
Matt Mackall
|
r12473 | +a | ||
(run 'hg update' to get a working copy) | ||||
$ cat <<EOF >> $HGRCPATH | ||||
> [notify] | ||||
Mads Kiilerich
|
r12642 | > config = `pwd`/.notify.conf | ||
Matt Mackall
|
r12473 | > domain = test.com | ||
Mads Kiilerich
|
r12644 | > strip = 42 | ||
Matt Mackall
|
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 | ||||
Gilles Moris
|
r13446 | repository tip rolled back to revision 0 (undo pull) | ||
Matt Mackall
|
r12473 | $ hg --cwd b pull ../a 2>&1 | grep 'error.*\.notify\.conf' > /dev/null && echo pull failed | ||
pull failed | ||||
Mads Kiilerich
|
r12642 | $ touch ".notify.conf" | ||
Matt Mackall
|
r12473 | |||
pull | ||||
$ hg --cwd b rollback | ||||
Gilles Moris
|
r13446 | repository tip rolled back to revision 0 (undo pull) | ||
Matt Mackall
|
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 | ||||
Mads Kiilerich
|
r12644 | changeset 0647d048b600 in b | ||
Matt Mackall
|
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 | ||||
Gilles Moris
|
r13446 | repository tip rolled back to revision 0 (undo pull) | ||
Matt Mackall
|
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 | ||||
Mads Kiilerich
|
r12644 | changeset 0647d048b600 in b | ||
Matt Mackall
|
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 | ||||
Mads Kiilerich
|
r12644 | changeset 0a184ce6067f in b | ||
Matt Mackall
|
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 | ||||
Peter Arrenbrecht
|
r14162 | X-Hg-Notification: changeset 6a0cf76b2701 | ||
Matt Mackall
|
r12473 | Message-Id: <*> (glob) | ||
To: baz@test.com, foo@bar | ||||
Peter Arrenbrecht
|
r14162 | changeset 6a0cf76b2701 in b | ||
Matt Mackall
|
r12473 | description: merge | ||
(run 'hg update' to get a working copy) | ||||
Yuya Nishihara
|
r13225 | |||
Mads Kiilerich
|
r15561 | non-ascii content and truncation of multi-byte subject | ||
Yuya Nishihara
|
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 | ||||
Peter Arrenbrecht
|
r14162 | X-Hg-Notification: changeset 7ea05ad269dc | ||
Yuya Nishihara
|
r13225 | Message-Id: <*> (glob) | ||
To: baz@test.com, foo@bar | ||||
Peter Arrenbrecht
|
r14162 | changeset 7ea05ad269dc in b | ||
Yuya Nishihara
|
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): | ||||
Peter Arrenbrecht
|
r14162 | diff -r 6a0cf76b2701 -r 7ea05ad269dc a | ||
Yuya Nishihara
|
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) | ||||
Mads Kiilerich
|
r15561 | |||
long lines | ||||
$ cat <<EOF >> $HGRCPATH | ||||
> [notify] | ||||
> maxsubject = 67 | ||||
> test = False | ||||
> mbox = mbox | ||||
> EOF | ||||
Mads Kiilerich
|
r15767 | $ python -c 'file("a/a", "ab").write("no" * 500 + "\n")' | ||
Mads Kiilerich
|
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 | ||||
Mads Kiilerich
|
r15562 | Content-Transfer-Encoding: quoted-printable | ||
Mads Kiilerich
|
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 | ||||
Mads Kiilerich
|
r15562 | +nonononononononononononononononononononononononononononononononononononono= | ||
nononononononononononononononononononononononononononononononononononononon= | ||||
ononononononononononononononononononononononononononononononononononononono= | ||||
nononononononononononononononononononononononononononononononononononononon= | ||||
ononononononononononononononononononononononononononononononononononononono= | ||||
nononononononononononononononononononononononononononononononononononononon= | ||||
ononononononononononononononononononononononononononononononononononononono= | ||||
nononononononononononononononononononononononononononononononononononononon= | ||||
ononononononononononononononononononononononononononononononononononononono= | ||||
nononononononononononononononononononononononononononononononononononononon= | ||||
ononononononononononononononononononononononononononononononononononononono= | ||||
nononononononononononononononononononononononononononononononononononononon= | ||||
ononononononononononononononononononononononononononononononononononononono= | ||||
nonononononononononononono | ||||
Mads Kiilerich
|
r15561 | |||