Mercurial > hg
annotate hgext/notify.py @ 51923:b455dfddfed0
interfaces: convert the zope `Attribute` attrs to regular fields
At this point, we should have a useful protocol class.
The file syntax requires the type to be supplied for any fields that are
declared, but we'll leave the complex ones partially unspecified for now, for
simplicity. (Also, the things documented as `Callable` are really as future
type annotating worked showed- roll with it for now, but they're marked as TODO
for fixing later.) All of the fields and all of the attrs will need type
annotations, or the type rules say they are considered to be `Any`. That can be
done in a separate pass, possibly applying the `dirstate.pyi` file generated
from the concrete class.
The first cut of this turned the `interfaceutil.Attribute` fields into plain
fields, and thus the types on them. PyCharm flagged a few things as having
incompatible signatures when the concrete dirstate class subclassed this, when
the concrete class has them declared as `@property`. So they've been changed to
`@property` here in those cases. The remaining fields that are decorated in the
concrete class have comments noting the differences. We'll see if they need to
be changed going forward, but leave them for now. We'll be in trouble if the
`@util.propertycache` is needed, because we can't import that module here at
runtime, due to circular imports.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Thu, 26 Sep 2024 18:15:36 -0400 |
parents | f4733654f144 |
children |
rev | line source |
---|---|
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
1 # notify.py - email notifications for mercurial |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
2 # |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
3 # Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com> |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
4 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8154
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
7127
9df67ee30ef5
help: better documentation intro for a few extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7116
diff
changeset
|
7 |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
8 '''hooks for sending email push notifications |
7127
9df67ee30ef5
help: better documentation intro for a few extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7116
diff
changeset
|
9 |
16950
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
10 This extension implements hooks to send email notifications when |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
11 changesets are sent from or received by the local repository. |
7127
9df67ee30ef5
help: better documentation intro for a few extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7116
diff
changeset
|
12 |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
13 First, enable the extension as explained in :hg:`help extensions`, and |
16500
8436a4e21417
doc: fix careless document miss in help of hgext/notify
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15654
diff
changeset
|
14 register the hook you want to run. ``incoming`` and ``changegroup`` hooks |
16950
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
15 are run when changesets are received, while ``outgoing`` hooks are for |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
16 changesets sent to another repository:: |
7127
9df67ee30ef5
help: better documentation intro for a few extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7116
diff
changeset
|
17 |
9105
6188f2cc4a37
notify: fix indentation in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
9104
diff
changeset
|
18 [hooks] |
6188f2cc4a37
notify: fix indentation in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
9104
diff
changeset
|
19 # one email for each incoming changeset |
6188f2cc4a37
notify: fix indentation in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
9104
diff
changeset
|
20 incoming.notify = python:hgext.notify.hook |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
21 # one email for all incoming changesets |
9105
6188f2cc4a37
notify: fix indentation in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
9104
diff
changeset
|
22 changegroup.notify = python:hgext.notify.hook |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
23 |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
24 # one email for all outgoing changesets |
14617
23f4e1e40988
notify: send changesets on 'outgoing' hook, updated doc
Ingo Bressler <dev@ingobressler.net>
parents:
13878
diff
changeset
|
25 outgoing.notify = python:hgext.notify.hook |
7127
9df67ee30ef5
help: better documentation intro for a few extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7116
diff
changeset
|
26 |
16950
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
27 This registers the hooks. To enable notification, subscribers must |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
28 be assigned to repositories. The ``[usersubs]`` section maps multiple |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
29 repositories to a given recipient. The ``[reposubs]`` section maps |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
30 multiple recipients to a single repository:: |
9157
9261667e9b82
commands: use minirst parser when displaying help
Martin Geisler <mg@lazybytes.net>
parents:
9136
diff
changeset
|
31 |
9105
6188f2cc4a37
notify: fix indentation in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
9104
diff
changeset
|
32 [usersubs] |
17754
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
33 # key is subscriber email, value is a comma-separated list of repo patterns |
9105
6188f2cc4a37
notify: fix indentation in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
9104
diff
changeset
|
34 user@host = pattern |
7127
9df67ee30ef5
help: better documentation intro for a few extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7116
diff
changeset
|
35 |
9105
6188f2cc4a37
notify: fix indentation in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
9104
diff
changeset
|
36 [reposubs] |
17754
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
37 # key is repo pattern, value is a comma-separated list of subscriber emails |
9105
6188f2cc4a37
notify: fix indentation in module docstring
Martin Geisler <mg@lazybytes.net>
parents:
9104
diff
changeset
|
38 pattern = user@host |
7127
9df67ee30ef5
help: better documentation intro for a few extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7116
diff
changeset
|
39 |
17754
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
40 A ``pattern`` is a ``glob`` matching the absolute path to a repository, |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
41 optionally combined with a revset expression. A revset expression, if |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
42 present, is separated from the glob by a hash. Example:: |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
43 |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
44 [reposubs] |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
45 */widgets#branch(release) = qa-team@example.com |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
46 |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
47 This sends to ``qa-team@example.com`` whenever a changeset on the ``release`` |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
48 branch triggers a notification in any repository ending in ``widgets``. |
16950
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
49 |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
50 In order to place them under direct user management, ``[usersubs]`` and |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
51 ``[reposubs]`` sections may be placed in a separate ``hgrc`` file and |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
52 incorporated by reference:: |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
53 |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
54 [notify] |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
55 config = /path/to/subscriptionsfile |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
56 |
16950
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
57 Notifications will not be sent until the ``notify.test`` value is set |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
58 to ``False``; see below. |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
59 |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
60 Notifications content can be tweaked with the following configuration entries: |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
61 |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
62 notify.test |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
63 If ``True``, print messages to stdout instead of sending them. Default: True. |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
64 |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
65 notify.sources |
16950
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
66 Space-separated list of change sources. Notifications are activated only |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
67 when a changeset's source is in this list. Sources may be: |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
68 |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
69 :``serve``: changesets received via http or ssh |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
70 :``pull``: changesets received via ``hg pull`` |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
71 :``unbundle``: changesets received via ``hg unbundle`` |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
72 :``push``: changesets sent or received via ``hg push`` |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
73 :``bundle``: changesets sent via ``hg unbundle`` |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
74 |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
75 Default: serve. |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
76 |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
77 notify.strip |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
78 Number of leading slashes to strip from url paths. By default, notifications |
16950
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
79 reference repositories with their absolute path. ``notify.strip`` lets you |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
80 turn them into relative paths. For example, ``notify.strip=3`` will change |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
81 ``/long/path/repository`` into ``repository``. Default: 0. |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
82 |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
83 notify.domain |
16950
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
84 Default email domain for sender or recipients with no explicit domain. |
42904
d26a6706b070
notify: add option for deterministic message-id generation
Joerg Sonnenberger <joerg@bec.de>
parents:
41404
diff
changeset
|
85 It is also used for the domain part of the ``Message-Id`` when using |
d26a6706b070
notify: add option for deterministic message-id generation
Joerg Sonnenberger <joerg@bec.de>
parents:
41404
diff
changeset
|
86 ``notify.messageidseed``. |
d26a6706b070
notify: add option for deterministic message-id generation
Joerg Sonnenberger <joerg@bec.de>
parents:
41404
diff
changeset
|
87 |
d26a6706b070
notify: add option for deterministic message-id generation
Joerg Sonnenberger <joerg@bec.de>
parents:
41404
diff
changeset
|
88 notify.messageidseed |
d26a6706b070
notify: add option for deterministic message-id generation
Joerg Sonnenberger <joerg@bec.de>
parents:
41404
diff
changeset
|
89 Create deterministic ``Message-Id`` headers for the mails based on the seed |
d26a6706b070
notify: add option for deterministic message-id generation
Joerg Sonnenberger <joerg@bec.de>
parents:
41404
diff
changeset
|
90 and the revision identifier of the first commit in the changeset. |
7127
9df67ee30ef5
help: better documentation intro for a few extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7116
diff
changeset
|
91 |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
92 notify.style |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
93 Style file to use when formatting emails. |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
94 |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
95 notify.template |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
96 Template to use when formatting emails. |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
97 |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
98 notify.incoming |
16950
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
99 Template to use when run as an incoming hook, overriding ``notify.template``. |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
100 |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
101 notify.outgoing |
16950
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
102 Template to use when run as an outgoing hook, overriding ``notify.template``. |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
103 |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
104 notify.changegroup |
16950
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
105 Template to use when running as a changegroup hook, overriding |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
106 ``notify.template``. |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
107 |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
108 notify.maxdiff |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
109 Maximum number of diff lines to include in notification email. Set to 0 |
16950
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
110 to disable the diff, or -1 to include all of it. Default: 300. |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
111 |
37777
a4cac7b0ea4f
notify: add maxdiffstat option to truncate long file lists
Joerg Sonnenberger <joerg@bec.de>
parents:
37084
diff
changeset
|
112 notify.maxdiffstat |
a4cac7b0ea4f
notify: add maxdiffstat option to truncate long file lists
Joerg Sonnenberger <joerg@bec.de>
parents:
37084
diff
changeset
|
113 Maximum number of diffstat lines to include in notification email. Set to -1 |
a4cac7b0ea4f
notify: add maxdiffstat option to truncate long file lists
Joerg Sonnenberger <joerg@bec.de>
parents:
37084
diff
changeset
|
114 to include all of it. Default: -1. |
a4cac7b0ea4f
notify: add maxdiffstat option to truncate long file lists
Joerg Sonnenberger <joerg@bec.de>
parents:
37084
diff
changeset
|
115 |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
116 notify.maxsubject |
16950
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
117 Maximum number of characters in email's subject line. Default: 67. |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
118 |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
119 notify.diffstat |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
120 Set to True to include a diffstat before diff content. Default: True. |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
121 |
38028
d1134ca5b1a3
notify: add option to include function names in the diff output
Joerg Sonnenberger <joerg@bec.de>
parents:
37795
diff
changeset
|
122 notify.showfunc |
d1134ca5b1a3
notify: add option to include function names in the diff output
Joerg Sonnenberger <joerg@bec.de>
parents:
37795
diff
changeset
|
123 If set, override ``diff.showfunc`` for the diff content. Default: None. |
d1134ca5b1a3
notify: add option to include function names in the diff output
Joerg Sonnenberger <joerg@bec.de>
parents:
37795
diff
changeset
|
124 |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
125 notify.merge |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
126 If True, send notifications for merge changesets. Default: True. |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
127 |
15561
ca572e94d8e7
notify: add option for writing to mbox
Mads Kiilerich <mads@kiilerich.com>
parents:
14940
diff
changeset
|
128 notify.mbox |
ca572e94d8e7
notify: add option for writing to mbox
Mads Kiilerich <mads@kiilerich.com>
parents:
14940
diff
changeset
|
129 If set, append mails to this mbox file instead of sending. Default: None. |
ca572e94d8e7
notify: add option for writing to mbox
Mads Kiilerich <mads@kiilerich.com>
parents:
14940
diff
changeset
|
130 |
15654
2a7fa7c641d8
notify: change behavior of "changegroup" hook
Nikolaus Schueler <nikolaus.schueler@lantiq.com>
parents:
15561
diff
changeset
|
131 notify.fromauthor |
16950
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
132 If set, use the committer of the first changeset in a changegroup for |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
133 the "From" field of the notification mail. If not set, take the user |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
134 from the pushing repo. Default: False. |
15654
2a7fa7c641d8
notify: change behavior of "changegroup" hook
Nikolaus Schueler <nikolaus.schueler@lantiq.com>
parents:
15561
diff
changeset
|
135 |
44627
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
136 notify.reply-to-predecessor (EXPERIMENTAL) |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
137 If set and the changeset has a predecessor in the repository, try to thread |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
138 the notification mail with the predecessor. This adds the "In-Reply-To" header |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
139 to the notification mail with a reference to the predecessor with the smallest |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
140 revision number. Mail threads can still be torn, especially when changesets |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
141 are folded. |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
142 |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
143 This option must be used in combination with ``notify.messageidseed``. |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
144 |
16950
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
145 If set, the following entries will also be used to customize the |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
146 notifications: |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
147 |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
148 email.from |
16950
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
149 Email ``From`` address to use if none can be found in the generated |
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
150 email content. |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
151 |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
152 web.baseurl |
16950
0fdd8193c8b5
notify: various fixes to docstring
David Champion <dgc@uchicago.edu>
parents:
16500
diff
changeset
|
153 Root repository URL to combine with repository paths when making |
14940
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
154 references. See also ``notify.strip``. |
d78b92353f26
notify: rewrite user documentation
Patrick Mezard <pmezard@gmail.com>
parents:
14869
diff
changeset
|
155 |
9068
27a41250a9ce
notify: wrapped docstrings at 78 characters
Martin Geisler <mg@lazybytes.net>
parents:
8935
diff
changeset
|
156 ''' |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
157 |
51863
f4733654f144
typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51862
diff
changeset
|
158 from __future__ import annotations |
f4733654f144
typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51862
diff
changeset
|
159 |
40290
091f9b8a1051
notify: just use email.errors
Yuya Nishihara <yuya@tcha.org>
parents:
40284
diff
changeset
|
160 import email.errors as emailerrors |
43327
ac33550f63e8
py3: use stdlib's parseaddr() to get sender header in notify extension
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43326
diff
changeset
|
161 import email.utils as emailutils |
28416
d3c8183f429e
notify: use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
162 import fnmatch |
42904
d26a6706b070
notify: add option for deterministic message-id generation
Joerg Sonnenberger <joerg@bec.de>
parents:
41404
diff
changeset
|
163 import hashlib |
28416
d3c8183f429e
notify: use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
164 import socket |
d3c8183f429e
notify: use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
165 import time |
d3c8183f429e
notify: use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
166 |
29205
a0939666b836
py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents:
28951
diff
changeset
|
167 from mercurial.i18n import _ |
28416
d3c8183f429e
notify: use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
168 from mercurial import ( |
40304
f6ef89cf8234
notify: a ton of encoding dancing to deal with the email module
Augie Fackler <augie@google.com>
parents:
40290
diff
changeset
|
169 encoding, |
28416
d3c8183f429e
notify: use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
170 error, |
35888
c8e2d6ed1f9e
cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35633
diff
changeset
|
171 logcmdutil, |
28416
d3c8183f429e
notify: use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
172 mail, |
44627
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
173 obsutil, |
28416
d3c8183f429e
notify: use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
174 patch, |
43164
c32531444cdc
notify: cast hash to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43117
diff
changeset
|
175 pycompat, |
33738
2069a8c336b9
configitems: register the 'notify.config' config
Boris Feld <boris.feld@octobus.net>
parents:
32839
diff
changeset
|
176 registrar, |
28416
d3c8183f429e
notify: use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
177 util, |
d3c8183f429e
notify: use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
178 ) |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36607
diff
changeset
|
179 from mercurial.utils import ( |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36607
diff
changeset
|
180 dateutil, |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36607
diff
changeset
|
181 stringutil, |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36607
diff
changeset
|
182 ) |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
183 |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29240
diff
changeset
|
184 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
25186
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24987
diff
changeset
|
185 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24987
diff
changeset
|
186 # be specifying the version(s) of Mercurial they are tested with, or |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24987
diff
changeset
|
187 # leave the attribute unspecified. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
188 testedwith = b'ships-with-hg-core' |
16743
38caf405d010
hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents:
16683
diff
changeset
|
189 |
33738
2069a8c336b9
configitems: register the 'notify.config' config
Boris Feld <boris.feld@octobus.net>
parents:
32839
diff
changeset
|
190 configtable = {} |
2069a8c336b9
configitems: register the 'notify.config' config
Boris Feld <boris.feld@octobus.net>
parents:
32839
diff
changeset
|
191 configitem = registrar.configitem(configtable) |
2069a8c336b9
configitems: register the 'notify.config' config
Boris Feld <boris.feld@octobus.net>
parents:
32839
diff
changeset
|
192 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
193 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
194 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
195 b'changegroup', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
196 default=None, |
34754
a0a727104eed
configitem: register the 'notify.changegroup' config
Boris Feld <boris.feld@octobus.net>
parents:
34753
diff
changeset
|
197 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
198 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
199 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
200 b'config', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
201 default=None, |
33738
2069a8c336b9
configitems: register the 'notify.config' config
Boris Feld <boris.feld@octobus.net>
parents:
32839
diff
changeset
|
202 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
203 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
204 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
205 b'diffstat', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
206 default=True, |
33739
b30da11d9233
configitems: register the 'notify.diffstat' config
Boris Feld <boris.feld@octobus.net>
parents:
33738
diff
changeset
|
207 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
208 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
209 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
210 b'domain', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
211 default=None, |
33740
a853325102a0
configitems: register the 'notify.domain' config
Boris Feld <boris.feld@octobus.net>
parents:
33739
diff
changeset
|
212 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
213 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
214 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
215 b'messageidseed', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
216 default=None, |
42904
d26a6706b070
notify: add option for deterministic message-id generation
Joerg Sonnenberger <joerg@bec.de>
parents:
41404
diff
changeset
|
217 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
218 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
219 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
220 b'fromauthor', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
221 default=None, |
33741
b14be4deac06
configitems: register the 'notify.fromauthor' config
Boris Feld <boris.feld@octobus.net>
parents:
33740
diff
changeset
|
222 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
223 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
224 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
225 b'incoming', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
226 default=None, |
34752
b811f06b144d
configitem: register the 'notify.incoming' config
Boris Feld <boris.feld@octobus.net>
parents:
33750
diff
changeset
|
227 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
228 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
229 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
230 b'maxdiff', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
231 default=300, |
33742
66860180b009
configitems: register the 'notify.maxdiff' config
Boris Feld <boris.feld@octobus.net>
parents:
33741
diff
changeset
|
232 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
233 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
234 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
235 b'maxdiffstat', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
236 default=-1, |
37777
a4cac7b0ea4f
notify: add maxdiffstat option to truncate long file lists
Joerg Sonnenberger <joerg@bec.de>
parents:
37084
diff
changeset
|
237 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
238 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
239 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
240 b'maxsubject', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
241 default=67, |
33743
3d08f4810690
configitems: register the 'notify.maxsubject' config
Boris Feld <boris.feld@octobus.net>
parents:
33742
diff
changeset
|
242 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
243 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
244 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
245 b'mbox', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
246 default=None, |
33744
b76dc3e6bf99
configitems: register the 'notify.mbox' config
Boris Feld <boris.feld@octobus.net>
parents:
33743
diff
changeset
|
247 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
248 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
249 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
250 b'merge', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
251 default=True, |
33745
8bf8ed0deab8
configitems: register the 'notify.merge' config
Boris Feld <boris.feld@octobus.net>
parents:
33744
diff
changeset
|
252 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
253 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
254 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
255 b'outgoing', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
256 default=None, |
34753
12a69c806382
configitem: register the 'notify.outgoing' config
Boris Feld <boris.feld@octobus.net>
parents:
34752
diff
changeset
|
257 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
258 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
259 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
260 b'reply-to-predecessor', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
261 default=False, |
44627
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
262 ) |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
263 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
264 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
265 b'sources', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
266 default=b'serve', |
33746
20189ba5fddf
configitems: register the 'notify.sources' config
Boris Feld <boris.feld@octobus.net>
parents:
33745
diff
changeset
|
267 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
268 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
269 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
270 b'showfunc', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
271 default=None, |
38028
d1134ca5b1a3
notify: add option to include function names in the diff output
Joerg Sonnenberger <joerg@bec.de>
parents:
37795
diff
changeset
|
272 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
273 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
274 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
275 b'strip', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
276 default=0, |
33747
71665bbe82c1
configitems: register the 'notify.strip' config
Boris Feld <boris.feld@octobus.net>
parents:
33746
diff
changeset
|
277 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
278 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
279 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
280 b'style', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
281 default=None, |
33748
c27fac1ca8ed
configitems: register the 'notify.style' config
Boris Feld <boris.feld@octobus.net>
parents:
33747
diff
changeset
|
282 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
283 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
284 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
285 b'template', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
286 default=None, |
33749
ff4a11ff7aa3
configitems: register the 'notify.template' config
Boris Feld <boris.feld@octobus.net>
parents:
33748
diff
changeset
|
287 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
288 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
289 b'notify', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
290 b'test', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
291 default=True, |
33750
a0e28577f7d4
configitems: register the 'notify.test' config
Boris Feld <boris.feld@octobus.net>
parents:
33749
diff
changeset
|
292 ) |
33738
2069a8c336b9
configitems: register the 'notify.config' config
Boris Feld <boris.feld@octobus.net>
parents:
32839
diff
changeset
|
293 |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
294 # template for single changeset can include email headers. |
40283
c7a363ca04b9
notify: add some b prefixes
Augie Fackler <augie@google.com>
parents:
38028
diff
changeset
|
295 single_template = b''' |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
296 Subject: changeset in {webroot}: {desc|firstline|strip} |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
297 From: {author} |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
298 |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
299 changeset {node|short} in {root} |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
300 details: {baseurl}{webroot}?cmd=changeset;node={node|short} |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
301 description: |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
302 \t{desc|tabindent|strip} |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
303 '''.lstrip() |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
304 |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
305 # template for multiple changesets should not contain email headers, |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
306 # because only first set of headers will be used and result will look |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
307 # strange. |
40283
c7a363ca04b9
notify: add some b prefixes
Augie Fackler <augie@google.com>
parents:
38028
diff
changeset
|
308 multiple_template = b''' |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
309 changeset {node|short} in {root} |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
310 details: {baseurl}{webroot}?cmd=changeset;node={node|short} |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
311 summary: {desc|firstline} |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
312 ''' |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
313 |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
314 deftemplates = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
315 b'changegroup': multiple_template, |
4498
4dfb9f232a63
Fixed indentation in hgext/notify.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4479
diff
changeset
|
316 } |
2201
f15056b29472
patch queue: notify.patch
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
317 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
318 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
319 class notifier: |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
320 '''email notification class.''' |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
321 |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
322 def __init__(self, ui, repo, hooktype): |
2201
f15056b29472
patch queue: notify.patch
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
323 self.ui = ui |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
324 cfg = self.ui.config(b'notify', b'config') |
2329
90368f89340a
notify: add debug output. do not fail if no config file.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2326
diff
changeset
|
325 if cfg: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
326 self.ui.readconfig(cfg, sections=[b'usersubs', b'reposubs']) |
2201
f15056b29472
patch queue: notify.patch
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
327 self.repo = repo |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
328 self.stripcount = int(self.ui.config(b'notify', b'strip')) |
2201
f15056b29472
patch queue: notify.patch
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
329 self.root = self.strip(self.repo.root) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
330 self.domain = self.ui.config(b'notify', b'domain') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
331 self.mbox = self.ui.config(b'notify', b'mbox') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
332 self.test = self.ui.configbool(b'notify', b'test') |
7116
e981725da3fe
notify: mime-encode messages
Christian Ebert <blacktrash@gmx.net>
parents:
6979
diff
changeset
|
333 self.charsets = mail._charsets(self.ui) |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
334 self.subs = self.subscribers() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
335 self.merge = self.ui.configbool(b'notify', b'merge') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
336 self.showfunc = self.ui.configbool(b'notify', b'showfunc') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
337 self.messageidseed = self.ui.config(b'notify', b'messageidseed') |
44627
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
338 self.reply = self.ui.configbool(b'notify', b'reply-to-predecessor') |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
339 |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
340 if self.reply and not self.messageidseed: |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
341 raise error.Abort( |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
342 _( |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
343 b'notify.reply-to-predecessor used without ' |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
344 b'notify.messageidseed' |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
345 ) |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
346 ) |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
347 |
38028
d1134ca5b1a3
notify: add option to include function names in the diff output
Joerg Sonnenberger <joerg@bec.de>
parents:
37795
diff
changeset
|
348 if self.showfunc is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
349 self.showfunc = self.ui.configbool(b'diff', b'showfunc') |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
350 |
28951
1bba1b43525a
notify: do not load style file if template is specified (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
28416
diff
changeset
|
351 mapfile = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
352 template = self.ui.config(b'notify', hooktype) or self.ui.config( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
353 b'notify', b'template' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
354 ) |
28951
1bba1b43525a
notify: do not load style file if template is specified (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
28416
diff
changeset
|
355 if not template: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
356 mapfile = self.ui.config(b'notify', b'style') |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
357 if not mapfile and not template: |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
358 template = deftemplates.get(hooktype) or single_template |
35888
c8e2d6ed1f9e
cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35633
diff
changeset
|
359 spec = logcmdutil.templatespec(template, mapfile) |
35954
386c1e45e671
logcmdutil: drop default arguments from changesetdisplayer/templater() calls
Yuya Nishihara <yuya@tcha.org>
parents:
35888
diff
changeset
|
360 self.t = logcmdutil.changesettemplater(self.ui, self.repo, spec) |
2201
f15056b29472
patch queue: notify.patch
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
361 |
f15056b29472
patch queue: notify.patch
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
362 def strip(self, path): |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
363 '''strip leading slashes from local path, turn into web-safe path.''' |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
364 |
2201
f15056b29472
patch queue: notify.patch
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
365 path = util.pconvert(path) |
f15056b29472
patch queue: notify.patch
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
366 count = self.stripcount |
2326
d0ba2f6b9d97
notify: fix off by one error.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2296
diff
changeset
|
367 while count > 0: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
368 c = path.find(b'/') |
2201
f15056b29472
patch queue: notify.patch
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
369 if c == -1: |
f15056b29472
patch queue: notify.patch
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
370 break |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
371 path = path[c + 1 :] |
2201
f15056b29472
patch queue: notify.patch
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
372 count -= 1 |
f15056b29472
patch queue: notify.patch
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
373 return path |
f15056b29472
patch queue: notify.patch
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
374 |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
375 def fixmail(self, addr): |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
376 '''try to clean up email addresses.''' |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
377 |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36607
diff
changeset
|
378 addr = stringutil.email(addr.strip()) |
4094
fbf0e9acfd83
notify: don't try to fix addresses if notify.domain is not set
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4077
diff
changeset
|
379 if self.domain: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
380 a = addr.find(b'@localhost') |
4094
fbf0e9acfd83
notify: don't try to fix addresses if notify.domain is not set
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4077
diff
changeset
|
381 if a != -1: |
fbf0e9acfd83
notify: don't try to fix addresses if notify.domain is not set
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
4077
diff
changeset
|
382 addr = addr[:a] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
383 if b'@' not in addr: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
384 return addr + b'@' + self.domain |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
385 return addr |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
386 |
2201
f15056b29472
patch queue: notify.patch
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
387 def subscribers(self): |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
388 '''return list of email addresses of subscribers to this repo.''' |
8154
06f1e4e309ed
notify: turned a set-like dict into a real set
Martin Geisler <mg@lazybytes.net>
parents:
8142
diff
changeset
|
389 subs = set() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
390 for user, pats in self.ui.configitems(b'usersubs'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
391 for pat in pats.split(b','): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
392 if b'#' in pat: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
393 pat, revs = pat.split(b'#', 1) |
17754
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
394 else: |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
395 revs = None |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
396 if fnmatch.fnmatch(self.repo.root, pat.strip()): |
17754
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
397 subs.add((self.fixmail(user), revs)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
398 for pat, users in self.ui.configitems(b'reposubs'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
399 if b'#' in pat: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
400 pat, revs = pat.split(b'#', 1) |
17754
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
401 else: |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
402 revs = None |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
403 if fnmatch.fnmatch(self.repo.root, pat): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
404 for user in users.split(b','): |
17754
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
405 subs.add((self.fixmail(user), revs)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
406 return [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
407 (mail.addressencode(self.ui, s, self.charsets, self.test), r) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
408 for s, r in sorted(subs) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
409 ] |
2201
f15056b29472
patch queue: notify.patch
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
410 |
9486
dd8d10c36c9c
notify: make it possible to pass extra info into templates
Bryan O'Sullivan <bos@serpentine.com>
parents:
9327
diff
changeset
|
411 def node(self, ctx, **props): |
9516
f8048c334066
notify: permit suppression of merge changeset notification
David Champion <dgc@uchicago.edu>
parents:
9487
diff
changeset
|
412 '''format one changeset, unless it is a suppressed merge.''' |
f8048c334066
notify: permit suppression of merge changeset notification
David Champion <dgc@uchicago.edu>
parents:
9487
diff
changeset
|
413 if not self.merge and len(ctx.parents()) > 1: |
f8048c334066
notify: permit suppression of merge changeset notification
David Champion <dgc@uchicago.edu>
parents:
9487
diff
changeset
|
414 return False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
415 self.t.show( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
416 ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
417 changes=ctx.changeset(), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
418 baseurl=self.ui.config(b'web', b'baseurl'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
419 root=self.repo.root, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
420 webroot=self.root, |
51862
607e94e01851
format: add many "missing" comma
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
421 **props, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
422 ) |
9516
f8048c334066
notify: permit suppression of merge changeset notification
David Champion <dgc@uchicago.edu>
parents:
9487
diff
changeset
|
423 return True |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
424 |
2230
332950340788
localrepository.addchangegroup: add more source infos to hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2225
diff
changeset
|
425 def skipsource(self, source): |
332950340788
localrepository.addchangegroup: add more source infos to hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2225
diff
changeset
|
426 '''true if incoming changes from this source should be skipped.''' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
427 ok_sources = self.ui.config(b'notify', b'sources').split() |
2230
332950340788
localrepository.addchangegroup: add more source infos to hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2225
diff
changeset
|
428 return source not in ok_sources |
332950340788
localrepository.addchangegroup: add more source infos to hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2225
diff
changeset
|
429 |
7726
2486980fe211
notify: use contexts more pervasively
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7705
diff
changeset
|
430 def send(self, ctx, count, data): |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
431 '''send message.''' |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
432 |
17754
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
433 # Select subscribers by revset |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
434 subs = set() |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
435 for sub, spec in self.subs: |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
436 if spec is None: |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
437 subs.add(sub) |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
438 continue |
48717
ae27a0684e75
notify: don't produce errors if a revision is not found
Anton Shestakov <av6@dwimlabs.net>
parents:
45942
diff
changeset
|
439 try: |
ae27a0684e75
notify: don't produce errors if a revision is not found
Anton Shestakov <av6@dwimlabs.net>
parents:
45942
diff
changeset
|
440 revs = self.repo.revs(b'%r and %d:', spec, ctx.rev()) |
ae27a0684e75
notify: don't produce errors if a revision is not found
Anton Shestakov <av6@dwimlabs.net>
parents:
45942
diff
changeset
|
441 except error.RepoLookupError: |
ae27a0684e75
notify: don't produce errors if a revision is not found
Anton Shestakov <av6@dwimlabs.net>
parents:
45942
diff
changeset
|
442 continue |
17754
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
443 if len(revs): |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
444 subs.add(sub) |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
445 continue |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
446 if len(subs) == 0: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
447 self.ui.debug( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43077
diff
changeset
|
448 b'notify: no subscribers to selected repo and revset\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
449 ) |
17754
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
450 return |
19e9bf7c0927
notify: support revset selection for subscriptions
Michal Sznajder <michalsznajder@gmail.com>
parents:
16951
diff
changeset
|
451 |
9313
8736b1c853ff
notify: do not mime encode multipart templates
Christian Ebert <blacktrash@gmx.net>
parents:
8935
diff
changeset
|
452 try: |
43326
ef81de93143e
py3: use a BytesParser in notify extension
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43322
diff
changeset
|
453 msg = mail.parsebytes(data) |
40284
46b55f279571
notify: adapt to new location of email module's errors
Augie Fackler <augie@google.com>
parents:
40283
diff
changeset
|
454 except emailerrors.MessageParseError as inst: |
49864
5f006f789373
notify: force an exception wrapped by errors.Abort to bytestr
Matt Harbison <matt_harbison@yahoo.com>
parents:
49288
diff
changeset
|
455 raise error.Abort(stringutil.forcebytestr(inst)) |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
456 |
7116
e981725da3fe
notify: mime-encode messages
Christian Ebert <blacktrash@gmx.net>
parents:
6979
diff
changeset
|
457 # store sender and subject |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43329
diff
changeset
|
458 sender = msg['From'] |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43329
diff
changeset
|
459 subject = msg['Subject'] |
41404
43f9b8c0574b
notify: be more defensive aboute None values
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40304
diff
changeset
|
460 if sender is not None: |
43328
416041f97cc3
py3: decode email headers with mail.headdecode() in notify extension
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43327
diff
changeset
|
461 sender = mail.headdecode(sender) |
41404
43f9b8c0574b
notify: be more defensive aboute None values
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40304
diff
changeset
|
462 if subject is not None: |
43328
416041f97cc3
py3: decode email headers with mail.headdecode() in notify extension
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43327
diff
changeset
|
463 subject = mail.headdecode(subject) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43329
diff
changeset
|
464 del msg['From'], msg['Subject'] |
9313
8736b1c853ff
notify: do not mime encode multipart templates
Christian Ebert <blacktrash@gmx.net>
parents:
8935
diff
changeset
|
465 |
8736b1c853ff
notify: do not mime encode multipart templates
Christian Ebert <blacktrash@gmx.net>
parents:
8935
diff
changeset
|
466 if not msg.is_multipart(): |
8736b1c853ff
notify: do not mime encode multipart templates
Christian Ebert <blacktrash@gmx.net>
parents:
8935
diff
changeset
|
467 # create fresh mime message from scratch |
8736b1c853ff
notify: do not mime encode multipart templates
Christian Ebert <blacktrash@gmx.net>
parents:
8935
diff
changeset
|
468 # (multipart templates must take care of this themselves) |
8736b1c853ff
notify: do not mime encode multipart templates
Christian Ebert <blacktrash@gmx.net>
parents:
8935
diff
changeset
|
469 headers = msg.items() |
49288
ef5f5f1cbd90
py3: constant-fold some `pycompat.ispy3`
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
470 payload = msg.get_payload(decode=True) |
9313
8736b1c853ff
notify: do not mime encode multipart templates
Christian Ebert <blacktrash@gmx.net>
parents:
8935
diff
changeset
|
471 # for notification prefer readability over data precision |
8736b1c853ff
notify: do not mime encode multipart templates
Christian Ebert <blacktrash@gmx.net>
parents:
8935
diff
changeset
|
472 msg = mail.mimeencode(self.ui, payload, self.charsets, self.test) |
8736b1c853ff
notify: do not mime encode multipart templates
Christian Ebert <blacktrash@gmx.net>
parents:
8935
diff
changeset
|
473 # reinstate custom headers |
8736b1c853ff
notify: do not mime encode multipart templates
Christian Ebert <blacktrash@gmx.net>
parents:
8935
diff
changeset
|
474 for k, v in headers: |
8736b1c853ff
notify: do not mime encode multipart templates
Christian Ebert <blacktrash@gmx.net>
parents:
8935
diff
changeset
|
475 msg[k] = v |
7116
e981725da3fe
notify: mime-encode messages
Christian Ebert <blacktrash@gmx.net>
parents:
6979
diff
changeset
|
476 |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43329
diff
changeset
|
477 msg['Date'] = encoding.strfromlocal( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
478 dateutil.datestr(format=b"%a, %d %b %Y %H:%M:%S %1%2") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
479 ) |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
480 |
7705
c55e68e8f256
notify: remove subfunctions that are called only once
Christian Ebert <blacktrash@gmx.net>
parents:
7658
diff
changeset
|
481 # try to make subject line exist and be useful |
c55e68e8f256
notify: remove subfunctions that are called only once
Christian Ebert <blacktrash@gmx.net>
parents:
7658
diff
changeset
|
482 if not subject: |
c55e68e8f256
notify: remove subfunctions that are called only once
Christian Ebert <blacktrash@gmx.net>
parents:
7658
diff
changeset
|
483 if count > 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
484 subject = _(b'%s: %d new changesets') % (self.root, count) |
7705
c55e68e8f256
notify: remove subfunctions that are called only once
Christian Ebert <blacktrash@gmx.net>
parents:
7658
diff
changeset
|
485 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
486 s = ctx.description().lstrip().split(b'\n', 1)[0].rstrip() |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
487 subject = b'%s: %s' % (self.root, s) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
488 maxsubject = int(self.ui.config(b'notify', b'maxsubject')) |
13202
d83566f4453b
notify: use util.ellipsis() to truncate long subject
Yuya Nishihara <yuya@tcha.org>
parents:
10282
diff
changeset
|
489 if maxsubject: |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36607
diff
changeset
|
490 subject = stringutil.ellipsis(subject, maxsubject) |
43575
67b4439c09b2
mail: let headencode() return a native string
Denis Laxalde <denis@laxalde.org>
parents:
43506
diff
changeset
|
491 msg['Subject'] = mail.headencode( |
67b4439c09b2
mail: let headencode() return a native string
Denis Laxalde <denis@laxalde.org>
parents:
43506
diff
changeset
|
492 self.ui, subject, self.charsets, self.test |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
493 ) |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
494 |
7705
c55e68e8f256
notify: remove subfunctions that are called only once
Christian Ebert <blacktrash@gmx.net>
parents:
7658
diff
changeset
|
495 # try to make message have proper sender |
c55e68e8f256
notify: remove subfunctions that are called only once
Christian Ebert <blacktrash@gmx.net>
parents:
7658
diff
changeset
|
496 if not sender: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
497 sender = self.ui.config(b'email', b'from') or self.ui.username() |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
498 if b'@' not in sender or b'@localhost' in sender: |
7705
c55e68e8f256
notify: remove subfunctions that are called only once
Christian Ebert <blacktrash@gmx.net>
parents:
7658
diff
changeset
|
499 sender = self.fixmail(sender) |
43576
14b96072797d
mail: let addressencode() / addrlistencode() return native strings
Denis Laxalde <denis@laxalde.org>
parents:
43575
diff
changeset
|
500 msg['From'] = mail.addressencode( |
14b96072797d
mail: let addressencode() / addrlistencode() return native strings
Denis Laxalde <denis@laxalde.org>
parents:
43575
diff
changeset
|
501 self.ui, sender, self.charsets, self.test |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
502 ) |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
503 |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43329
diff
changeset
|
504 msg['X-Hg-Notification'] = 'changeset %s' % ctx |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43329
diff
changeset
|
505 if not msg['Message-Id']: |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43329
diff
changeset
|
506 msg['Message-Id'] = messageid(ctx, self.domain, self.messageidseed) |
44627
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
507 if self.reply: |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
508 unfi = self.repo.unfiltered() |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
509 has_node = unfi.changelog.index.has_node |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
510 predecessors = [ |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
511 unfi[ctx2] |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
512 for ctx2 in obsutil.allpredecessors(unfi.obsstore, [ctx.node()]) |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
513 if ctx2 != ctx.node() and has_node(ctx2) |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
514 ] |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
515 if predecessors: |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
516 # There is at least one predecessor, so which to pick? |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
517 # Ideally, there is a unique root because changesets have |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
518 # been evolved/rebased one step at a time. In this case, |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
519 # just picking the oldest known changeset provides a stable |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
520 # base. It doesn't help when changesets are folded. Any |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
521 # better solution would require storing more information |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
522 # in the repository. |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
523 pred = min(predecessors, key=lambda ctx: ctx.rev()) |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
524 msg['In-Reply-To'] = messageid( |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
525 pred, self.domain, self.messageidseed |
947e6df4ff77
notify: optional mail threading based on obsmarker
Joerg Sonnenberger <joerg@bec.de>
parents:
43576
diff
changeset
|
526 ) |
43576
14b96072797d
mail: let addressencode() / addrlistencode() return native strings
Denis Laxalde <denis@laxalde.org>
parents:
43575
diff
changeset
|
527 msg['To'] = ', '.join(sorted(subs)) |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
528 |
49288
ef5f5f1cbd90
py3: constant-fold some `pycompat.ispy3`
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
529 msgtext = msg.as_bytes() |
7498
64840fcb79e1
notify: no charset conversion when testing
Christian Ebert <blacktrash@gmx.net>
parents:
7369
diff
changeset
|
530 if self.test: |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
531 self.ui.write(msgtext) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
532 if not msgtext.endswith(b'\n'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
533 self.ui.write(b'\n') |
2201
f15056b29472
patch queue: notify.patch
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
534 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
535 self.ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
536 _(b'notify: sending %d subscribers %d changes\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
537 % (len(subs), count) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
538 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
539 mail.sendmail( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
540 self.ui, |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43329
diff
changeset
|
541 emailutils.parseaddr(msg['From'])[1], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
542 subs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
543 msgtext, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
544 mbox=self.mbox, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
545 ) |
2201
f15056b29472
patch queue: notify.patch
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
546 |
7726
2486980fe211
notify: use contexts more pervasively
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7705
diff
changeset
|
547 def diff(self, ctx, ref=None): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
548 maxdiff = int(self.ui.config(b'notify', b'maxdiff')) |
13878
a8d13ee0ce68
misc: replace .parents()[0] with p1()
Matt Mackall <mpm@selenic.com>
parents:
13202
diff
changeset
|
549 prev = ctx.p1().node() |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23454
diff
changeset
|
550 if ref: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23454
diff
changeset
|
551 ref = ref.node() |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23454
diff
changeset
|
552 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23454
diff
changeset
|
553 ref = ctx.node() |
38028
d1134ca5b1a3
notify: add option to include function names in the diff output
Joerg Sonnenberger <joerg@bec.de>
parents:
37795
diff
changeset
|
554 diffopts = patch.diffallopts(self.ui) |
d1134ca5b1a3
notify: add option to include function names in the diff output
Joerg Sonnenberger <joerg@bec.de>
parents:
37795
diff
changeset
|
555 diffopts.showfunc = self.showfunc |
d1134ca5b1a3
notify: add option to include function names in the diff output
Joerg Sonnenberger <joerg@bec.de>
parents:
37795
diff
changeset
|
556 chunks = patch.diff(self.repo, prev, ref, opts=diffopts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
557 difflines = b''.join(chunks).splitlines() |
6979 | 558 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
559 if self.ui.configbool(b'notify', b'diffstat'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
560 maxdiffstat = int(self.ui.config(b'notify', b'maxdiffstat')) |
3096
f422c8265ae5
Add support for diffstat in commit emails, and move diffstat from
Matt Doar <matt@xensource.com>
parents:
3017
diff
changeset
|
561 s = patch.diffstat(difflines) |
4077
1305ba7dee88
Prevent type exception on concatenation if diffstat returns None.
Sean Dague <sean@dague.net>
parents:
3739
diff
changeset
|
562 # s may be nil, don't include the header if it is |
1305ba7dee88
Prevent type exception on concatenation if diffstat returns None.
Sean Dague <sean@dague.net>
parents:
3739
diff
changeset
|
563 if s: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
564 if maxdiffstat >= 0 and s.count(b"\n") > maxdiffstat + 1: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
565 s = s.split(b"\n") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
566 msg = _(b'\ndiffstat (truncated from %d to %d lines):\n\n') |
37777
a4cac7b0ea4f
notify: add maxdiffstat option to truncate long file lists
Joerg Sonnenberger <joerg@bec.de>
parents:
37084
diff
changeset
|
567 self.ui.write(msg % (len(s) - 2, maxdiffstat)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
568 self.ui.write(b"\n".join(s[:maxdiffstat] + s[-2:])) |
37777
a4cac7b0ea4f
notify: add maxdiffstat option to truncate long file lists
Joerg Sonnenberger <joerg@bec.de>
parents:
37084
diff
changeset
|
569 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
570 self.ui.write(_(b'\ndiffstat:\n\n%s') % s) |
7726
2486980fe211
notify: use contexts more pervasively
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7705
diff
changeset
|
571 |
6305
e8d447d91cdb
notify: print diffstat even if maxline == 0
Benoît Allard <benoit@aeteurope.nl>
parents:
6229
diff
changeset
|
572 if maxdiff == 0: |
e8d447d91cdb
notify: print diffstat even if maxline == 0
Benoît Allard <benoit@aeteurope.nl>
parents:
6229
diff
changeset
|
573 return |
7726
2486980fe211
notify: use contexts more pervasively
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7705
diff
changeset
|
574 elif maxdiff > 0 and len(difflines) > maxdiff: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
575 msg = _(b'\ndiffs (truncated from %d to %d lines):\n\n') |
7726
2486980fe211
notify: use contexts more pervasively
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7705
diff
changeset
|
576 self.ui.write(msg % (len(difflines), maxdiff)) |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
577 difflines = difflines[:maxdiff] |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
578 elif difflines: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
579 self.ui.write(_(b'\ndiffs (%d lines):\n\n') % len(difflines)) |
7726
2486980fe211
notify: use contexts more pervasively
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7705
diff
changeset
|
580 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
581 self.ui.write(b"\n".join(difflines)) |
2201
f15056b29472
patch queue: notify.patch
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
582 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
583 |
2230
332950340788
localrepository.addchangegroup: add more source infos to hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2225
diff
changeset
|
584 def hook(ui, repo, hooktype, node=None, source=None, **kwargs): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
585 """send email notifications to interested subscribers. |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
586 |
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
587 if used as changegroup hook, send one email for all changesets in |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44627
diff
changeset
|
588 changegroup. else send one email per changeset.""" |
7726
2486980fe211
notify: use contexts more pervasively
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7705
diff
changeset
|
589 |
2203
9569eea1707c
add email notification hook. hook written in python.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2201
diff
changeset
|
590 n = notifier(ui, repo, hooktype) |
37794
04d648b53e3e
notify: access the initial revision on an unfiltered repository (issue5821)
Boris Feld <boris.feld@octobus.net>
parents:
37793
diff
changeset
|
591 ctx = repo.unfiltered()[node] |
7726
2486980fe211
notify: use contexts more pervasively
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7705
diff
changeset
|
592 |
2329
90368f89340a
notify: add debug output. do not fail if no config file.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2326
diff
changeset
|
593 if not n.subs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
594 ui.debug(b'notify: no subscribers to repository %s\n' % n.root) |
2329
90368f89340a
notify: add debug output. do not fail if no config file.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2326
diff
changeset
|
595 return |
90368f89340a
notify: add debug output. do not fail if no config file.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2326
diff
changeset
|
596 if n.skipsource(source): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
597 ui.debug(b'notify: changes have source "%s" - skipping\n' % source) |
2230
332950340788
localrepository.addchangegroup: add more source infos to hooks
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2225
diff
changeset
|
598 return |
7726
2486980fe211
notify: use contexts more pervasively
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7705
diff
changeset
|
599 |
3739
16f8e7d1dd54
fix notify with new ui buffering
Matt Mackall <mpm@selenic.com>
parents:
3679
diff
changeset
|
600 ui.pushbuffer() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
601 data = b'' |
9516
f8048c334066
notify: permit suppression of merge changeset notification
David Champion <dgc@uchicago.edu>
parents:
9487
diff
changeset
|
602 count = 0 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
603 author = b'' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
604 if hooktype == b'changegroup' or hooktype == b'outgoing': |
37793
a07fab68621f
notify: use changelog API to iterate over revision number (issue5821)
Boris Feld <boris.feld@octobus.net>
parents:
37777
diff
changeset
|
605 for rev in repo.changelog.revs(start=ctx.rev()): |
9516
f8048c334066
notify: permit suppression of merge changeset notification
David Champion <dgc@uchicago.edu>
parents:
9487
diff
changeset
|
606 if n.node(repo[rev]): |
f8048c334066
notify: permit suppression of merge changeset notification
David Champion <dgc@uchicago.edu>
parents:
9487
diff
changeset
|
607 count += 1 |
15654
2a7fa7c641d8
notify: change behavior of "changegroup" hook
Nikolaus Schueler <nikolaus.schueler@lantiq.com>
parents:
15561
diff
changeset
|
608 if not author: |
2a7fa7c641d8
notify: change behavior of "changegroup" hook
Nikolaus Schueler <nikolaus.schueler@lantiq.com>
parents:
15561
diff
changeset
|
609 author = repo[rev].user() |
9516
f8048c334066
notify: permit suppression of merge changeset notification
David Champion <dgc@uchicago.edu>
parents:
9487
diff
changeset
|
610 else: |
f8048c334066
notify: permit suppression of merge changeset notification
David Champion <dgc@uchicago.edu>
parents:
9487
diff
changeset
|
611 data += ui.popbuffer() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
612 ui.note( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
613 _(b'notify: suppressing notification for merge %d:%s\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
614 % (rev, repo[rev].hex()[:12]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
615 ) |
9516
f8048c334066
notify: permit suppression of merge changeset notification
David Champion <dgc@uchicago.edu>
parents:
9487
diff
changeset
|
616 ui.pushbuffer() |
f8048c334066
notify: permit suppression of merge changeset notification
David Champion <dgc@uchicago.edu>
parents:
9487
diff
changeset
|
617 if count: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
618 n.diff(ctx, repo[b'tip']) |
37795
68748c2c761b
notify: only notify for non-filtered revision
Boris Feld <boris.feld@octobus.net>
parents:
37794
diff
changeset
|
619 elif ctx.rev() in repo: |
9516
f8048c334066
notify: permit suppression of merge changeset notification
David Champion <dgc@uchicago.edu>
parents:
9487
diff
changeset
|
620 if not n.node(ctx): |
f8048c334066
notify: permit suppression of merge changeset notification
David Champion <dgc@uchicago.edu>
parents:
9487
diff
changeset
|
621 ui.popbuffer() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
622 ui.note( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
623 _(b'notify: suppressing notification for merge %d:%s\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
624 % (ctx.rev(), ctx.hex()[:12]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
625 ) |
9516
f8048c334066
notify: permit suppression of merge changeset notification
David Champion <dgc@uchicago.edu>
parents:
9487
diff
changeset
|
626 return |
f8048c334066
notify: permit suppression of merge changeset notification
David Champion <dgc@uchicago.edu>
parents:
9487
diff
changeset
|
627 count += 1 |
7726
2486980fe211
notify: use contexts more pervasively
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7705
diff
changeset
|
628 n.diff(ctx) |
26503
5a84a453b503
notify: fix fromauthor setting for 'incoming' hook type (issue4194)
Bruce Cran <bruce.cran@gmail.com>
parents:
25660
diff
changeset
|
629 if not author: |
5a84a453b503
notify: fix fromauthor setting for 'incoming' hook type (issue4194)
Bruce Cran <bruce.cran@gmail.com>
parents:
25660
diff
changeset
|
630 author = ctx.user() |
7726
2486980fe211
notify: use contexts more pervasively
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7705
diff
changeset
|
631 |
9516
f8048c334066
notify: permit suppression of merge changeset notification
David Champion <dgc@uchicago.edu>
parents:
9487
diff
changeset
|
632 data += ui.popbuffer() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
633 fromauthor = ui.config(b'notify', b'fromauthor') |
15654
2a7fa7c641d8
notify: change behavior of "changegroup" hook
Nikolaus Schueler <nikolaus.schueler@lantiq.com>
parents:
15561
diff
changeset
|
634 if author and fromauthor: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
635 data = b'\n'.join([b'From: %s' % author, data]) |
15654
2a7fa7c641d8
notify: change behavior of "changegroup" hook
Nikolaus Schueler <nikolaus.schueler@lantiq.com>
parents:
15561
diff
changeset
|
636 |
9516
f8048c334066
notify: permit suppression of merge changeset notification
David Champion <dgc@uchicago.edu>
parents:
9487
diff
changeset
|
637 if count: |
f8048c334066
notify: permit suppression of merge changeset notification
David Champion <dgc@uchicago.edu>
parents:
9487
diff
changeset
|
638 n.send(ctx, count, data) |
42904
d26a6706b070
notify: add option for deterministic message-id generation
Joerg Sonnenberger <joerg@bec.de>
parents:
41404
diff
changeset
|
639 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
640 |
42904
d26a6706b070
notify: add option for deterministic message-id generation
Joerg Sonnenberger <joerg@bec.de>
parents:
41404
diff
changeset
|
641 def messageid(ctx, domain, messageidseed): |
d26a6706b070
notify: add option for deterministic message-id generation
Joerg Sonnenberger <joerg@bec.de>
parents:
41404
diff
changeset
|
642 if domain and messageidseed: |
d26a6706b070
notify: add option for deterministic message-id generation
Joerg Sonnenberger <joerg@bec.de>
parents:
41404
diff
changeset
|
643 host = domain |
d26a6706b070
notify: add option for deterministic message-id generation
Joerg Sonnenberger <joerg@bec.de>
parents:
41404
diff
changeset
|
644 else: |
d26a6706b070
notify: add option for deterministic message-id generation
Joerg Sonnenberger <joerg@bec.de>
parents:
41404
diff
changeset
|
645 host = encoding.strtolocal(socket.getfqdn()) |
d26a6706b070
notify: add option for deterministic message-id generation
Joerg Sonnenberger <joerg@bec.de>
parents:
41404
diff
changeset
|
646 if messageidseed: |
d26a6706b070
notify: add option for deterministic message-id generation
Joerg Sonnenberger <joerg@bec.de>
parents:
41404
diff
changeset
|
647 messagehash = hashlib.sha512(ctx.hex() + messageidseed) |
43164
c32531444cdc
notify: cast hash to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43117
diff
changeset
|
648 messageid = b'<hg.%s@%s>' % ( |
c32531444cdc
notify: cast hash to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43117
diff
changeset
|
649 pycompat.sysbytes(messagehash.hexdigest()[:64]), |
c32531444cdc
notify: cast hash to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43117
diff
changeset
|
650 host, |
c32531444cdc
notify: cast hash to bytes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43117
diff
changeset
|
651 ) |
42904
d26a6706b070
notify: add option for deterministic message-id generation
Joerg Sonnenberger <joerg@bec.de>
parents:
41404
diff
changeset
|
652 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
653 messageid = b'<hg.%s.%d.%d@%s>' % ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
654 ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
655 int(time.time()), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
656 hash(ctx.repo().root), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
657 host, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42904
diff
changeset
|
658 ) |
42904
d26a6706b070
notify: add option for deterministic message-id generation
Joerg Sonnenberger <joerg@bec.de>
parents:
41404
diff
changeset
|
659 return encoding.strfromlocal(messageid) |