Mercurial > hg
annotate hgext/patchbomb.py @ 46336:4f17773fc6b5
share: rename share-safe warning config
Config introduced in previous patch was `share.source-safe-mismatch`. Let's
rename the warn as `share.source-safe-mismatch.warn`.
While we are here, made sure we have different configs for upgrade and
downgrade.
Differential Revision: https://phab.mercurial-scm.org/D9786
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Fri, 15 Jan 2021 12:08:07 +0530 |
parents | 59fa3890d40a |
children | d4ba4d51f85f |
rev | line source |
---|---|
8252
9674d64b6416
patchbomb: add copyright and license header
Martin Geisler <mg@lazybytes.net>
parents:
8208
diff
changeset
|
1 # patchbomb.py - sending Mercurial changesets as patch emails |
9674d64b6416
patchbomb: add copyright and license header
Martin Geisler <mg@lazybytes.net>
parents:
8208
diff
changeset
|
2 # |
9674d64b6416
patchbomb: add copyright and license header
Martin Geisler <mg@lazybytes.net>
parents:
8208
diff
changeset
|
3 # Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others |
9674d64b6416
patchbomb: add copyright and license header
Martin Geisler <mg@lazybytes.net>
parents:
8208
diff
changeset
|
4 # |
9674d64b6416
patchbomb: add copyright and license header
Martin Geisler <mg@lazybytes.net>
parents:
8208
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. |
8252
9674d64b6416
patchbomb: add copyright and license header
Martin Geisler <mg@lazybytes.net>
parents:
8208
diff
changeset
|
7 |
8935
f4f0e902b750
extensions: change descriptions for hook-providing extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
8934
diff
changeset
|
8 '''command to send changesets as (a series of) patch emails |
6666
53465a7464e2
convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6548
diff
changeset
|
9 |
7997
8eb9f495e150
patchbomb: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
10 The series is started off with a "[PATCH 0 of N]" introduction, which |
8eb9f495e150
patchbomb: word-wrap help texts at 70 characters
Martin Geisler <mg@daimi.au.dk>
parents:
7983
diff
changeset
|
11 describes the series as a whole. |
6666
53465a7464e2
convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6548
diff
changeset
|
12 |
9269
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
13 Each patch email has a Subject line of "[PATCH M of N] ...", using the |
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
14 first line of the changeset description as the subject text. The |
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
15 message contains two or three body parts: |
6666
53465a7464e2
convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6548
diff
changeset
|
16 |
9300
ad95ea1c975a
patchbomb: use a list instead of indented paragraphs
Martin Geisler <mg@lazybytes.net>
parents:
9289
diff
changeset
|
17 - The changeset description. |
ad95ea1c975a
patchbomb: use a list instead of indented paragraphs
Martin Geisler <mg@lazybytes.net>
parents:
9289
diff
changeset
|
18 - [Optional] The result of running diffstat on the patch. |
10973
49a07f441496
Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents:
10734
diff
changeset
|
19 - The patch itself, as generated by :hg:`export`. |
6666
53465a7464e2
convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6548
diff
changeset
|
20 |
9269
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
21 Each message refers to the first in the series using the In-Reply-To |
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
22 and References headers, so they will show up as a sequence in threaded |
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
23 mail and news readers, and in mail archives. |
6666
53465a7464e2
convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6548
diff
changeset
|
24 |
13838
c5709dfa5c1e
patchbomb, help/hgweb: do not refer to config files as hgrc files
Martin Geisler <mg@aragost.com>
parents:
13400
diff
changeset
|
25 To configure other defaults, add a section like this to your |
c5709dfa5c1e
patchbomb, help/hgweb: do not refer to config files as hgrc files
Martin Geisler <mg@aragost.com>
parents:
13400
diff
changeset
|
26 configuration file:: |
6666
53465a7464e2
convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6548
diff
changeset
|
27 |
53465a7464e2
convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6548
diff
changeset
|
28 [email] |
53465a7464e2
convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6548
diff
changeset
|
29 from = My Name <my@email> |
53465a7464e2
convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6548
diff
changeset
|
30 to = recipient1, recipient2, ... |
53465a7464e2
convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6548
diff
changeset
|
31 cc = cc1, cc2, ... |
53465a7464e2
convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6548
diff
changeset
|
32 bcc = bcc1, bcc2, ... |
11150
f66ca4431eb9
patchbomb: Reply-To support
Cédric Duval <cedricduval@free.fr>
parents:
10973
diff
changeset
|
33 reply-to = address1, address2, ... |
6666
53465a7464e2
convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6548
diff
changeset
|
34 |
10284
b08ffd27dfc8
patchbomb: document [patchbomb] config section for addresses
Christian Ebert <blacktrash@gmx.net>
parents:
10263
diff
changeset
|
35 Use ``[patchbomb]`` as configuration section name if you need to |
b08ffd27dfc8
patchbomb: document [patchbomb] config section for addresses
Christian Ebert <blacktrash@gmx.net>
parents:
10263
diff
changeset
|
36 override global ``[email]`` address settings. |
b08ffd27dfc8
patchbomb: document [patchbomb] config section for addresses
Christian Ebert <blacktrash@gmx.net>
parents:
10263
diff
changeset
|
37 |
10973
49a07f441496
Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents:
10734
diff
changeset
|
38 Then you can use the :hg:`email` command to mail a series of |
49a07f441496
Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents:
10734
diff
changeset
|
39 changesets as a patchbomb. |
6666
53465a7464e2
convert comments to docstrings in a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6548
diff
changeset
|
40 |
9269
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
41 You can also either configure the method option in the email section |
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
42 to be a sendmail compatible mailer or fill out the [smtp] section so |
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
43 that the patchbomb extension can automatically send patchbombs |
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
44 directly from the commandline. See the [email] and [smtp] sections in |
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
45 hgrc(5) for details. |
23487
c14af817ab76
patchbomb: add a 'patchbomb.intro' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23486
diff
changeset
|
46 |
27697
0ce0cfee497f
patchbomb: treat empty address list as no addresses
Bryan O'Sullivan <bos@serpentine.com>
parents:
27150
diff
changeset
|
47 By default, :hg:`email` will prompt for a ``To`` or ``CC`` header if |
0ce0cfee497f
patchbomb: treat empty address list as no addresses
Bryan O'Sullivan <bos@serpentine.com>
parents:
27150
diff
changeset
|
48 you do not supply one via configuration or the command line. You can |
0ce0cfee497f
patchbomb: treat empty address list as no addresses
Bryan O'Sullivan <bos@serpentine.com>
parents:
27150
diff
changeset
|
49 override this to never prompt by configuring an empty value:: |
0ce0cfee497f
patchbomb: treat empty address list as no addresses
Bryan O'Sullivan <bos@serpentine.com>
parents:
27150
diff
changeset
|
50 |
0ce0cfee497f
patchbomb: treat empty address list as no addresses
Bryan O'Sullivan <bos@serpentine.com>
parents:
27150
diff
changeset
|
51 [email] |
0ce0cfee497f
patchbomb: treat empty address list as no addresses
Bryan O'Sullivan <bos@serpentine.com>
parents:
27150
diff
changeset
|
52 cc = |
0ce0cfee497f
patchbomb: treat empty address list as no addresses
Bryan O'Sullivan <bos@serpentine.com>
parents:
27150
diff
changeset
|
53 |
23487
c14af817ab76
patchbomb: add a 'patchbomb.intro' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23486
diff
changeset
|
54 You can control the default inclusion of an introduction message with the |
c14af817ab76
patchbomb: add a 'patchbomb.intro' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23486
diff
changeset
|
55 ``patchbomb.intro`` configuration option. The configuration is always |
c14af817ab76
patchbomb: add a 'patchbomb.intro' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23486
diff
changeset
|
56 overwritten by command line flags like --intro and --desc:: |
c14af817ab76
patchbomb: add a 'patchbomb.intro' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23486
diff
changeset
|
57 |
c14af817ab76
patchbomb: add a 'patchbomb.intro' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23486
diff
changeset
|
58 [patchbomb] |
c14af817ab76
patchbomb: add a 'patchbomb.intro' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23486
diff
changeset
|
59 intro=auto # include introduction message if more than 1 patch (default) |
c14af817ab76
patchbomb: add a 'patchbomb.intro' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23486
diff
changeset
|
60 intro=never # never include an introduction message |
c14af817ab76
patchbomb: add a 'patchbomb.intro' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23486
diff
changeset
|
61 intro=always # always include an introduction message |
23488
11b215731e74
patchbomb: introduce a 'patchbomb.confirm' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23487
diff
changeset
|
62 |
31187
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
63 You can specify a template for flags to be added in subject prefixes. Flags |
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
64 specified by --flag option are exported as ``{flags}`` keyword:: |
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
65 |
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
66 [patchbomb] |
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
67 flagtemplate = "{separate(' ', |
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
68 ifeq(branch, 'default', '', branch|upper), |
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
69 flags)}" |
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
70 |
23488
11b215731e74
patchbomb: introduce a 'patchbomb.confirm' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23487
diff
changeset
|
71 You can set patchbomb to always ask for confirmation by setting |
11b215731e74
patchbomb: introduce a 'patchbomb.confirm' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23487
diff
changeset
|
72 ``patchbomb.confirm`` to true. |
9071
141e3ef20d84
patchbomb: wrapped docstrings at 78 characters
Martin Geisler <mg@lazybytes.net>
parents:
9047
diff
changeset
|
73 ''' |
28415
21524ae331b7
patchbomb: use absolute_import
timeless <timeless@mozdev.org>
parents:
27767
diff
changeset
|
74 from __future__ import absolute_import |
875 | 75 |
39032
8979626089bb
patchbomb: use email.encoders instead of email.Encoders
Augie Fackler <augie@google.com>
parents:
39027
diff
changeset
|
76 import email.encoders as emailencoders |
38472
d17d1ee1d602
patchbomb: use email.mime.base instead of email.MIMEBase
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38471
diff
changeset
|
77 import email.mime.base as emimebase |
38471
91228d9ae7c8
patchbomb: use email.mime.multipart instead of email.MIMEMultipart
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38403
diff
changeset
|
78 import email.mime.multipart as emimemultipart |
36448
39c9f339b692
py3: use email.utils module instead of email.Utils
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36446
diff
changeset
|
79 import email.utils as eutil |
28415
21524ae331b7
patchbomb: use absolute_import
timeless <timeless@mozdev.org>
parents:
27767
diff
changeset
|
80 import errno |
21524ae331b7
patchbomb: use absolute_import
timeless <timeless@mozdev.org>
parents:
27767
diff
changeset
|
81 import os |
21524ae331b7
patchbomb: use absolute_import
timeless <timeless@mozdev.org>
parents:
27767
diff
changeset
|
82 import socket |
19810
c80feeb715d1
python2.4: fix imports of sub-packages of the email package
Augie Fackler <raf@durin42.com>
parents:
19791
diff
changeset
|
83 |
29205
a0939666b836
py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents:
28981
diff
changeset
|
84 from mercurial.i18n import _ |
43085
eef9a2d67051
py3: manually import pycompat.open into files that need it
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
85 from mercurial.pycompat import open |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
86 from mercurial.node import bin |
28415
21524ae331b7
patchbomb: use absolute_import
timeless <timeless@mozdev.org>
parents:
27767
diff
changeset
|
87 from mercurial import ( |
21524ae331b7
patchbomb: use absolute_import
timeless <timeless@mozdev.org>
parents:
27767
diff
changeset
|
88 cmdutil, |
21524ae331b7
patchbomb: use absolute_import
timeless <timeless@mozdev.org>
parents:
27767
diff
changeset
|
89 commands, |
36449
a918c996a881
py3: use encoding.strtolocal() to convert str to bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36448
diff
changeset
|
90 encoding, |
28415
21524ae331b7
patchbomb: use absolute_import
timeless <timeless@mozdev.org>
parents:
27767
diff
changeset
|
91 error, |
31187
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
92 formatter, |
28415
21524ae331b7
patchbomb: use absolute_import
timeless <timeless@mozdev.org>
parents:
27767
diff
changeset
|
93 hg, |
21524ae331b7
patchbomb: use absolute_import
timeless <timeless@mozdev.org>
parents:
27767
diff
changeset
|
94 mail, |
21524ae331b7
patchbomb: use absolute_import
timeless <timeless@mozdev.org>
parents:
27767
diff
changeset
|
95 patch, |
35044
71e63fe6b1ab
py3: handle keyword arguments correctly in hgext/patchbomb.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34911
diff
changeset
|
96 pycompat, |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
31490
diff
changeset
|
97 registrar, |
28415
21524ae331b7
patchbomb: use absolute_import
timeless <timeless@mozdev.org>
parents:
27767
diff
changeset
|
98 scmutil, |
31187
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
99 templater, |
28415
21524ae331b7
patchbomb: use absolute_import
timeless <timeless@mozdev.org>
parents:
27767
diff
changeset
|
100 util, |
21524ae331b7
patchbomb: use absolute_import
timeless <timeless@mozdev.org>
parents:
27767
diff
changeset
|
101 ) |
36607
c6061cadb400
util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents:
36450
diff
changeset
|
102 from mercurial.utils import dateutil |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
103 |
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28474
diff
changeset
|
104 stringio = util.stringio |
875 | 105 |
14309
37e80214badf
patchbomb: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents:
14290
diff
changeset
|
106 cmdtable = {} |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
31490
diff
changeset
|
107 command = registrar.command(cmdtable) |
34111
798b679680aa
configitems: register the 'patchbomb.bundletype' config
Boris Feld <boris.feld@octobus.net>
parents:
34029
diff
changeset
|
108 |
798b679680aa
configitems: register the 'patchbomb.bundletype' config
Boris Feld <boris.feld@octobus.net>
parents:
34029
diff
changeset
|
109 configtable = {} |
798b679680aa
configitems: register the 'patchbomb.bundletype' config
Boris Feld <boris.feld@octobus.net>
parents:
34029
diff
changeset
|
110 configitem = registrar.configitem(configtable) |
798b679680aa
configitems: register the 'patchbomb.bundletype' config
Boris Feld <boris.feld@octobus.net>
parents:
34029
diff
changeset
|
111 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
112 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
113 b'patchbomb', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
114 b'bundletype', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
115 default=None, |
34111
798b679680aa
configitems: register the 'patchbomb.bundletype' config
Boris Feld <boris.feld@octobus.net>
parents:
34029
diff
changeset
|
116 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
117 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
118 b'patchbomb', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
119 b'bcc', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
120 default=None, |
34760
3819809198c6
configitems: register the 'patchbomb.bcc' config
Boris Feld <boris.feld@octobus.net>
parents:
34116
diff
changeset
|
121 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
122 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
123 b'patchbomb', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
124 b'cc', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
125 default=None, |
34761
cb1ea7ef773d
configitems: register the 'patchbomb.cc' config
Boris Feld <boris.feld@octobus.net>
parents:
34760
diff
changeset
|
126 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
127 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
128 b'patchbomb', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
129 b'confirm', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
130 default=False, |
34112
4ec0029b76e8
configitems: register the 'patchbomb.confirm' config
Boris Feld <boris.feld@octobus.net>
parents:
34111
diff
changeset
|
131 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
132 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
133 b'patchbomb', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
134 b'flagtemplate', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
135 default=None, |
34113
a6fa5af781a4
configitems: register the 'patchbomb.flagtemplate' config
Boris Feld <boris.feld@octobus.net>
parents:
34112
diff
changeset
|
136 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
137 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
138 b'patchbomb', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
139 b'from', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
140 default=None, |
34114
7e2adac3dd60
configitems: register the 'patchbomb.from' config
Boris Feld <boris.feld@octobus.net>
parents:
34113
diff
changeset
|
141 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
142 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
143 b'patchbomb', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
144 b'intro', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
145 default=b'auto', |
34115
97a3bb5aff25
configitems: register the 'patchbomb.intro' config
Boris Feld <boris.feld@octobus.net>
parents:
34114
diff
changeset
|
146 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
147 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
148 b'patchbomb', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
149 b'publicurl', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
150 default=None, |
34116
aeb956e7729f
configitems: register the 'patchbomb.publicurl' config
Boris Feld <boris.feld@octobus.net>
parents:
34115
diff
changeset
|
151 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
152 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
153 b'patchbomb', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
154 b'reply-to', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
155 default=None, |
34762
9223a437fdb6
configitems: register the 'patchbomb.reply-to' config
Boris Feld <boris.feld@octobus.net>
parents:
34761
diff
changeset
|
156 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
157 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
158 b'patchbomb', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
159 b'to', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
160 default=None, |
34911
645b6684cf5b
configitems: register 'email.to' and 'patchbomb.to'
Yuya Nishihara <yuya@tcha.org>
parents:
34762
diff
changeset
|
161 ) |
34111
798b679680aa
configitems: register the 'patchbomb.bundletype' config
Boris Feld <boris.feld@octobus.net>
parents:
34029
diff
changeset
|
162 |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29285
diff
changeset
|
163 # 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:
24568
diff
changeset
|
164 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24568
diff
changeset
|
165 # 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:
24568
diff
changeset
|
166 # leave the attribute unspecified. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
167 testedwith = b'ships-with-hg-core' |
14309
37e80214badf
patchbomb: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents:
14290
diff
changeset
|
168 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
169 |
26546
500386e65759
patchbomb: add experimental config of a "pullurl" and export it
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25826
diff
changeset
|
170 def _addpullheader(seq, ctx): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
171 """Add a header pointing to a public URL where the changeset is available""" |
26546
500386e65759
patchbomb: add experimental config of a "pullurl" and export it
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25826
diff
changeset
|
172 repo = ctx.repo() |
500386e65759
patchbomb: add experimental config of a "pullurl" and export it
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25826
diff
changeset
|
173 # experimental config: patchbomb.publicurl |
500386e65759
patchbomb: add experimental config of a "pullurl" and export it
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25826
diff
changeset
|
174 # waiting for some logic that check that the changeset are available on the |
500386e65759
patchbomb: add experimental config of a "pullurl" and export it
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25826
diff
changeset
|
175 # destination before patchbombing anything. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
176 publicurl = repo.ui.config(b'patchbomb', b'publicurl') |
32825
16ff5c6066a6
patchbomb: look for non-empty publicurl, not a non-None one
Augie Fackler <augie@google.com>
parents:
32824
diff
changeset
|
177 if publicurl: |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43099
diff
changeset
|
178 return b'Available At %s\n# hg pull %s -r %s' % ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
179 publicurl, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
180 publicurl, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
181 ctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
182 ) |
26546
500386e65759
patchbomb: add experimental config of a "pullurl" and export it
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25826
diff
changeset
|
183 return None |
500386e65759
patchbomb: add experimental config of a "pullurl" and export it
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25826
diff
changeset
|
184 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
185 |
26546
500386e65759
patchbomb: add experimental config of a "pullurl" and export it
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25826
diff
changeset
|
186 def uisetup(ui): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
187 cmdutil.extraexport.append(b'pullurl') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
188 cmdutil.extraexportmap[b'pullurl'] = _addpullheader |
26546
500386e65759
patchbomb: add experimental config of a "pullurl" and export it
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25826
diff
changeset
|
189 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
190 |
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
32826
diff
changeset
|
191 def reposetup(ui, repo): |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
32826
diff
changeset
|
192 if not repo.local(): |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
32826
diff
changeset
|
193 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
194 repo._wlockfreeprefix.add(b'last-email.txt') |
26546
500386e65759
patchbomb: add experimental config of a "pullurl" and export it
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25826
diff
changeset
|
195 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
196 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
197 def prompt(ui, prompt, default=None, rest=b':'): |
7354
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
198 if default: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
199 prompt += b' [%s]' % default |
15166
9ec9dd8d1b24
patchbomb: drop loop in prompt
Matt Mackall <mpm@selenic.com>
parents:
15165
diff
changeset
|
200 return ui.prompt(prompt + rest, default) |
7354
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
201 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
202 |
23487
c14af817ab76
patchbomb: add a 'patchbomb.intro' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23486
diff
changeset
|
203 def introwanted(ui, opts, number): |
15164
7bddec632821
patchbomb: make it easy for the user to decline sending an intro message.
Greg Ward <greg@gerg.ca>
parents:
15162
diff
changeset
|
204 '''is an introductory message apparently wanted?''' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
205 introconfig = ui.config(b'patchbomb', b'intro') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
206 if opts.get(b'intro') or opts.get(b'desc'): |
23487
c14af817ab76
patchbomb: add a 'patchbomb.intro' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23486
diff
changeset
|
207 intro = True |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
208 elif introconfig == b'always': |
23487
c14af817ab76
patchbomb: add a 'patchbomb.intro' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23486
diff
changeset
|
209 intro = True |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
210 elif introconfig == b'never': |
23487
c14af817ab76
patchbomb: add a 'patchbomb.intro' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23486
diff
changeset
|
211 intro = False |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
212 elif introconfig == b'auto': |
40029
e2697acd9381
cleanup: some Yoda conditions, this patch removes
Martin von Zweigbergk <martinvonz@google.com>
parents:
39118
diff
changeset
|
213 intro = number > 1 |
23487
c14af817ab76
patchbomb: add a 'patchbomb.intro' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23486
diff
changeset
|
214 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
215 ui.write_err( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
216 _(b'warning: invalid patchbomb.intro value "%s"\n') % introconfig |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
217 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
218 ui.write_err(_(b'(should be one of always, never, auto)\n')) |
40029
e2697acd9381
cleanup: some Yoda conditions, this patch removes
Martin von Zweigbergk <martinvonz@google.com>
parents:
39118
diff
changeset
|
219 intro = number > 1 |
23487
c14af817ab76
patchbomb: add a 'patchbomb.intro' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23486
diff
changeset
|
220 return intro |
10734
7a0502a6f9a1
patchbomb: --desc implies --intro
Cédric Duval <cedricduval@free.fr>
parents:
10611
diff
changeset
|
221 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
222 |
31187
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
223 def _formatflags(ui, repo, rev, flags): |
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
224 """build flag string optionally by template""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
225 tmpl = ui.config(b'patchbomb', b'flagtemplate') |
31187
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
226 if not tmpl: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
227 return b' '.join(flags) |
31187
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
228 out = util.stringio() |
45264
8cce9f77ca73
templatespec: create a factory function for each type there is
Martin von Zweigbergk <martinvonz@google.com>
parents:
43896
diff
changeset
|
229 spec = formatter.literal_templatespec(templater.unquotestring(tmpl)) |
43099
f1c5358f0d65
formatter: pass in template spec to templateformatter as argument
Yuya Nishihara <yuya@tcha.org>
parents:
43085
diff
changeset
|
230 with formatter.templateformatter(ui, out, b'patchbombflag', {}, spec) as fm: |
31187
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
231 fm.startitem() |
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
232 fm.context(ctx=repo[rev]) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
233 fm.write(b'flags', b'%s', fm.formatlist(flags, name=b'flag')) |
31187
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
234 return out.getvalue() |
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
235 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
236 |
31186
83fa357edbd5
patchbomb: pass around ui and revs that are needed for flag template
Yuya Nishihara <yuya@tcha.org>
parents:
31185
diff
changeset
|
237 def _formatprefix(ui, repo, rev, flags, idx, total, numbered): |
31183
8018b90f8307
patchbomb: factor out function that builds a prefix string to patch subject
Yuya Nishihara <yuya@tcha.org>
parents:
30848
diff
changeset
|
238 """build prefix to patch subject""" |
31187
6b8e1a08ef1d
patchbomb: add config knob to generate flags by template (issue5354)
Yuya Nishihara <yuya@tcha.org>
parents:
31186
diff
changeset
|
239 flag = _formatflags(ui, repo, rev, flags) |
31183
8018b90f8307
patchbomb: factor out function that builds a prefix string to patch subject
Yuya Nishihara <yuya@tcha.org>
parents:
30848
diff
changeset
|
240 if flag: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
241 flag = b' ' + flag |
31183
8018b90f8307
patchbomb: factor out function that builds a prefix string to patch subject
Yuya Nishihara <yuya@tcha.org>
parents:
30848
diff
changeset
|
242 |
8018b90f8307
patchbomb: factor out function that builds a prefix string to patch subject
Yuya Nishihara <yuya@tcha.org>
parents:
30848
diff
changeset
|
243 if not numbered: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
244 return b'[PATCH%s]' % flag |
31183
8018b90f8307
patchbomb: factor out function that builds a prefix string to patch subject
Yuya Nishihara <yuya@tcha.org>
parents:
30848
diff
changeset
|
245 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
246 tlen = len(b"%d" % total) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
247 return b'[PATCH %0*d of %d%s]' % (tlen, idx, total, flag) |
31183
8018b90f8307
patchbomb: factor out function that builds a prefix string to patch subject
Yuya Nishihara <yuya@tcha.org>
parents:
30848
diff
changeset
|
248 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
249 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
250 def makepatch( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
251 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
252 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
253 rev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
254 patchlines, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
255 opts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
256 _charsets, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
257 idx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
258 total, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
259 numbered, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
260 patchname=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
261 ): |
7354
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
262 |
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
263 desc = [] |
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
264 node = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
265 body = b'' |
7354
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
266 |
12199
17d604e522b4
patchbomb: rename argument to avoid shadowing patch module
Martin Geisler <mg@lazybytes.net>
parents:
12197
diff
changeset
|
267 for line in patchlines: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
268 if line.startswith(b'#'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
269 if line.startswith(b'# Node ID'): |
7354
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
270 node = line.split()[-1] |
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
271 continue |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
272 if line.startswith(b'diff -r') or line.startswith(b'diff --git'): |
7354
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
273 break |
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
274 desc.append(line) |
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
275 |
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
276 if not patchname and not node: |
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
277 raise ValueError |
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
278 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
279 if opts.get(b'attach') and not opts.get(b'body'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
280 body = ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
281 b'\n'.join(desc[1:]).strip() |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
282 or b'Patch subject is complete summary.' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
283 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
284 body += b'\n\n\n' |
7354
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
285 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
286 if opts.get(b'plain'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
287 while patchlines and patchlines[0].startswith(b'# '): |
12199
17d604e522b4
patchbomb: rename argument to avoid shadowing patch module
Martin Geisler <mg@lazybytes.net>
parents:
12197
diff
changeset
|
288 patchlines.pop(0) |
17d604e522b4
patchbomb: rename argument to avoid shadowing patch module
Martin Geisler <mg@lazybytes.net>
parents:
12197
diff
changeset
|
289 if patchlines: |
17d604e522b4
patchbomb: rename argument to avoid shadowing patch module
Martin Geisler <mg@lazybytes.net>
parents:
12197
diff
changeset
|
290 patchlines.pop(0) |
17d604e522b4
patchbomb: rename argument to avoid shadowing patch module
Martin Geisler <mg@lazybytes.net>
parents:
12197
diff
changeset
|
291 while patchlines and not patchlines[0].strip(): |
17d604e522b4
patchbomb: rename argument to avoid shadowing patch module
Martin Geisler <mg@lazybytes.net>
parents:
12197
diff
changeset
|
292 patchlines.pop(0) |
7354
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
293 |
30407
e1677cc29da6
patch: remove unused git parameter from patch.diffstat()
Henning Schild <henning@hennsch.de>
parents:
29841
diff
changeset
|
294 ds = patch.diffstat(patchlines) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
295 if opts.get(b'diffstat'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
296 body += ds + b'\n\n' |
7354
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
297 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
298 addattachment = opts.get(b'attach') or opts.get(b'inline') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
299 if not addattachment or opts.get(b'body'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
300 body += b'\n'.join(patchlines) |
16307
17a9a1f5cee2
patchbomb: add --body flag to send patches as inline message body text
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16233
diff
changeset
|
301 |
17a9a1f5cee2
patchbomb: add --body flag to send patches as inline message body text
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16233
diff
changeset
|
302 if addattachment: |
38471
91228d9ae7c8
patchbomb: use email.mime.multipart instead of email.MIMEMultipart
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38403
diff
changeset
|
303 msg = emimemultipart.MIMEMultipart() |
7354
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
304 if body: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
305 msg.attach(mail.mimeencode(ui, body, _charsets, opts.get(b'test'))) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
306 p = mail.mimetextpatch( |
43627
af3e341dbf03
mail: use a native string for "subtype" value
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43578
diff
changeset
|
307 b'\n'.join(patchlines), 'x-patch', opts.get(b'test') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
308 ) |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
309 binnode = bin(node) |
8761
0289f384e1e5
Generally replace "file name" with "filename" in help and comments.
timeless <timeless@gmail.com>
parents:
8520
diff
changeset
|
310 # if node is mq patch, it will have the patch file's name as a tag |
7354
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
311 if not patchname: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
312 patchtags = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
313 t |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
314 for t in repo.nodetags(binnode) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
315 if t.endswith(b'.patch') or t.endswith(b'.diff') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
316 ] |
7354
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
317 if patchtags: |
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
318 patchname = patchtags[0] |
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
319 elif total > 1: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
320 patchname = cmdutil.makefilename( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
321 repo[node], b'%b-%n.patch', seqno=idx, total=total |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
322 ) |
7354
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
323 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
324 patchname = cmdutil.makefilename(repo[node], b'%b.patch') |
39038
2161faf0d24b
patchbomb: use native strings when determining attachment disposition
Augie Fackler <augie@google.com>
parents:
39035
diff
changeset
|
325 disposition = r'inline' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
326 if opts.get(b'attach'): |
39038
2161faf0d24b
patchbomb: use native strings when determining attachment disposition
Augie Fackler <augie@google.com>
parents:
39035
diff
changeset
|
327 disposition = r'attachment' |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43339
diff
changeset
|
328 p['Content-Disposition'] = ( |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43339
diff
changeset
|
329 disposition + '; filename=' + encoding.strfromlocal(patchname) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
330 ) |
7354
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
331 msg.attach(p) |
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
332 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
333 msg = mail.mimetextpatch(body, display=opts.get(b'test')) |
7354
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
334 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
335 prefix = _formatprefix( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
336 ui, repo, rev, opts.get(b'flag'), idx, total, numbered |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
337 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
338 subj = desc[0].strip().rstrip(b'. ') |
15164
7bddec632821
patchbomb: make it easy for the user to decline sending an intro message.
Greg Ward <greg@gerg.ca>
parents:
15162
diff
changeset
|
339 if not numbered: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
340 subj = b' '.join([prefix, opts.get(b'subject') or subj]) |
7354
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
341 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
342 subj = b' '.join([prefix, subj]) |
43578
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
343 msg['Subject'] = mail.headencode(ui, subj, _charsets, opts.get(b'test')) |
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
344 msg['X-Mercurial-Node'] = pycompat.sysstr(node) |
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
345 msg['X-Mercurial-Series-Index'] = '%i' % idx |
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
346 msg['X-Mercurial-Series-Total'] = '%i' % total |
12200
aebb39d45500
patchbomb: let diffstat prompt only once with complete summary
Christian Ebert <blacktrash@gmx.net>
parents:
12199
diff
changeset
|
347 return msg, subj, ds |
7354
cad454f295b0
patchbomb: extract a bunch of nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7353
diff
changeset
|
348 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
349 |
23210
79f7444520bf
patchbomb: extract 'getpatches' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23173
diff
changeset
|
350 def _getpatches(repo, revs, **opts): |
79f7444520bf
patchbomb: extract 'getpatches' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23173
diff
changeset
|
351 """return a list of patches for a list of revisions |
79f7444520bf
patchbomb: extract 'getpatches' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23173
diff
changeset
|
352 |
79f7444520bf
patchbomb: extract 'getpatches' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23173
diff
changeset
|
353 Each patch in the list is itself a list of lines. |
79f7444520bf
patchbomb: extract 'getpatches' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23173
diff
changeset
|
354 """ |
79f7444520bf
patchbomb: extract 'getpatches' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23173
diff
changeset
|
355 ui = repo.ui |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
356 prev = repo[b'.'].rev() |
24568
2e5f6cdf01f6
patchbomb: factor out scmutil.revrange() calls
Yuya Nishihara <yuya@tcha.org>
parents:
24567
diff
changeset
|
357 for r in revs: |
23210
79f7444520bf
patchbomb: extract 'getpatches' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23173
diff
changeset
|
358 if r == prev and (repo[None].files() or repo[None].deleted()): |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43099
diff
changeset
|
359 ui.warn(_(b'warning: working directory has uncommitted changes\n')) |
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28474
diff
changeset
|
360 output = stringio() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
361 cmdutil.exportfile( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
362 repo, [r], output, opts=patch.difffeatureopts(ui, opts, git=True) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
363 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
364 yield output.getvalue().split(b'\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
365 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
366 |
23211
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
367 def _getbundle(repo, dest, **opts): |
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
368 """return a bundle containing changesets missing in "dest" |
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
369 |
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
370 The `opts` keyword-arguments are the same as the one accepted by the |
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
371 `bundle` command. |
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
372 |
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
373 The bundle is a returned as a single in-memory binary blob. |
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
374 """ |
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
375 ui = repo.ui |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
376 tmpdir = pycompat.mkdtemp(prefix=b'hg-email-bundle-') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
377 tmpfn = os.path.join(tmpdir, b'bundle') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
378 btype = ui.config(b'patchbomb', b'bundletype') |
26563
d4a1bfe1de63
patchbomb: add a 'bundletype' config under 'patchbomb'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26546
diff
changeset
|
379 if btype: |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43339
diff
changeset
|
380 opts['type'] = btype |
23211
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
381 try: |
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
382 commands.bundle(ui, repo, tmpfn, dest, **opts) |
27767
ddfb8887212d
patchbomb: replace file I/O with util.readfile
Bryan O'Sullivan <bryano@fb.com>
parents:
27697
diff
changeset
|
383 return util.readfile(tmpfn) |
23211
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
384 finally: |
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
385 try: |
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
386 os.unlink(tmpfn) |
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
387 except OSError: |
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
388 pass |
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
389 os.rmdir(tmpdir) |
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
390 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
391 |
23212
4b4eae00f9dd
patchbomb: extract 'getdescription' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23211
diff
changeset
|
392 def _getdescription(repo, defaultbody, sender, **opts): |
4b4eae00f9dd
patchbomb: extract 'getdescription' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23211
diff
changeset
|
393 """obtain the body of the introduction message and return it |
4b4eae00f9dd
patchbomb: extract 'getdescription' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23211
diff
changeset
|
394 |
4b4eae00f9dd
patchbomb: extract 'getdescription' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23211
diff
changeset
|
395 This is also used for the body of email with an attached bundle. |
4b4eae00f9dd
patchbomb: extract 'getdescription' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23211
diff
changeset
|
396 |
4b4eae00f9dd
patchbomb: extract 'getdescription' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23211
diff
changeset
|
397 The body can be obtained either from the command line option or entered by |
4b4eae00f9dd
patchbomb: extract 'getdescription' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23211
diff
changeset
|
398 the user through the editor. |
4b4eae00f9dd
patchbomb: extract 'getdescription' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23211
diff
changeset
|
399 """ |
4b4eae00f9dd
patchbomb: extract 'getdescription' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23211
diff
changeset
|
400 ui = repo.ui |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43339
diff
changeset
|
401 if opts.get('desc'): |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43339
diff
changeset
|
402 body = open(opts.get('desc')).read() |
23212
4b4eae00f9dd
patchbomb: extract 'getdescription' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23211
diff
changeset
|
403 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
404 ui.write( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43099
diff
changeset
|
405 _(b'\nWrite the introductory message for the patch series.\n\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
406 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
407 body = ui.edit( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
408 defaultbody, sender, repopath=repo.path, action=b'patchbombbody' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
409 ) |
23212
4b4eae00f9dd
patchbomb: extract 'getdescription' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23211
diff
changeset
|
410 # Save series description in case sendmail fails |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
411 msgfile = repo.vfs(b'last-email.txt', b'wb') |
23212
4b4eae00f9dd
patchbomb: extract 'getdescription' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23211
diff
changeset
|
412 msgfile.write(body) |
4b4eae00f9dd
patchbomb: extract 'getdescription' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23211
diff
changeset
|
413 msgfile.close() |
4b4eae00f9dd
patchbomb: extract 'getdescription' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23211
diff
changeset
|
414 return body |
23211
6993282e5362
patchbomb: extract 'getbundle' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23210
diff
changeset
|
415 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
416 |
23213
23a78662b6dd
patchbomb: extract 'getbundlemsgs' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23212
diff
changeset
|
417 def _getbundlemsgs(repo, sender, bundle, **opts): |
23a78662b6dd
patchbomb: extract 'getbundlemsgs' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23212
diff
changeset
|
418 """Get the full email for sending a given bundle |
23a78662b6dd
patchbomb: extract 'getbundlemsgs' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23212
diff
changeset
|
419 |
23a78662b6dd
patchbomb: extract 'getbundlemsgs' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23212
diff
changeset
|
420 This function returns a list of "email" tuples (subject, content, None). |
23a78662b6dd
patchbomb: extract 'getbundlemsgs' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23212
diff
changeset
|
421 The list is always one message long in that case. |
23a78662b6dd
patchbomb: extract 'getbundlemsgs' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23212
diff
changeset
|
422 """ |
23a78662b6dd
patchbomb: extract 'getbundlemsgs' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23212
diff
changeset
|
423 ui = repo.ui |
23a78662b6dd
patchbomb: extract 'getbundlemsgs' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23212
diff
changeset
|
424 _charsets = mail._charsets(ui) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43339
diff
changeset
|
425 subj = opts.get('subject') or prompt( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
426 ui, b'Subject:', b'A bundle for your repository' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
427 ) |
23213
23a78662b6dd
patchbomb: extract 'getbundlemsgs' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23212
diff
changeset
|
428 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
429 body = _getdescription(repo, b'', sender, **opts) |
38471
91228d9ae7c8
patchbomb: use email.mime.multipart instead of email.MIMEMultipart
Pulkit Goyal <7895pulkit@gmail.com>
parents:
38403
diff
changeset
|
430 msg = emimemultipart.MIMEMultipart() |
23213
23a78662b6dd
patchbomb: extract 'getbundlemsgs' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23212
diff
changeset
|
431 if body: |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43339
diff
changeset
|
432 msg.attach(mail.mimeencode(ui, body, _charsets, opts.get('test'))) |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43339
diff
changeset
|
433 datapart = emimebase.MIMEBase('application', 'x-mercurial-bundle') |
23213
23a78662b6dd
patchbomb: extract 'getbundlemsgs' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23212
diff
changeset
|
434 datapart.set_payload(bundle) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43339
diff
changeset
|
435 bundlename = b'%s.hg' % opts.get('bundlename', b'bundle') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
436 datapart.add_header( |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43339
diff
changeset
|
437 'Content-Disposition', |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43339
diff
changeset
|
438 'attachment', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
439 filename=encoding.strfromlocal(bundlename), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
440 ) |
39032
8979626089bb
patchbomb: use email.encoders instead of email.Encoders
Augie Fackler <augie@google.com>
parents:
39027
diff
changeset
|
441 emailencoders.encode_base64(datapart) |
23213
23a78662b6dd
patchbomb: extract 'getbundlemsgs' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23212
diff
changeset
|
442 msg.attach(datapart) |
43578
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
443 msg['Subject'] = mail.headencode(ui, subj, _charsets, opts.get('test')) |
23213
23a78662b6dd
patchbomb: extract 'getbundlemsgs' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23212
diff
changeset
|
444 return [(msg, subj, None)] |
23a78662b6dd
patchbomb: extract 'getbundlemsgs' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23212
diff
changeset
|
445 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
446 |
31186
83fa357edbd5
patchbomb: pass around ui and revs that are needed for flag template
Yuya Nishihara <yuya@tcha.org>
parents:
31185
diff
changeset
|
447 def _makeintro(repo, sender, revs, patches, **opts): |
23214
563d33fc4b3d
patchbomb: extract 'makeintro' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23213
diff
changeset
|
448 """make an introduction email, asking the user for content if needed |
563d33fc4b3d
patchbomb: extract 'makeintro' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23213
diff
changeset
|
449 |
563d33fc4b3d
patchbomb: extract 'makeintro' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23213
diff
changeset
|
450 email is returned as (subject, body, cumulative-diffstat)""" |
563d33fc4b3d
patchbomb: extract 'makeintro' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23213
diff
changeset
|
451 ui = repo.ui |
563d33fc4b3d
patchbomb: extract 'makeintro' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23213
diff
changeset
|
452 _charsets = mail._charsets(ui) |
563d33fc4b3d
patchbomb: extract 'makeintro' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23213
diff
changeset
|
453 |
31186
83fa357edbd5
patchbomb: pass around ui and revs that are needed for flag template
Yuya Nishihara <yuya@tcha.org>
parents:
31185
diff
changeset
|
454 # use the last revision which is likely to be a bookmarked head |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
455 prefix = _formatprefix( |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43339
diff
changeset
|
456 ui, repo, revs.last(), opts.get('flag'), 0, len(patches), numbered=True |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
457 ) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43339
diff
changeset
|
458 subj = opts.get('subject') or prompt( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
459 ui, b'(optional) Subject: ', rest=prefix, default=b'' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
460 ) |
23214
563d33fc4b3d
patchbomb: extract 'makeintro' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23213
diff
changeset
|
461 if not subj: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
462 return None # skip intro if the user doesn't bother |
23214
563d33fc4b3d
patchbomb: extract 'makeintro' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23213
diff
changeset
|
463 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
464 subj = prefix + b' ' + subj |
23214
563d33fc4b3d
patchbomb: extract 'makeintro' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23213
diff
changeset
|
465 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
466 body = b'' |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43339
diff
changeset
|
467 if opts.get('diffstat'): |
23214
563d33fc4b3d
patchbomb: extract 'makeintro' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23213
diff
changeset
|
468 # generate a cumulative diffstat of the whole patch series |
563d33fc4b3d
patchbomb: extract 'makeintro' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23213
diff
changeset
|
469 diffstat = patch.diffstat(sum(patches, [])) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
470 body = b'\n' + diffstat |
23214
563d33fc4b3d
patchbomb: extract 'makeintro' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23213
diff
changeset
|
471 else: |
563d33fc4b3d
patchbomb: extract 'makeintro' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23213
diff
changeset
|
472 diffstat = None |
563d33fc4b3d
patchbomb: extract 'makeintro' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23213
diff
changeset
|
473 |
563d33fc4b3d
patchbomb: extract 'makeintro' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23213
diff
changeset
|
474 body = _getdescription(repo, body, sender, **opts) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43339
diff
changeset
|
475 msg = mail.mimeencode(ui, body, _charsets, opts.get('test')) |
43578
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
476 msg['Subject'] = mail.headencode(ui, subj, _charsets, opts.get('test')) |
23214
563d33fc4b3d
patchbomb: extract 'makeintro' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23213
diff
changeset
|
477 return (msg, subj, diffstat) |
563d33fc4b3d
patchbomb: extract 'makeintro' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23213
diff
changeset
|
478 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
479 |
31185
bbb5d2aa0bf0
patchbomb: build patch texts by _getpatchmsgs()
Yuya Nishihara <yuya@tcha.org>
parents:
31184
diff
changeset
|
480 def _getpatchmsgs(repo, sender, revs, patchnames=None, **opts): |
23215
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
481 """return a list of emails from a list of patches |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
482 |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
483 This involves introduction message creation if necessary. |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
484 |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
485 This function returns a list of "email" tuples (subject, content, None). |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
486 """ |
35044
71e63fe6b1ab
py3: handle keyword arguments correctly in hgext/patchbomb.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34911
diff
changeset
|
487 bytesopts = pycompat.byteskwargs(opts) |
23215
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
488 ui = repo.ui |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
489 _charsets = mail._charsets(ui) |
31185
bbb5d2aa0bf0
patchbomb: build patch texts by _getpatchmsgs()
Yuya Nishihara <yuya@tcha.org>
parents:
31184
diff
changeset
|
490 patches = list(_getpatches(repo, revs, **opts)) |
23215
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
491 msgs = [] |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
492 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
493 ui.write(_(b'this patch series consists of %d patches.\n\n') % len(patches)) |
23215
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
494 |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
495 # build the intro message, or skip it if the user declines |
35044
71e63fe6b1ab
py3: handle keyword arguments correctly in hgext/patchbomb.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34911
diff
changeset
|
496 if introwanted(ui, bytesopts, len(patches)): |
31186
83fa357edbd5
patchbomb: pass around ui and revs that are needed for flag template
Yuya Nishihara <yuya@tcha.org>
parents:
31185
diff
changeset
|
497 msg = _makeintro(repo, sender, revs, patches, **opts) |
23215
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
498 if msg: |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
499 msgs.append(msg) |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
500 |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
501 # are we going to send more than one message? |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
502 numbered = len(msgs) + len(patches) > 1 |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
503 |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
504 # now generate the actual patch messages |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
505 name = None |
31186
83fa357edbd5
patchbomb: pass around ui and revs that are needed for flag template
Yuya Nishihara <yuya@tcha.org>
parents:
31185
diff
changeset
|
506 assert len(revs) == len(patches) |
83fa357edbd5
patchbomb: pass around ui and revs that are needed for flag template
Yuya Nishihara <yuya@tcha.org>
parents:
31185
diff
changeset
|
507 for i, (r, p) in enumerate(zip(revs, patches)): |
23215
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
508 if patchnames: |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
509 name = patchnames[i] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
510 msg = makepatch( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
511 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
512 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
513 r, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
514 p, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
515 bytesopts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
516 _charsets, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
517 i + 1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
518 len(patches), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
519 numbered, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
520 name, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
521 ) |
23215
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
522 msgs.append(msg) |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
523 |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
524 return msgs |
83a191031f94
patchbomb: extract 'getpatchmsgs' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23214
diff
changeset
|
525 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
526 |
23486
1de214837f5e
patchbomb: extract 'getoutgoing' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23450
diff
changeset
|
527 def _getoutgoing(repo, dest, revs): |
1de214837f5e
patchbomb: extract 'getoutgoing' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23450
diff
changeset
|
528 '''Return the revisions present locally but not in dest''' |
1de214837f5e
patchbomb: extract 'getoutgoing' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23450
diff
changeset
|
529 ui = repo.ui |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
530 url = ui.expandpath(dest or b'default-push', dest or b'default') |
23486
1de214837f5e
patchbomb: extract 'getoutgoing' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23450
diff
changeset
|
531 url = hg.parseurl(url)[0] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
532 ui.status(_(b'comparing with %s\n') % util.hidepassword(url)) |
23486
1de214837f5e
patchbomb: extract 'getoutgoing' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23450
diff
changeset
|
533 |
24568
2e5f6cdf01f6
patchbomb: factor out scmutil.revrange() calls
Yuya Nishihara <yuya@tcha.org>
parents:
24567
diff
changeset
|
534 revs = [r for r in revs if r >= 0] |
23486
1de214837f5e
patchbomb: extract 'getoutgoing' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23450
diff
changeset
|
535 if not revs: |
35674
e711906aa42c
patchbomb: use 'tiprev' when appropriate
Boris Feld <boris.feld@octobus.net>
parents:
35466
diff
changeset
|
536 revs = [repo.changelog.tiprev()] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
537 revs = repo.revs(b'outgoing(%s) and ::%ld', dest or b'', revs) |
23486
1de214837f5e
patchbomb: extract 'getoutgoing' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23450
diff
changeset
|
538 if not revs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
539 ui.status(_(b"no changes found\n")) |
24567
13f0af2a5a4c
patchbomb: return outgoing revs as a smartset
Yuya Nishihara <yuya@tcha.org>
parents:
24306
diff
changeset
|
540 return revs |
23486
1de214837f5e
patchbomb: extract 'getoutgoing' closure into its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23450
diff
changeset
|
541 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
542 |
39117
4899c6d22dff
patchbomb: extract function for generating message-id
Augie Fackler <raf@durin42.com>
parents:
39104
diff
changeset
|
543 def _msgid(node, timestamp): |
43578
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
544 try: |
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
545 hostname = encoding.strfromlocal(encoding.environ[b'HGHOSTNAME']) |
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
546 except KeyError: |
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
547 hostname = socket.getfqdn() |
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
548 return '<%s.%d@%s>' % (node, timestamp, hostname) |
39117
4899c6d22dff
patchbomb: extract function for generating message-id
Augie Fackler <raf@durin42.com>
parents:
39104
diff
changeset
|
549 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
550 |
14309
37e80214badf
patchbomb: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents:
14290
diff
changeset
|
551 emailopts = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
552 (b'', b'body', None, _(b'send patches as inline message text (default)')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
553 (b'a', b'attach', None, _(b'send patches as attachments')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
554 (b'i', b'inline', None, _(b'send patches as inline attachments')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
555 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
556 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
557 b'bcc', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
558 [], |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
559 _(b'email addresses of blind carbon copy recipients'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
560 _(b'EMAIL'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
561 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
562 (b'c', b'cc', [], _(b'email addresses of copy recipients'), _(b'EMAIL')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
563 (b'', b'confirm', None, _(b'ask for confirmation before sending')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
564 (b'd', b'diffstat', None, _(b'add diffstat output to messages')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
565 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
566 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
567 b'date', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
568 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
569 _(b'use the given date as the sending date'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
570 _(b'DATE'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
571 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
572 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
573 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
574 b'desc', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
575 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
576 _(b'use the given file as the series description'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
577 _(b'FILE'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
578 ), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
579 (b'f', b'from', b'', _(b'email address of sender'), _(b'EMAIL')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
580 (b'n', b'test', None, _(b'print messages that would be sent')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
581 ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
582 b'm', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
583 b'mbox', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
584 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
585 _(b'write messages to mbox file instead of sending them'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
586 _(b'FILE'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
587 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
588 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
589 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
590 b'reply-to', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
591 [], |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
592 _(b'email addresses replies should be sent to'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
593 _(b'EMAIL'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
594 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
595 ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
596 b's', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
597 b'subject', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
598 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
599 _(b'subject of first message (intro or single patch)'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
600 _(b'TEXT'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
601 ), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
602 ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
603 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
604 b'in-reply-to', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
605 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
606 _(b'message identifier to reply to'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
607 _(b'MSGID'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
608 ), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
609 (b'', b'flag', [], _(b'flags to add in subject prefixes'), _(b'FLAG')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
610 (b't', b'to', [], _(b'email addresses of recipients'), _(b'EMAIL')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
611 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
612 |
14309
37e80214badf
patchbomb: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents:
14290
diff
changeset
|
613 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
614 @command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
615 b'email', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
616 [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
617 (b'g', b'git', None, _(b'use git extended diff format')), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
618 (b'', b'plain', None, _(b'omit hg patch header')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
619 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
620 b'o', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
621 b'outgoing', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
622 None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
623 _(b'send changes not found in the target repository'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
624 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
625 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
626 b'b', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
627 b'bundle', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
628 None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
629 _(b'send changes not in target as a binary bundle'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
630 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
631 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
632 b'B', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
633 b'bookmark', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
634 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
635 _(b'send changes only reachable by given bookmark'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
636 _(b'BOOKMARK'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
637 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
638 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
639 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
640 b'bundlename', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
641 b'bundle', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
642 _(b'name of the bundle attachment file'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
643 _(b'NAME'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
644 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
645 (b'r', b'rev', [], _(b'a revision to send'), _(b'REV')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
646 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
647 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
648 b'force', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
649 None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
650 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
651 b'run even when remote repository is unrelated ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
652 b'(with -b/--bundle)' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
653 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
654 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
655 ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
656 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
657 b'base', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
658 [], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
659 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
660 b'a base changeset to specify instead of a destination ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
661 b'(with -b/--bundle)' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
662 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
663 _(b'REV'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
664 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
665 ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
666 b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
667 b'intro', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
668 None, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
669 _(b'send an introduction email for a single patch'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
670 ), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
671 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
672 + emailopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
673 + cmdutil.remoteopts, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
674 _(b'hg email [OPTION]... [DEST]...'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
675 helpcategory=command.CATEGORY_IMPORT_EXPORT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
676 ) |
27150
88aaddb1af88
patchbomb: rename email function
timeless <timeless@mozdev.org>
parents:
26626
diff
changeset
|
677 def email(ui, repo, *revs, **opts): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
678 """send changesets by email |
1204
b0f6053df539
patchbomb: continue if we can't import readline.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1154
diff
changeset
|
679 |
11193
687c7d395f20
Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents:
11183
diff
changeset
|
680 By default, diffs are sent in the format generated by |
687c7d395f20
Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents:
11183
diff
changeset
|
681 :hg:`export`, one per message. The series starts with a "[PATCH 0 |
687c7d395f20
Use our custom hg reStructuredText role some more
Martin Geisler <mg@aragost.com>
parents:
11183
diff
changeset
|
682 of N]" introduction, which describes the series as a whole. |
1672
07f931af5f40
add documentation for email command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1670
diff
changeset
|
683 |
9269
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
684 Each patch email has a Subject line of "[PATCH M of N] ...", using |
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
685 the first line of the changeset description as the subject text. |
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
686 The message contains two or three parts. First, the changeset |
12749
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
687 description. |
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
688 |
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
689 With the -d/--diffstat option, if the diffstat program is |
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
690 installed, the result of running diffstat on the patch is inserted. |
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
691 |
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
692 Finally, the patch itself, as generated by :hg:`export`. |
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
693 |
17880
9f6044119166
patchbomb: -c is not an alias for the --confirm option
Julian Cowley <julian@lava.net>
parents:
17859
diff
changeset
|
694 With the -d/--diffstat or --confirm options, you will be presented |
12749
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
695 with a final summary of all messages and asked for confirmation before |
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
696 the messages are sent. |
4262
f51317e24114
Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents:
4144
diff
changeset
|
697 |
9269
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
698 By default the patch is included as text in the email body for |
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
699 easy reviewing. Using the -a/--attach option will instead create |
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
700 an attachment for the patch. With -i/--inline an inline attachment |
16307
17a9a1f5cee2
patchbomb: add --body flag to send patches as inline message body text
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16233
diff
changeset
|
701 will be created. You can include a patch both as text in the email |
17a9a1f5cee2
patchbomb: add --body flag to send patches as inline message body text
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16233
diff
changeset
|
702 body and as a regular or an inline attachment by combining the |
17a9a1f5cee2
patchbomb: add --body flag to send patches as inline message body text
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16233
diff
changeset
|
703 -a/--attach or -i/--inline with the --body option. |
8472
223363bb6d66
patchbomb: describe --attach and --inline options in help
Martin Geisler <mg@lazybytes.net>
parents:
8471
diff
changeset
|
704 |
32639
c2fe2b00db53
patchbomb: add -B option to select a bookmark
David Demelier <demelier.david@gmail.com>
parents:
32375
diff
changeset
|
705 With -B/--bookmark changesets reachable by the given bookmark are |
c2fe2b00db53
patchbomb: add -B option to select a bookmark
David Demelier <demelier.david@gmail.com>
parents:
32375
diff
changeset
|
706 selected. |
c2fe2b00db53
patchbomb: add -B option to select a bookmark
David Demelier <demelier.david@gmail.com>
parents:
32375
diff
changeset
|
707 |
9269
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
708 With -o/--outgoing, emails will be generated for patches not found |
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
709 in the destination repository (or only those which are ancestors |
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
710 of the specified revisions if any are provided) |
4280
a9336520a4ee
Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents:
4279
diff
changeset
|
711 |
9269
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
712 With -b/--bundle, changesets are selected as for --outgoing, but a |
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
713 single email containing a binary Mercurial bundle as an attachment |
26563
d4a1bfe1de63
patchbomb: add a 'bundletype' config under 'patchbomb'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26546
diff
changeset
|
714 will be sent. Use the ``patchbomb.bundletype`` config option to |
d4a1bfe1de63
patchbomb: add a 'bundletype' config under 'patchbomb'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26546
diff
changeset
|
715 control the bundle type as with :hg:`bundle --type`. |
4280
a9336520a4ee
Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents:
4279
diff
changeset
|
716 |
12749
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
717 With -m/--mbox, instead of previewing each patchbomb message in a |
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
718 pager or sending the messages directly, it will create a UNIX |
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
719 mailbox file with the patch emails. This mailbox file can be |
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
720 previewed with any mail user agent which supports UNIX mbox |
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
721 files. |
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
722 |
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
723 With -n/--test, all steps will run, but mail will not be sent. |
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
724 You will be prompted for an email recipient address, a subject and |
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
725 an introductory message describing the patches of your patchbomb. |
31489
5b2e1689b24d
patchbomb: use modern pager to display -n/--test result (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
31187
diff
changeset
|
726 Then when all is done, patchbomb messages are displayed. |
12749
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
727 |
13198
e71b2aa74ce3
patchbomb: save introductory message in .hg/last-email.txt
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12839
diff
changeset
|
728 In case email sending fails, you will find a backup of your series |
23488
11b215731e74
patchbomb: introduce a 'patchbomb.confirm' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23487
diff
changeset
|
729 introductory message in ``.hg/last-email.txt``. |
11b215731e74
patchbomb: introduce a 'patchbomb.confirm' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23487
diff
changeset
|
730 |
11b215731e74
patchbomb: introduce a 'patchbomb.confirm' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23487
diff
changeset
|
731 The default behavior of this command can be customized through |
11b215731e74
patchbomb: introduce a 'patchbomb.confirm' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23487
diff
changeset
|
732 configuration. (See :hg:`help patchbomb` for details) |
13198
e71b2aa74ce3
patchbomb: save introductory message in .hg/last-email.txt
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12839
diff
changeset
|
733 |
9289
45aaf27f95b8
patchbomb: reST syntax for literal blocks in help text
Christian Ebert <blacktrash@gmx.net>
parents:
9286
diff
changeset
|
734 Examples:: |
4280
a9336520a4ee
Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents:
4279
diff
changeset
|
735 |
9289
45aaf27f95b8
patchbomb: reST syntax for literal blocks in help text
Christian Ebert <blacktrash@gmx.net>
parents:
9286
diff
changeset
|
736 hg email -r 3000 # send patch 3000 only |
45aaf27f95b8
patchbomb: reST syntax for literal blocks in help text
Christian Ebert <blacktrash@gmx.net>
parents:
9286
diff
changeset
|
737 hg email -r 3000 -r 3001 # send patches 3000 and 3001 |
45aaf27f95b8
patchbomb: reST syntax for literal blocks in help text
Christian Ebert <blacktrash@gmx.net>
parents:
9286
diff
changeset
|
738 hg email -r 3000:3005 # send patches 3000 through 3005 |
45aaf27f95b8
patchbomb: reST syntax for literal blocks in help text
Christian Ebert <blacktrash@gmx.net>
parents:
9286
diff
changeset
|
739 hg email 3000 # send patch 3000 (deprecated) |
4280
a9336520a4ee
Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents:
4279
diff
changeset
|
740 |
9289
45aaf27f95b8
patchbomb: reST syntax for literal blocks in help text
Christian Ebert <blacktrash@gmx.net>
parents:
9286
diff
changeset
|
741 hg email -o # send all patches not in default |
45aaf27f95b8
patchbomb: reST syntax for literal blocks in help text
Christian Ebert <blacktrash@gmx.net>
parents:
9286
diff
changeset
|
742 hg email -o DEST # send all patches not in DEST |
45aaf27f95b8
patchbomb: reST syntax for literal blocks in help text
Christian Ebert <blacktrash@gmx.net>
parents:
9286
diff
changeset
|
743 hg email -o -r 3000 # send all ancestors of 3000 not in default |
45aaf27f95b8
patchbomb: reST syntax for literal blocks in help text
Christian Ebert <blacktrash@gmx.net>
parents:
9286
diff
changeset
|
744 hg email -o -r 3000 DEST # send all ancestors of 3000 not in DEST |
4280
a9336520a4ee
Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents:
4279
diff
changeset
|
745 |
32639
c2fe2b00db53
patchbomb: add -B option to select a bookmark
David Demelier <demelier.david@gmail.com>
parents:
32375
diff
changeset
|
746 hg email -B feature # send all ancestors of feature bookmark |
c2fe2b00db53
patchbomb: add -B option to select a bookmark
David Demelier <demelier.david@gmail.com>
parents:
32375
diff
changeset
|
747 |
9289
45aaf27f95b8
patchbomb: reST syntax for literal blocks in help text
Christian Ebert <blacktrash@gmx.net>
parents:
9286
diff
changeset
|
748 hg email -b # send bundle of all patches not in default |
45aaf27f95b8
patchbomb: reST syntax for literal blocks in help text
Christian Ebert <blacktrash@gmx.net>
parents:
9286
diff
changeset
|
749 hg email -b DEST # send bundle of all patches not in DEST |
45aaf27f95b8
patchbomb: reST syntax for literal blocks in help text
Christian Ebert <blacktrash@gmx.net>
parents:
9286
diff
changeset
|
750 hg email -b -r 3000 # bundle of all ancestors of 3000 not in default |
45aaf27f95b8
patchbomb: reST syntax for literal blocks in help text
Christian Ebert <blacktrash@gmx.net>
parents:
9286
diff
changeset
|
751 hg email -b -r 3000 DEST # bundle of all ancestors of 3000 not in DEST |
4280
a9336520a4ee
Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents:
4279
diff
changeset
|
752 |
12749
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
753 hg email -o -m mbox && # generate an mbox file... |
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
754 mutt -R -f mbox # ... and view it with mutt |
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
755 hg email -o -m mbox && # generate an mbox file ... |
12839
d85e30889f26
patchbomb: fix stray backslash in docstring
Martin Geisler <mg@lazybytes.net>
parents:
12794
diff
changeset
|
756 formail -s sendmail \\ # ... and use formail to send from the mbox |
12749
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
757 -bm -t < mbox # ... using sendmail |
338b4b615d33
patchbomb: move command option help from the extension (patchbomb) to the command (email)
timeless <timeless@gmail.com>
parents:
12265
diff
changeset
|
758 |
9269
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
759 Before using this command, you will need to enable email in your |
1d6499adf211
patchbomb: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9214
diff
changeset
|
760 hgrc. See the [email] section in hgrc(5) for details. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45264
diff
changeset
|
761 """ |
35044
71e63fe6b1ab
py3: handle keyword arguments correctly in hgext/patchbomb.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34911
diff
changeset
|
762 opts = pycompat.byteskwargs(opts) |
4262
f51317e24114
Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents:
4144
diff
changeset
|
763 |
7115
c5c2d43b01da
patchbomb: mime-encode headers and parts not containing patches
Christian Ebert <blacktrash@gmx.net>
parents:
7095
diff
changeset
|
764 _charsets = mail._charsets(ui) |
c5c2d43b01da
patchbomb: mime-encode headers and parts not containing patches
Christian Ebert <blacktrash@gmx.net>
parents:
7095
diff
changeset
|
765 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
766 bundle = opts.get(b'bundle') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
767 date = opts.get(b'date') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
768 mbox = opts.get(b'mbox') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
769 outgoing = opts.get(b'outgoing') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
770 rev = opts.get(b'rev') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
771 bookmark = opts.get(b'bookmark') |
11413
4c1fe996838c
patchbomb: reduce number of opts.get calls
Christian Ebert <blacktrash@gmx.net>
parents:
11321
diff
changeset
|
772 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
773 if not (opts.get(b'test') or mbox): |
5472
23889160905a
Catch smtp exceptions
Christian Ebert <blacktrash@gmx.net>
parents:
4887
diff
changeset
|
774 # really sending |
4489
a11e13d50645
patchbomb: Validate email config before we start prompting for info.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4486
diff
changeset
|
775 mail.validateconfig(ui) |
a11e13d50645
patchbomb: Validate email config before we start prompting for info.
Bryan O'Sullivan <bos@serpentine.com>
parents:
4486
diff
changeset
|
776 |
32639
c2fe2b00db53
patchbomb: add -B option to select a bookmark
David Demelier <demelier.david@gmail.com>
parents:
32375
diff
changeset
|
777 if not (revs or rev or outgoing or bundle or bookmark): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
778 raise error.Abort( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
779 _(b'specify at least one changeset with -B, -r or -o') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
780 ) |
4493
ead2fa544cbf
patchbomb: Fail early if no revs given to email
Bryan O'Sullivan <bos@serpentine.com>
parents:
4492
diff
changeset
|
781 |
11413
4c1fe996838c
patchbomb: reduce number of opts.get calls
Christian Ebert <blacktrash@gmx.net>
parents:
11321
diff
changeset
|
782 if outgoing and bundle: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
783 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
784 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
785 b"--outgoing mode always on with --bundle;" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
786 b" do not re-specify --outgoing" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
787 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
788 ) |
43896
3781da40eaa6
patchbomb: use cmdutil.check_at_most_one_arg()
Martin von Zweigbergk <martinvonz@google.com>
parents:
43629
diff
changeset
|
789 cmdutil.check_at_most_one_arg(opts, b'rev', b'bookmark') |
4278
cfe886c14ddf
Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents:
4262
diff
changeset
|
790 |
11413
4c1fe996838c
patchbomb: reduce number of opts.get calls
Christian Ebert <blacktrash@gmx.net>
parents:
11321
diff
changeset
|
791 if outgoing or bundle: |
4262
f51317e24114
Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents:
4144
diff
changeset
|
792 if len(revs) > 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
793 raise error.Abort(_(b"too many destinations")) |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23877
diff
changeset
|
794 if revs: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23877
diff
changeset
|
795 dest = revs[0] |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23877
diff
changeset
|
796 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
23877
diff
changeset
|
797 dest = None |
4262
f51317e24114
Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents:
4144
diff
changeset
|
798 revs = [] |
f51317e24114
Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents:
4144
diff
changeset
|
799 |
11413
4c1fe996838c
patchbomb: reduce number of opts.get calls
Christian Ebert <blacktrash@gmx.net>
parents:
11321
diff
changeset
|
800 if rev: |
4262
f51317e24114
Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents:
4144
diff
changeset
|
801 if revs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
802 raise error.Abort(_(b'use only one form to specify the revision')) |
11413
4c1fe996838c
patchbomb: reduce number of opts.get calls
Christian Ebert <blacktrash@gmx.net>
parents:
11321
diff
changeset
|
803 revs = rev |
32639
c2fe2b00db53
patchbomb: add -B option to select a bookmark
David Demelier <demelier.david@gmail.com>
parents:
32375
diff
changeset
|
804 elif bookmark: |
c2fe2b00db53
patchbomb: add -B option to select a bookmark
David Demelier <demelier.david@gmail.com>
parents:
32375
diff
changeset
|
805 if bookmark not in repo._bookmarks: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
806 raise error.Abort(_(b"bookmark '%s' not found") % bookmark) |
38131
46c2b19a1263
scmutil: move repair.stripbmrevset as scmutil.bookmarkrevs (API)
David Demelier <markand@malikania.fr>
parents:
37603
diff
changeset
|
807 revs = scmutil.bookmarkrevs(repo, bookmark) |
4262
f51317e24114
Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents:
4144
diff
changeset
|
808 |
24568
2e5f6cdf01f6
patchbomb: factor out scmutil.revrange() calls
Yuya Nishihara <yuya@tcha.org>
parents:
24567
diff
changeset
|
809 revs = scmutil.revrange(repo, revs) |
11413
4c1fe996838c
patchbomb: reduce number of opts.get calls
Christian Ebert <blacktrash@gmx.net>
parents:
11321
diff
changeset
|
810 if outgoing: |
24568
2e5f6cdf01f6
patchbomb: factor out scmutil.revrange() calls
Yuya Nishihara <yuya@tcha.org>
parents:
24567
diff
changeset
|
811 revs = _getoutgoing(repo, dest, revs) |
11413
4c1fe996838c
patchbomb: reduce number of opts.get calls
Christian Ebert <blacktrash@gmx.net>
parents:
11321
diff
changeset
|
812 if bundle: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
813 opts[b'revs'] = [b"%d" % r for r in revs] |
4262
f51317e24114
Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents:
4144
diff
changeset
|
814 |
26626
dca161728dc9
patchbomb: check that targets exist at the publicurl
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
815 # check if revision exist on the public destination |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
816 publicurl = repo.ui.config(b'patchbomb', b'publicurl') |
32825
16ff5c6066a6
patchbomb: look for non-empty publicurl, not a non-None one
Augie Fackler <augie@google.com>
parents:
32824
diff
changeset
|
817 if publicurl: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
818 repo.ui.debug(b'checking that revision exist in the public repo\n') |
26626
dca161728dc9
patchbomb: check that targets exist at the publicurl
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
819 try: |
dca161728dc9
patchbomb: check that targets exist at the publicurl
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
820 publicpeer = hg.peer(repo, {}, publicurl) |
dca161728dc9
patchbomb: check that targets exist at the publicurl
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
821 except error.RepoError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
822 repo.ui.write_err( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
823 _(b'unable to access public repo: %s\n') % publicurl |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
824 ) |
26626
dca161728dc9
patchbomb: check that targets exist at the publicurl
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
825 raise |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
826 if not publicpeer.capable(b'known'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
827 repo.ui.debug(b'skipping existence checks: public repo too old\n') |
26626
dca161728dc9
patchbomb: check that targets exist at the publicurl
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
828 else: |
dca161728dc9
patchbomb: check that targets exist at the publicurl
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
829 out = [repo[r] for r in revs] |
dca161728dc9
patchbomb: check that targets exist at the publicurl
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
830 known = publicpeer.known(h.node() for h in out) |
dca161728dc9
patchbomb: check that targets exist at the publicurl
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
831 missing = [] |
dca161728dc9
patchbomb: check that targets exist at the publicurl
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
832 for idx, h in enumerate(out): |
dca161728dc9
patchbomb: check that targets exist at the publicurl
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
833 if not known[idx]: |
dca161728dc9
patchbomb: check that targets exist at the publicurl
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
834 missing.append(h) |
dca161728dc9
patchbomb: check that targets exist at the publicurl
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
835 if missing: |
40029
e2697acd9381
cleanup: some Yoda conditions, this patch removes
Martin von Zweigbergk <martinvonz@google.com>
parents:
39118
diff
changeset
|
836 if len(missing) > 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
837 msg = _(b'public "%s" is missing %s and %i others') |
26626
dca161728dc9
patchbomb: check that targets exist at the publicurl
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
838 msg %= (publicurl, missing[0], len(missing) - 1) |
dca161728dc9
patchbomb: check that targets exist at the publicurl
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
839 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
840 msg = _(b'public url %s is missing %s') |
26626
dca161728dc9
patchbomb: check that targets exist at the publicurl
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
841 msg %= (publicurl, missing[0]) |
36410
67ec4ad815e6
patchbomb: resolve revs before evaluating %ld revset
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36204
diff
changeset
|
842 missingrevs = [ctx.rev() for ctx in missing] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
843 revhint = b' '.join( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
844 b'-r %s' % h for h in repo.set(b'heads(%ld)', missingrevs) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
845 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
846 hint = _(b"use 'hg push %s %s'") % (publicurl, revhint) |
26626
dca161728dc9
patchbomb: check that targets exist at the publicurl
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
847 raise error.Abort(msg, hint=hint) |
dca161728dc9
patchbomb: check that targets exist at the publicurl
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26587
diff
changeset
|
848 |
4262
f51317e24114
Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents:
4144
diff
changeset
|
849 # start |
11413
4c1fe996838c
patchbomb: reduce number of opts.get calls
Christian Ebert <blacktrash@gmx.net>
parents:
11321
diff
changeset
|
850 if date: |
36607
c6061cadb400
util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents:
36450
diff
changeset
|
851 start_time = dateutil.parsedate(date) |
4566
087b3ae4f08a
patchbomb: add --date option
Bryan O'Sullivan <bos@serpentine.com>
parents:
4565
diff
changeset
|
852 else: |
36607
c6061cadb400
util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents:
36450
diff
changeset
|
853 start_time = dateutil.makedate() |
875 | 854 |
876
14cfaaec2e8e
Get patchbomb script to not use MIME attachments.
Bryan O'Sullivan <bos@serpentine.com>
parents:
875
diff
changeset
|
855 def genmsgid(id): |
39117
4899c6d22dff
patchbomb: extract function for generating message-id
Augie Fackler <raf@durin42.com>
parents:
39104
diff
changeset
|
856 return _msgid(id[:20], int(start_time[0])) |
875 | 857 |
25825
577b050caada
patchbomb: mark ancient option deprecated
Matt Mackall <mpm@selenic.com>
parents:
25660
diff
changeset
|
858 # deprecated config: patchbomb.from |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
859 sender = ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
860 opts.get(b'from') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
861 or ui.config(b'email', b'from') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
862 or ui.config(b'patchbomb', b'from') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
863 or prompt(ui, b'From', ui.username()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
864 ) |
875 | 865 |
31184
e3ab7c717129
patchbomb: drop internal option for pbranch extension (API)
Yuya Nishihara <yuya@tcha.org>
parents:
31183
diff
changeset
|
866 if bundle: |
35044
71e63fe6b1ab
py3: handle keyword arguments correctly in hgext/patchbomb.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34911
diff
changeset
|
867 stropts = pycompat.strkwargs(opts) |
71e63fe6b1ab
py3: handle keyword arguments correctly in hgext/patchbomb.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34911
diff
changeset
|
868 bundledata = _getbundle(repo, dest, **stropts) |
71e63fe6b1ab
py3: handle keyword arguments correctly in hgext/patchbomb.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34911
diff
changeset
|
869 bundleopts = stropts.copy() |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43339
diff
changeset
|
870 bundleopts.pop('bundle', None) # already processed |
23213
23a78662b6dd
patchbomb: extract 'getbundlemsgs' closure in its own function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23212
diff
changeset
|
871 msgs = _getbundlemsgs(repo, sender, bundledata, **bundleopts) |
4278
cfe886c14ddf
Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents:
4262
diff
changeset
|
872 else: |
35044
71e63fe6b1ab
py3: handle keyword arguments correctly in hgext/patchbomb.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34911
diff
changeset
|
873 msgs = _getpatchmsgs(repo, sender, revs, **pycompat.strkwargs(opts)) |
875 | 874 |
12200
aebb39d45500
patchbomb: let diffstat prompt only once with complete summary
Christian Ebert <blacktrash@gmx.net>
parents:
12199
diff
changeset
|
875 showaddrs = [] |
aebb39d45500
patchbomb: let diffstat prompt only once with complete summary
Christian Ebert <blacktrash@gmx.net>
parents:
12199
diff
changeset
|
876 |
15162
d67a15b2e608
patchbomb: simplify some contorted logic and odd variable names.
Greg Ward <greg@gerg.ca>
parents:
14556
diff
changeset
|
877 def getaddrs(header, ask=False, default=None): |
d67a15b2e608
patchbomb: simplify some contorted logic and odd variable names.
Greg Ward <greg@gerg.ca>
parents:
14556
diff
changeset
|
878 configkey = header.lower() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
879 opt = header.replace(b'-', b'_').lower() |
15162
d67a15b2e608
patchbomb: simplify some contorted logic and odd variable names.
Greg Ward <greg@gerg.ca>
parents:
14556
diff
changeset
|
880 addrs = opts.get(opt) |
11150
f66ca4431eb9
patchbomb: Reply-To support
Cédric Duval <cedricduval@free.fr>
parents:
10973
diff
changeset
|
881 if addrs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
882 showaddrs.append(b'%s: %s' % (header, b', '.join(addrs))) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
883 return mail.addrlistencode(ui, addrs, _charsets, opts.get(b'test')) |
9947
4600e6222efb
patchbomb: fix parsing of multiple addresses, allow multiple addrs in --to/cc/bcc
Marti Raudsepp <marti@juffo.org>
parents:
9818
diff
changeset
|
884 |
15162
d67a15b2e608
patchbomb: simplify some contorted logic and odd variable names.
Greg Ward <greg@gerg.ca>
parents:
14556
diff
changeset
|
885 # not on the command line: fallback to config and then maybe ask |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
886 addr = ui.config(b'email', configkey) or ui.config( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
887 b'patchbomb', configkey |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
888 ) |
27697
0ce0cfee497f
patchbomb: treat empty address list as no addresses
Bryan O'Sullivan <bos@serpentine.com>
parents:
27150
diff
changeset
|
889 if not addr: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
890 specified = ui.hasconfig(b'email', configkey) or ui.hasconfig( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
891 b'patchbomb', configkey |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
892 ) |
27697
0ce0cfee497f
patchbomb: treat empty address list as no addresses
Bryan O'Sullivan <bos@serpentine.com>
parents:
27150
diff
changeset
|
893 if not specified and ask: |
0ce0cfee497f
patchbomb: treat empty address list as no addresses
Bryan O'Sullivan <bos@serpentine.com>
parents:
27150
diff
changeset
|
894 addr = prompt(ui, header, default=default) |
15162
d67a15b2e608
patchbomb: simplify some contorted logic and odd variable names.
Greg Ward <greg@gerg.ca>
parents:
14556
diff
changeset
|
895 if addr: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
896 showaddrs.append(b'%s: %s' % (header, addr)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
897 return mail.addrlistencode(ui, [addr], _charsets, opts.get(b'test')) |
32826
3abba5bc3454
patchbomb: make getaddrs function easier to work with
Augie Fackler <augie@google.com>
parents:
32825
diff
changeset
|
898 elif default: |
3abba5bc3454
patchbomb: make getaddrs function easier to work with
Augie Fackler <augie@google.com>
parents:
32825
diff
changeset
|
899 return mail.addrlistencode( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
900 ui, [default], _charsets, opts.get(b'test') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
901 ) |
32826
3abba5bc3454
patchbomb: make getaddrs function easier to work with
Augie Fackler <augie@google.com>
parents:
32825
diff
changeset
|
902 return [] |
9947
4600e6222efb
patchbomb: fix parsing of multiple addresses, allow multiple addrs in --to/cc/bcc
Marti Raudsepp <marti@juffo.org>
parents:
9818
diff
changeset
|
903 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
904 to = getaddrs(b'To', ask=True) |
15164
7bddec632821
patchbomb: make it easy for the user to decline sending an intro message.
Greg Ward <greg@gerg.ca>
parents:
15162
diff
changeset
|
905 if not to: |
7bddec632821
patchbomb: make it easy for the user to decline sending an intro message.
Greg Ward <greg@gerg.ca>
parents:
15162
diff
changeset
|
906 # we can get here in non-interactive mode |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
907 raise error.Abort(_(b'no recipient addresses provided')) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
908 cc = getaddrs(b'Cc', ask=True, default=b'') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
909 bcc = getaddrs(b'Bcc') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
910 replyto = getaddrs(b'Reply-To') |
2679
f1de91be1d87
optionally send blind carbon copies
Christian Ebert <blacktrash@gmx.net>
parents:
2443
diff
changeset
|
911 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
912 confirm = ui.configbool(b'patchbomb', b'confirm') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
913 confirm |= bool(opts.get(b'diffstat') or opts.get(b'confirm')) |
23488
11b215731e74
patchbomb: introduce a 'patchbomb.confirm' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23487
diff
changeset
|
914 |
11b215731e74
patchbomb: introduce a 'patchbomb.confirm' option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23487
diff
changeset
|
915 if confirm: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
916 ui.write(_(b'\nFinal summary:\n\n'), label=b'patchbomb.finalsummary') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
917 ui.write((b'From: %s\n' % sender), label=b'patchbomb.from') |
12200
aebb39d45500
patchbomb: let diffstat prompt only once with complete summary
Christian Ebert <blacktrash@gmx.net>
parents:
12199
diff
changeset
|
918 for addr in showaddrs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
919 ui.write(b'%s\n' % addr, label=b'patchbomb.to') |
12200
aebb39d45500
patchbomb: let diffstat prompt only once with complete summary
Christian Ebert <blacktrash@gmx.net>
parents:
12199
diff
changeset
|
920 for m, subj, ds in msgs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
921 ui.write((b'Subject: %s\n' % subj), label=b'patchbomb.subject') |
12200
aebb39d45500
patchbomb: let diffstat prompt only once with complete summary
Christian Ebert <blacktrash@gmx.net>
parents:
12199
diff
changeset
|
922 if ds: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
923 ui.write(ds, label=b'patchbomb.diffstats') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
924 ui.write(b'\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
925 if ui.promptchoice( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43099
diff
changeset
|
926 _(b'are you sure you want to send (yn)?$$ &Yes $$ &No') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40346
diff
changeset
|
927 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
928 raise error.Abort(_(b'patchbomb canceled')) |
12200
aebb39d45500
patchbomb: let diffstat prompt only once with complete summary
Christian Ebert <blacktrash@gmx.net>
parents:
12199
diff
changeset
|
929 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
930 ui.write(b'\n') |
875 | 931 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
932 parent = opts.get(b'in_reply_to') or None |
8826
2aff285b902f
patchbomb: do not assume the presence of angle brackets around msg-id
Cédric Duval <cedricduval@free.fr>
parents:
8761
diff
changeset
|
933 # angle brackets may be omitted, they're not semantically part of the msg-id |
2aff285b902f
patchbomb: do not assume the presence of angle brackets around msg-id
Cédric Duval <cedricduval@free.fr>
parents:
8761
diff
changeset
|
934 if parent is not None: |
43578
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
935 parent = encoding.strfromlocal(parent) |
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
936 if not parent.startswith('<'): |
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
937 parent = '<' + parent |
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
938 if not parent.endswith('>'): |
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
939 parent += '>' |
8826
2aff285b902f
patchbomb: do not assume the presence of angle brackets around msg-id
Cédric Duval <cedricduval@free.fr>
parents:
8761
diff
changeset
|
940 |
36450
d478c8cd89d1
py3: convert bytes to str using encoding.strfromlocal
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36449
diff
changeset
|
941 sender_addr = eutil.parseaddr(encoding.strfromlocal(sender))[1] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
942 sender = mail.addressencode(ui, sender, _charsets, opts.get(b'test')) |
5973
ea77f6f77514
patchbomb: undo backout and fix bugs in the earlier patch
Matt Mackall <mpm@selenic.com>
parents:
5948
diff
changeset
|
943 sendmail = None |
21726
fae032549ca2
patchbomb: always use message-id of first patch for series-id
Augie Fackler <raf@durin42.com>
parents:
21724
diff
changeset
|
944 firstpatch = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
945 progress = ui.makeprogress( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
946 _(b'sending'), unit=_(b'emails'), total=len(msgs) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
947 ) |
12265
1ed2dc9d4368
patchbomb: show progress when sending emails or writing mbox
Yuya Nishihara <yuya@tcha.org>
parents:
12264
diff
changeset
|
948 for i, (m, subj, ds) in enumerate(msgs): |
875 | 949 try: |
43578
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
950 m['Message-Id'] = genmsgid(m['X-Mercurial-Node']) |
21726
fae032549ca2
patchbomb: always use message-id of first patch for series-id
Augie Fackler <raf@durin42.com>
parents:
21724
diff
changeset
|
951 if not firstpatch: |
43578
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
952 firstpatch = m['Message-Id'] |
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
953 m['X-Mercurial-Series-Id'] = firstpatch |
875 | 954 except TypeError: |
43578
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
955 m['Message-Id'] = genmsgid('patchbomb') |
875 | 956 if parent: |
43578
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
957 m['In-Reply-To'] = parent |
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
958 m['References'] = parent |
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
959 if not parent or 'X-Mercurial-Node' not in m: |
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
960 parent = m['Message-Id'] |
8514
252232621165
patchbomb: with --in-reply-to, still thread message under first in series
Cédric Duval <cedricduval@free.fr>
parents:
8512
diff
changeset
|
961 |
43578
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
962 m['User-Agent'] = 'Mercurial-patchbomb/%s' % util.version().decode() |
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
963 m['Date'] = eutil.formatdate(start_time[0], localtime=True) |
2443
bd9c39e8f38b
patchbomb does not handle email time stamp plattform independent
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents:
2292
diff
changeset
|
964 |
4027
2601ac9c54f0
patchbomb: fix timezone offset in message date header
Christian Ebert <blacktrash@gmx.net>
parents:
3473
diff
changeset
|
965 start_time = (start_time[0] + 1, start_time[1]) |
43578
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
966 m['From'] = sender |
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
967 m['To'] = ', '.join(to) |
5785
38cd1ce8650d
patchbomb: add linebreaks after colons (coding style)
Christian Ebert <blacktrash@gmx.net>
parents:
5758
diff
changeset
|
968 if cc: |
43578
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
969 m['Cc'] = ', '.join(cc) |
5785
38cd1ce8650d
patchbomb: add linebreaks after colons (coding style)
Christian Ebert <blacktrash@gmx.net>
parents:
5758
diff
changeset
|
970 if bcc: |
43578
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
971 m['Bcc'] = ', '.join(bcc) |
11150
f66ca4431eb9
patchbomb: Reply-To support
Cédric Duval <cedricduval@free.fr>
parents:
10973
diff
changeset
|
972 if replyto: |
43578
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
973 m['Reply-To'] = ', '.join(replyto) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
974 if opts.get(b'test'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
975 ui.status(_(b'displaying '), subj, b' ...\n') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
976 ui.pager(b'email') |
43157
3460eee570f7
patchbomb: use mail.Generator alias for py2/py3 compat
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43117
diff
changeset
|
977 generator = mail.Generator(ui, mangle_from_=False) |
1871
258e3a7955b8
patchbomb: ignore exception if pager quits.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1846
diff
changeset
|
978 try: |
43629
ec53ea01c9e6
patchbomb: fix wrong argument type when calling mail generator.flatten()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43627
diff
changeset
|
979 generator.flatten(m, False) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
980 ui.write(b'\n') |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25202
diff
changeset
|
981 except IOError as inst: |
1871
258e3a7955b8
patchbomb: ignore exception if pager quits.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1846
diff
changeset
|
982 if inst.errno != errno.EPIPE: |
258e3a7955b8
patchbomb: ignore exception if pager quits.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
1846
diff
changeset
|
983 raise |
15560
cc58c228503e
mail: mbox handling as a part of mail handling, refactored from patchbomb
Mads Kiilerich <mads@kiilerich.com>
parents:
15559
diff
changeset
|
984 else: |
cc58c228503e
mail: mbox handling as a part of mail handling, refactored from patchbomb
Mads Kiilerich <mads@kiilerich.com>
parents:
15559
diff
changeset
|
985 if not sendmail: |
29285
63a3749147af
mail: unsupport smtp.verifycert (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29205
diff
changeset
|
986 sendmail = mail.connect(ui, mbox=mbox) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
987 ui.status(_(b'sending '), subj, b' ...\n') |
38403
8ce3f91d5f6f
patchbomb: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38402
diff
changeset
|
988 progress.update(i, item=subj) |
15560
cc58c228503e
mail: mbox handling as a part of mail handling, refactored from patchbomb
Mads Kiilerich <mads@kiilerich.com>
parents:
15559
diff
changeset
|
989 if not mbox: |
cc58c228503e
mail: mbox handling as a part of mail handling, refactored from patchbomb
Mads Kiilerich <mads@kiilerich.com>
parents:
15559
diff
changeset
|
990 # Exim does not remove the Bcc field |
43578
cbcd72844df1
py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org>
parents:
43576
diff
changeset
|
991 del m['Bcc'] |
28861
86db5cb55d46
pycompat: switch to util.stringio for py3 compat
timeless <timeless@mozdev.org>
parents:
28474
diff
changeset
|
992 fp = stringio() |
43157
3460eee570f7
patchbomb: use mail.Generator alias for py2/py3 compat
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43117
diff
changeset
|
993 generator = mail.Generator(fp, mangle_from_=False) |
43629
ec53ea01c9e6
patchbomb: fix wrong argument type when calling mail generator.flatten()
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
43627
diff
changeset
|
994 generator.flatten(m, False) |
39027
8919cc4f63b4
patchbomb: python 3 really wants those email addresses in unicode
Augie Fackler <augie@google.com>
parents:
39022
diff
changeset
|
995 alldests = to + bcc + cc |
8919cc4f63b4
patchbomb: python 3 really wants those email addresses in unicode
Augie Fackler <augie@google.com>
parents:
39022
diff
changeset
|
996 sendmail(sender_addr, alldests, fp.getvalue()) |
875 | 997 |
38403
8ce3f91d5f6f
patchbomb: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38402
diff
changeset
|
998 progress.complete() |