notify extension - hook extension to email notifications on commits/pushes Subscriptions can be managed through hgrc. Default mode is to print messages to stdout, for testing and configuring. To use, configure notify extension and enable in hgrc like this: [extensions] hgext.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 in here config items: REQUIRED: config = /path/to/file # file containing subscriptions OPTIONAL: 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) [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 notify config file has same format as regular hgrc. 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 repo root. if you like, you can put notify config file in repo that users can push changes to, they can manage their own subscriptions. no commands defined % commit adding a % clone updating working directory 1 files updated, 0 files merged, 0 files removed, 0 files unresolved % commit % pull (minimal config) 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: Subject: changeset in test-notify/b: b From: test X-Hg-Notification: changeset 0647d048b600 Message-Id: To: baz, foo@bar changeset 0647d048b600 in test-notify/b details: test-notify/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) % fail for config file is missing rolling back last transaction pull failed % pull rolling back last transaction 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: Subject: b From: test@test.com X-Hg-Notification: changeset 0647d048b600 Message-Id: To: baz@test.com, foo@bar changeset 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) % pull rolling back last transaction 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: Subject: b From: test@test.com X-Hg-Notification: changeset 0647d048b600 Message-Id: To: baz@test.com, foo@bar changeset 0647d048b600 description: b diffstat: files patched: 1 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)