annotate hgext/patchbomb.py @ 4522:591322269fed

Use absolute paths in addremove. This is more consistent with other places in the code, which only use the "relpath" returned by cmdutil.walk for display purposes.
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
date Fri, 08 Jun 2007 23:49:12 -0300
parents ead2fa544cbf
children d48e1b5f8265
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1669
91d40fc959f0 turn patchbomb script into an extension module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1604
diff changeset
1 # Command for sending a collection of Mercurial changesets as a series
91d40fc959f0 turn patchbomb script into an extension module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1604
diff changeset
2 # of patch emails.
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
3 #
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
4 # The series is started off with a "[PATCH 0 of N]" introduction,
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
5 # which describes the series as a whole.
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
6 #
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
7 # Each patch email has a Subject line of "[PATCH M of N] ...", using
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
8 # the first line of the changeset description as the subject text.
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
9 # The message contains two or three body parts:
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
10 #
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
11 # The remainder of the changeset description.
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
12 #
877
25430c523677 Polish patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents: 876
diff changeset
13 # [Optional] If the diffstat program is installed, the result of
25430c523677 Polish patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents: 876
diff changeset
14 # running diffstat on the patch.
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
15 #
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
16 # The patch itself, as generated by "hg export".
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
17 #
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
18 # Each message refers to all of its predecessors using the In-Reply-To
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
19 # and References headers, so they will show up as a sequence in
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
20 # threaded mail and news readers, and in mail archives.
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
21 #
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
22 # For each changeset, you will be prompted with a diffstat summary and
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
23 # the changeset summary, so you can be sure you are sending the right
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
24 # changes.
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
25 #
2926
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
26 # To enable this extension:
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
27 #
2926
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
28 # [extensions]
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
29 # hgext.patchbomb =
1702
e291d9a30bef add --mbox output to patchbomb
Johannes Stezenbach <js@linuxtv.org>
parents: 1691
diff changeset
30 #
877
25430c523677 Polish patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents: 876
diff changeset
31 # To configure other defaults, add a section like this to your hgrc
25430c523677 Polish patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents: 876
diff changeset
32 # file:
25430c523677 Polish patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents: 876
diff changeset
33 #
2926
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
34 # [email]
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
35 # from = My Name <my@email>
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
36 # to = recipient1, recipient2, ...
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
37 # cc = cc1, cc2, ...
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
38 # bcc = bcc1, bcc2, ...
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
39 #
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
40 # Then you can use the "hg email" command to mail a series of changesets
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
41 # as a patchbomb.
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
42 #
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
43 # To avoid sending patches prematurely, it is a good idea to first run
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
44 # the "email" command with the "-n" option (test only). You will be
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
45 # prompted for an email recipient address, a subject an an introductory
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
46 # message describing the patches of your patchbomb. Then when all is
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
47 # done, your pager will be fired up once for each patchbomb message, so
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
48 # you can verify everything is alright.
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
49 #
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
50 # The "-m" (mbox) option is also very useful. Instead of previewing
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
51 # each patchbomb message in a pager or sending the messages directly,
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
52 # it will create a UNIX mailbox file with the patch emails. This
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
53 # mailbox file can be previewed with any mail user agent which supports
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
54 # UNIX mbox files, i.e. with mutt:
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
55 #
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
56 # % mutt -R -f mbox
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
57 #
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
58 # When you are previewing the patchbomb messages, you can use `formail'
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
59 # (a utility that is commonly installed as part of the procmail package),
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
60 # to send each message out:
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
61 #
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
62 # % formail -s sendmail -bm -t < mbox
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
63 #
13cd2cdeff6a hgext: more patchbomb documentation
Giorgos Keramidas <keramida@ceid.upatras.gr>
parents: 2909
diff changeset
64 # That should be all. Now your patchbomb is on its way out.
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
65
4278
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
66 import os, errno, socket, tempfile
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
67 import email.MIMEMultipart, email.MIMEText, email.MIMEBase
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
68 import email.Utils, email.Encoders
4029
9210fba03d16 merge with -stable
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 4027 3963
diff changeset
69 from mercurial import cmdutil, commands, hg, mail, ui, patch, util
3893
6b4127c7d52a Simplify i18n imports
Matt Mackall <mpm@selenic.com>
parents: 3887
diff changeset
70 from mercurial.i18n import _
2707
084f07cacba0 patchbomb: add content-disposition to make display inline and add filename
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2706
diff changeset
71 from mercurial.node import *
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
72
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
73 def patchbomb(ui, repo, *revs, **opts):
4283
8625504f507c Slight refining to help text in patchbomb.py
John Goerzen <jgoerzen@complete.org>
parents: 4280
diff changeset
74 '''send changesets by email
1672
07f931af5f40 add documentation for email command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1670
diff changeset
75
4283
8625504f507c Slight refining to help text in patchbomb.py
John Goerzen <jgoerzen@complete.org>
parents: 4280
diff changeset
76 By default, diffs are sent in the format generated by hg export,
8625504f507c Slight refining to help text in patchbomb.py
John Goerzen <jgoerzen@complete.org>
parents: 4280
diff changeset
77 one per message. The series starts with a "[PATCH 0 of N]"
8625504f507c Slight refining to help text in patchbomb.py
John Goerzen <jgoerzen@complete.org>
parents: 4280
diff changeset
78 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
79
07f931af5f40 add documentation for email command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1670
diff changeset
80 Each patch email has a Subject line of "[PATCH M of N] ...", using
07f931af5f40 add documentation for email command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1670
diff changeset
81 the first line of the changeset description as the subject text.
07f931af5f40 add documentation for email command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1670
diff changeset
82 The message contains two or three body parts. First, the rest of
07f931af5f40 add documentation for email command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1670
diff changeset
83 the changeset description. Next, (optionally) if the diffstat
07f931af5f40 add documentation for email command.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1670
diff changeset
84 program is installed, the result of running diffstat on the patch.
4257
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
85 Finally, the patch itself, as generated by "hg export".
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
86
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
87 With --outgoing, emails will be generated for patches not
4280
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
88 found in the destination repository (or only those which are
4257
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
89 ancestors 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
90
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
91 With --bundle, changesets are selected as for --outgoing,
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
92 but a single email containing a binary Mercurial bundle as an
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
93 attachment will be sent.
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
94
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
95 Examples:
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
96
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
97 hg email -r 3000 # send patch 3000 only
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
98 hg email -r 3000 -r 3001 # send patches 3000 and 3001
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
99 hg email -r 3000:3005 # send patches 3000 through 3005
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
100 hg email 3000 # send patch 3000 (deprecated)
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
101
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
102 hg email -o # send all patches not in default
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
103 hg email -o DEST # send all patches not in DEST
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
104 hg email -o -r 3000 # send all ancestors of 3000 not in default
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
105 hg email -o -r 3000 DEST # send all ancestors of 3000 not in DEST
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
106
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
107 hg email -b # send bundle of all patches not in default
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
108 hg email -b DEST # send bundle of all patches not in DEST
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
109 hg email -b -r 3000 # bundle of all ancestors of 3000 not in default
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
110 hg email -b -r 3000 DEST # bundle of all ancestors of 3000 not in DEST
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
111
a9336520a4ee Improve documentation for patchbomb and email
John Goerzen <jgoerzen@complete.org>
parents: 4279
diff changeset
112 Before using this command, you will need to enable email in your hgrc.
4283
8625504f507c Slight refining to help text in patchbomb.py
John Goerzen <jgoerzen@complete.org>
parents: 4280
diff changeset
113 See the [email] section in hgrc(5) for details.
4257
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
114 '''
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
115
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
116 def prompt(prompt, default = None, rest = ': ', empty_ok = False):
4480
6b84c8d2f66f patchbomb: Defer the import of readline.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4479
diff changeset
117 try:
6b84c8d2f66f patchbomb: Defer the import of readline.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4479
diff changeset
118 # readline gives raw_input editing capabilities, but is not
6b84c8d2f66f patchbomb: Defer the import of readline.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4479
diff changeset
119 # present on windows
6b84c8d2f66f patchbomb: Defer the import of readline.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4479
diff changeset
120 import readline
6b84c8d2f66f patchbomb: Defer the import of readline.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4479
diff changeset
121 except ImportError: pass
6b84c8d2f66f patchbomb: Defer the import of readline.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4479
diff changeset
122
876
14cfaaec2e8e Get patchbomb script to not use MIME attachments.
Bryan O'Sullivan <bos@serpentine.com>
parents: 875
diff changeset
123 if default: prompt += ' [%s]' % default
14cfaaec2e8e Get patchbomb script to not use MIME attachments.
Bryan O'Sullivan <bos@serpentine.com>
parents: 875
diff changeset
124 prompt += rest
14cfaaec2e8e Get patchbomb script to not use MIME attachments.
Bryan O'Sullivan <bos@serpentine.com>
parents: 875
diff changeset
125 while True:
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
126 r = raw_input(prompt)
876
14cfaaec2e8e Get patchbomb script to not use MIME attachments.
Bryan O'Sullivan <bos@serpentine.com>
parents: 875
diff changeset
127 if r: return r
14cfaaec2e8e Get patchbomb script to not use MIME attachments.
Bryan O'Sullivan <bos@serpentine.com>
parents: 875
diff changeset
128 if default is not None: return default
14cfaaec2e8e Get patchbomb script to not use MIME attachments.
Bryan O'Sullivan <bos@serpentine.com>
parents: 875
diff changeset
129 if empty_ok: return r
1670
fe19c54ee403 add _ to several strings
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1669
diff changeset
130 ui.warn(_('Please enter a valid value.\n'))
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
131
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
132 def confirm(s):
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
133 if not prompt(s, default = 'y', rest = '? ').lower().startswith('y'):
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
134 raise ValueError
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
135
3093
f422c8265ae5 Add support for diffstat in commit emails, and move diffstat from
Matt Doar <matt@xensource.com>
parents: 3051
diff changeset
136 def cdiffstat(summary, patchlines):
f422c8265ae5 Add support for diffstat in commit emails, and move diffstat from
Matt Doar <matt@xensource.com>
parents: 3051
diff changeset
137 s = patch.diffstat(patchlines)
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
138 if s:
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
139 if summary:
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
140 ui.write(summary, '\n')
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
141 ui.write(s, '\n')
1670
fe19c54ee403 add _ to several strings
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1669
diff changeset
142 confirm(_('Does the diffstat above look okay'))
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
143 return s
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
144
876
14cfaaec2e8e Get patchbomb script to not use MIME attachments.
Bryan O'Sullivan <bos@serpentine.com>
parents: 875
diff changeset
145 def makepatch(patch, idx, total):
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
146 desc = []
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
147 node = None
1135
e455d91f6259 Variable 'body' was missing in patchbomb script.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1118
diff changeset
148 body = ''
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
149 for line in patch:
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
150 if line.startswith('#'):
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
151 if line.startswith('# Node ID'): node = line.split()[-1]
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
152 continue
3051
51b7f792e473 Detect git patches in patchbomb makepatch function
Brendan Cully <brendan@kublai.com>
parents: 3027
diff changeset
153 if (line.startswith('diff -r')
51b7f792e473 Detect git patches in patchbomb makepatch function
Brendan Cully <brendan@kublai.com>
parents: 3027
diff changeset
154 or line.startswith('diff --git')):
51b7f792e473 Detect git patches in patchbomb makepatch function
Brendan Cully <brendan@kublai.com>
parents: 3027
diff changeset
155 break
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
156 desc.append(line)
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
157 if not node: raise ValueError
1118
63b5f68d8167 patchbomb: eliminate silly complete summary message
mpm@selenic.com
parents: 1032
diff changeset
158
63b5f68d8167 patchbomb: eliminate silly complete summary message
mpm@selenic.com
parents: 1032
diff changeset
159 #body = ('\n'.join(desc[1:]).strip() or
63b5f68d8167 patchbomb: eliminate silly complete summary message
mpm@selenic.com
parents: 1032
diff changeset
160 # 'Patch subject is complete summary.')
63b5f68d8167 patchbomb: eliminate silly complete summary message
mpm@selenic.com
parents: 1032
diff changeset
161 #body += '\n\n\n'
63b5f68d8167 patchbomb: eliminate silly complete summary message
mpm@selenic.com
parents: 1032
diff changeset
162
1604
da3f1121721b add --plain option to patchbomb.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1603
diff changeset
163 if opts['plain']:
da3f1121721b add --plain option to patchbomb.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1603
diff changeset
164 while patch and patch[0].startswith('# '): patch.pop(0)
da3f1121721b add --plain option to patchbomb.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1603
diff changeset
165 if patch: patch.pop(0)
da3f1121721b add --plain option to patchbomb.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1603
diff changeset
166 while patch and not patch[0].strip(): patch.pop(0)
877
25430c523677 Polish patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents: 876
diff changeset
167 if opts['diffstat']:
25430c523677 Polish patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents: 876
diff changeset
168 body += cdiffstat('\n'.join(desc), patch) + '\n\n'
2706
4af7b178976a patchbomb: optionally send patches as inline attachments
Christian Ebert <blacktrash@gmx.net>
parents: 2705
diff changeset
169 if opts['attach']:
4af7b178976a patchbomb: optionally send patches as inline attachments
Christian Ebert <blacktrash@gmx.net>
parents: 2705
diff changeset
170 msg = email.MIMEMultipart.MIMEMultipart()
4af7b178976a patchbomb: optionally send patches as inline attachments
Christian Ebert <blacktrash@gmx.net>
parents: 2705
diff changeset
171 if body: msg.attach(email.MIMEText.MIMEText(body, 'plain'))
2707
084f07cacba0 patchbomb: add content-disposition to make display inline and add filename
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2706
diff changeset
172 p = email.MIMEText.MIMEText('\n'.join(patch), 'x-patch')
2722
10e95059ffd7 patchbomb: fix generation of message-id when sending attachments
Christian Ebert <blacktrash@gmx.net>
parents: 2707
diff changeset
173 binnode = bin(node)
2707
084f07cacba0 patchbomb: add content-disposition to make display inline and add filename
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2706
diff changeset
174 # if node is mq patch, it will have patch file name as tag
2722
10e95059ffd7 patchbomb: fix generation of message-id when sending attachments
Christian Ebert <blacktrash@gmx.net>
parents: 2707
diff changeset
175 patchname = [t for t in repo.nodetags(binnode)
2707
084f07cacba0 patchbomb: add content-disposition to make display inline and add filename
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2706
diff changeset
176 if t.endswith('.patch') or t.endswith('.diff')]
084f07cacba0 patchbomb: add content-disposition to make display inline and add filename
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2706
diff changeset
177 if patchname:
084f07cacba0 patchbomb: add content-disposition to make display inline and add filename
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2706
diff changeset
178 patchname = patchname[0]
084f07cacba0 patchbomb: add content-disposition to make display inline and add filename
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2706
diff changeset
179 elif total > 1:
3247
1e2941fda520 patchbomb: update --attach to use cmdutil.make_filename
Brendan Cully <brendan@kublai.com>
parents: 3093
diff changeset
180 patchname = cmdutil.make_filename(repo, '%b-%n.patch',
2722
10e95059ffd7 patchbomb: fix generation of message-id when sending attachments
Christian Ebert <blacktrash@gmx.net>
parents: 2707
diff changeset
181 binnode, idx, total)
2707
084f07cacba0 patchbomb: add content-disposition to make display inline and add filename
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2706
diff changeset
182 else:
3247
1e2941fda520 patchbomb: update --attach to use cmdutil.make_filename
Brendan Cully <brendan@kublai.com>
parents: 3093
diff changeset
183 patchname = cmdutil.make_filename(repo, '%b.patch', binnode)
2707
084f07cacba0 patchbomb: add content-disposition to make display inline and add filename
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2706
diff changeset
184 p['Content-Disposition'] = 'inline; filename=' + patchname
084f07cacba0 patchbomb: add content-disposition to make display inline and add filename
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2706
diff changeset
185 msg.attach(p)
2706
4af7b178976a patchbomb: optionally send patches as inline attachments
Christian Ebert <blacktrash@gmx.net>
parents: 2705
diff changeset
186 else:
4af7b178976a patchbomb: optionally send patches as inline attachments
Christian Ebert <blacktrash@gmx.net>
parents: 2705
diff changeset
187 body += '\n'.join(patch)
4af7b178976a patchbomb: optionally send patches as inline attachments
Christian Ebert <blacktrash@gmx.net>
parents: 2705
diff changeset
188 msg = email.MIMEText.MIMEText(body)
4141
49d7a035235b patchbomb: Allow to specify subject of single-patch-series (issue475)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4027
diff changeset
189
4142
ba3e13306f70 patchbomb: Strip more than one trailing dot (and spaces between them)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4141
diff changeset
190 subj = desc[0].strip().rstrip('. ')
1846
4d2791f4ef80 only put numbers on patches if > 1 patch.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1845
diff changeset
191 if total == 1:
4141
49d7a035235b patchbomb: Allow to specify subject of single-patch-series (issue475)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4027
diff changeset
192 subj = '[PATCH] ' + (opts['subject'] or subj)
1846
4d2791f4ef80 only put numbers on patches if > 1 patch.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1845
diff changeset
193 else:
3291
0b5d626b354e [patchbomb] prepend leading zeros in the "[PATCH N of M]" string
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 3247
diff changeset
194 tlen = len(str(total))
4141
49d7a035235b patchbomb: Allow to specify subject of single-patch-series (issue475)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4027
diff changeset
195 subj = '[PATCH %0*d of %d] %s' % (tlen, idx, total, subj)
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
196 msg['Subject'] = subj
876
14cfaaec2e8e Get patchbomb script to not use MIME attachments.
Bryan O'Sullivan <bos@serpentine.com>
parents: 875
diff changeset
197 msg['X-Mercurial-Node'] = node
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
198 return msg
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
199
4257
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
200 def outgoing(dest, revs):
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
201 '''Return the revisions present locally but not in dest'''
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
202 dest = ui.expandpath(dest or 'default-push', dest or 'default')
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
203 revs = [repo.lookup(rev) for rev in revs]
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
204 other = hg.repository(ui, dest)
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
205 ui.status(_('comparing with %s\n') % dest)
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
206 o = repo.findoutgoing(other)
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
207 if not o:
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
208 ui.status(_("no changes found\n"))
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
209 return []
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
210 o = repo.changelog.nodesbetween(o, revs or None)[0]
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
211 return [str(repo.changelog.rev(r)) for r in o]
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
212
4279
126d1967a3f8 Add common bundle/outgoing options to hg email
John Goerzen <jgoerzen@complete.org>
parents: 4278
diff changeset
213 def getbundle(dest):
4278
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
214 tmpdir = tempfile.mkdtemp(prefix='hg-email-bundle-')
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
215 tmpfn = os.path.join(tmpdir, 'bundle')
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
216 try:
4279
126d1967a3f8 Add common bundle/outgoing options to hg email
John Goerzen <jgoerzen@complete.org>
parents: 4278
diff changeset
217 commands.bundle(ui, repo, tmpfn, dest, **opts)
4278
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
218 return open(tmpfn).read()
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
219 finally:
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
220 try:
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
221 os.unlink(tmpfn)
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
222 except:
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
223 pass
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
224 os.rmdir(tmpdir)
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
225
4483
a11e13d50645 patchbomb: Validate email config before we start prompting for info.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4480
diff changeset
226 if not opts['test']:
a11e13d50645 patchbomb: Validate email config before we start prompting for info.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4480
diff changeset
227 mail.validateconfig(ui)
a11e13d50645 patchbomb: Validate email config before we start prompting for info.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4480
diff changeset
228
4487
ead2fa544cbf patchbomb: Fail early if no revs given to email
Bryan O'Sullivan <bos@serpentine.com>
parents: 4486
diff changeset
229 if not (revs or opts.get('rev') or opts.get('outgoing')):
ead2fa544cbf patchbomb: Fail early if no revs given to email
Bryan O'Sullivan <bos@serpentine.com>
parents: 4486
diff changeset
230 raise util.Abort(_('specify at least one changeset with -r or -o'))
ead2fa544cbf patchbomb: Fail early if no revs given to email
Bryan O'Sullivan <bos@serpentine.com>
parents: 4486
diff changeset
231
4257
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
232 commands.setremoteconfig(ui, opts)
4486
c15955bde7dd patchbomb: Fix typo.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4485
diff changeset
233 if opts.get('outgoing') and opts.get('bundle'):
4278
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
234 raise util.Abort(_("--outgoing mode always on with --bundle; do not re-specify --outgoing"))
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
235
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
236 if opts.get('outgoing') or opts.get('bundle'):
4257
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
237 if len(revs) > 1:
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
238 raise util.Abort(_("too many destinations"))
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
239 dest = revs and revs[0] or None
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
240 revs = []
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
241
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
242 if opts.get('rev'):
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
243 if revs:
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
244 raise util.Abort(_('use only one form to specify the revision'))
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
245 revs = opts.get('rev')
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
246
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
247 if opts.get('outgoing'):
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
248 revs = outgoing(dest, opts.get('rev'))
4279
126d1967a3f8 Add common bundle/outgoing options to hg email
John Goerzen <jgoerzen@complete.org>
parents: 4278
diff changeset
249 if opts.get('bundle'):
126d1967a3f8 Add common bundle/outgoing options to hg email
John Goerzen <jgoerzen@complete.org>
parents: 4278
diff changeset
250 opts['revs'] = revs
4257
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
251
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
252 # start
4027
2601ac9c54f0 patchbomb: fix timezone offset in message date header
Christian Ebert <blacktrash@gmx.net>
parents: 3468
diff changeset
253 start_time = util.makedate()
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
254
876
14cfaaec2e8e Get patchbomb script to not use MIME attachments.
Bryan O'Sullivan <bos@serpentine.com>
parents: 875
diff changeset
255 def genmsgid(id):
4027
2601ac9c54f0 patchbomb: fix timezone offset in message date header
Christian Ebert <blacktrash@gmx.net>
parents: 3468
diff changeset
256 return '<%s.%s@%s>' % (id[:20], int(start_time[0]), socket.getfqdn())
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
257
4278
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
258 def getexportmsgs():
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
259 patches = []
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
260
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
261 class exportee:
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
262 def __init__(self, container):
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
263 self.lines = []
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
264 self.container = container
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
265 self.name = 'email'
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
266
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
267 def write(self, data):
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
268 self.lines.append(data)
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
269
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
270 def close(self):
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
271 self.container.append(''.join(self.lines).split('\n'))
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
272 self.lines = []
3291
0b5d626b354e [patchbomb] prepend leading zeros in the "[PATCH N of M]" string
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 3247
diff changeset
273
4278
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
274 commands.export(ui, repo, *revs, **{'output': exportee(patches),
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
275 'switch_parent': False,
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
276 'text': None,
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
277 'git': opts.get('git')})
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
278
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
279 jumbo = []
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
280 msgs = []
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
281
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
282 ui.write(_('This patch series consists of %d patches.\n\n') % len(patches))
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
283
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
284 for p, i in zip(patches, xrange(len(patches))):
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
285 jumbo.extend(p)
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
286 msgs.append(makepatch(p, i + 1, len(patches)))
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
287
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
288 if len(patches) > 1:
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
289 tlen = len(str(len(patches)))
1845
cfe689ab3f06 Patchbomb only sends introductory message [0 of N] if there are multiple patches.
Lee Cantey <lcantey@gmail.com>
parents: 1827
diff changeset
290
4278
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
291 subj = '[PATCH %0*d of %d] %s' % (
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
292 tlen, 0,
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
293 len(patches),
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
294 opts['subject'] or
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
295 prompt('Subject:', rest = ' [PATCH %0*d of %d] ' % (tlen, 0,
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
296 len(patches))))
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
297
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
298 body = ''
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
299 if opts['diffstat']:
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
300 d = cdiffstat(_('Final summary:\n'), jumbo)
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
301 if d: body = '\n' + d
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
302
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
303 ui.write(_('\nWrite the introductory message for the patch series.\n\n'))
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
304 body = ui.edit(body, sender)
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
305
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
306 msg = email.MIMEText.MIMEText(body)
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
307 msg['Subject'] = subj
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
308
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
309 msgs.insert(0, msg)
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
310 return msgs
2704
99e7cf6bd2f7 make introductory message of patch series text/plain
Christian Ebert <blacktrash@gmx.net>
parents: 2443
diff changeset
311
4278
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
312 def getbundlemsgs(bundle):
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
313 subj = opts['subject'] or \
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
314 prompt('Subject:', default='A bundle for your repository')
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
315 ui.write(_('\nWrite the introductory message for the bundle.\n\n'))
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
316 body = ui.edit('', sender)
2704
99e7cf6bd2f7 make introductory message of patch series text/plain
Christian Ebert <blacktrash@gmx.net>
parents: 2443
diff changeset
317
4278
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
318 msg = email.MIMEMultipart.MIMEMultipart()
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
319 if body:
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
320 msg.attach(email.MIMEText.MIMEText(body, 'plain'))
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
321 datapart = email.MIMEBase.MIMEBase('application', 'x-mercurial-bundle')
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
322 datapart.set_payload(bundle)
4284
a04141f51056 Add a filename for the bundle
John Goerzen <jgoerzen@complete.org>
parents: 4283
diff changeset
323 datapart.add_header('Content-Disposition', 'attachment',
a04141f51056 Add a filename for the bundle
John Goerzen <jgoerzen@complete.org>
parents: 4283
diff changeset
324 filename='bundle.hg')
4278
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
325 email.Encoders.encode_base64(datapart)
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
326 msg.attach(datapart)
2704
99e7cf6bd2f7 make introductory message of patch series text/plain
Christian Ebert <blacktrash@gmx.net>
parents: 2443
diff changeset
327 msg['Subject'] = subj
4278
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
328 return [msg]
1845
cfe689ab3f06 Patchbomb only sends introductory message [0 of N] if there are multiple patches.
Lee Cantey <lcantey@gmail.com>
parents: 1827
diff changeset
329
4485
6d2d1dcd5f74 patchbomb: Hoist sender config higher.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4483
diff changeset
330 sender = (opts['from'] or ui.config('email', 'from') or
6d2d1dcd5f74 patchbomb: Hoist sender config higher.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4483
diff changeset
331 ui.config('patchbomb', 'from') or
6d2d1dcd5f74 patchbomb: Hoist sender config higher.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4483
diff changeset
332 prompt('From', ui.username()))
6d2d1dcd5f74 patchbomb: Hoist sender config higher.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4483
diff changeset
333
4278
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
334 if opts.get('bundle'):
4279
126d1967a3f8 Add common bundle/outgoing options to hg email
John Goerzen <jgoerzen@complete.org>
parents: 4278
diff changeset
335 msgs = getbundlemsgs(getbundle(dest))
4278
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
336 else:
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
337 msgs = getexportmsgs()
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
338
4479
82bc6aef8b43 patchbomb: Don't prompt for headers until sure we have revs to export.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4284
diff changeset
339 def getaddrs(opt, prpt, default = None):
82bc6aef8b43 patchbomb: Don't prompt for headers until sure we have revs to export.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4284
diff changeset
340 addrs = opts[opt] or (ui.config('email', opt) or
82bc6aef8b43 patchbomb: Don't prompt for headers until sure we have revs to export.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4284
diff changeset
341 ui.config('patchbomb', opt) or
82bc6aef8b43 patchbomb: Don't prompt for headers until sure we have revs to export.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4284
diff changeset
342 prompt(prpt, default = default)).split(',')
82bc6aef8b43 patchbomb: Don't prompt for headers until sure we have revs to export.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4284
diff changeset
343 return [a.strip() for a in addrs if a.strip()]
82bc6aef8b43 patchbomb: Don't prompt for headers until sure we have revs to export.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4284
diff changeset
344
82bc6aef8b43 patchbomb: Don't prompt for headers until sure we have revs to export.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4284
diff changeset
345 to = getaddrs('to', 'To')
82bc6aef8b43 patchbomb: Don't prompt for headers until sure we have revs to export.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4284
diff changeset
346 cc = getaddrs('cc', 'Cc', '')
82bc6aef8b43 patchbomb: Don't prompt for headers until sure we have revs to export.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4284
diff changeset
347
82bc6aef8b43 patchbomb: Don't prompt for headers until sure we have revs to export.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4284
diff changeset
348 bcc = opts['bcc'] or (ui.config('email', 'bcc') or
82bc6aef8b43 patchbomb: Don't prompt for headers until sure we have revs to export.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4284
diff changeset
349 ui.config('patchbomb', 'bcc') or '').split(',')
82bc6aef8b43 patchbomb: Don't prompt for headers until sure we have revs to export.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4284
diff changeset
350 bcc = [a.strip() for a in bcc if a.strip()]
82bc6aef8b43 patchbomb: Don't prompt for headers until sure we have revs to export.
Bryan O'Sullivan <bos@serpentine.com>
parents: 4284
diff changeset
351
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
352 ui.write('\n')
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
353
1702
e291d9a30bef add --mbox output to patchbomb
Johannes Stezenbach <js@linuxtv.org>
parents: 1691
diff changeset
354 if not opts['test'] and not opts['mbox']:
2909
20b95aef3fe0 Move ui.sendmail to mail.connect/sendmail
Matt Mackall <mpm@selenic.com>
parents: 2785
diff changeset
355 mailer = mail.connect(ui)
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
356 parent = None
2443
bd9c39e8f38b patchbomb does not handle email time stamp plattform independent
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents: 2292
diff changeset
357
1827
26dd4ae77b7b get patchbomb extension to use demandload. speeds up hg startup by 50%.
Vadim Gelfer <vadim.gelger@gmail.com>
parents: 1702
diff changeset
358 sender_addr = email.Utils.parseaddr(sender)[1]
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
359 for m in msgs:
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
360 try:
876
14cfaaec2e8e Get patchbomb script to not use MIME attachments.
Bryan O'Sullivan <bos@serpentine.com>
parents: 875
diff changeset
361 m['Message-Id'] = genmsgid(m['X-Mercurial-Node'])
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
362 except TypeError:
876
14cfaaec2e8e Get patchbomb script to not use MIME attachments.
Bryan O'Sullivan <bos@serpentine.com>
parents: 875
diff changeset
363 m['Message-Id'] = genmsgid('patchbomb')
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
364 if parent:
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
365 m['In-Reply-To'] = parent
876
14cfaaec2e8e Get patchbomb script to not use MIME attachments.
Bryan O'Sullivan <bos@serpentine.com>
parents: 875
diff changeset
366 else:
14cfaaec2e8e Get patchbomb script to not use MIME attachments.
Bryan O'Sullivan <bos@serpentine.com>
parents: 875
diff changeset
367 parent = m['Message-Id']
4027
2601ac9c54f0 patchbomb: fix timezone offset in message date header
Christian Ebert <blacktrash@gmx.net>
parents: 3468
diff changeset
368 m['Date'] = util.datestr(date=start_time,
2601ac9c54f0 patchbomb: fix timezone offset in message date header
Christian Ebert <blacktrash@gmx.net>
parents: 3468
diff changeset
369 format="%a, %d %b %Y %H:%M:%S", timezone=True)
2443
bd9c39e8f38b patchbomb does not handle email time stamp plattform independent
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents: 2292
diff changeset
370
4027
2601ac9c54f0 patchbomb: fix timezone offset in message date header
Christian Ebert <blacktrash@gmx.net>
parents: 3468
diff changeset
371 start_time = (start_time[0] + 1, start_time[1])
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
372 m['From'] = sender
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
373 m['To'] = ', '.join(to)
2679
f1de91be1d87 optionally send blind carbon copies
Christian Ebert <blacktrash@gmx.net>
parents: 2443
diff changeset
374 if cc: m['Cc'] = ', '.join(cc)
f1de91be1d87 optionally send blind carbon copies
Christian Ebert <blacktrash@gmx.net>
parents: 2443
diff changeset
375 if bcc: m['Bcc'] = ', '.join(bcc)
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
376 if opts['test']:
1702
e291d9a30bef add --mbox output to patchbomb
Johannes Stezenbach <js@linuxtv.org>
parents: 1691
diff changeset
377 ui.status('Displaying ', m['Subject'], ' ...\n')
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
378 fp = os.popen(os.getenv('PAGER', 'more'), 'w')
1871
258e3a7955b8 patchbomb: ignore exception if pager quits.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1846
diff changeset
379 try:
258e3a7955b8 patchbomb: ignore exception if pager quits.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1846
diff changeset
380 fp.write(m.as_string(0))
258e3a7955b8 patchbomb: ignore exception if pager quits.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1846
diff changeset
381 fp.write('\n')
258e3a7955b8 patchbomb: ignore exception if pager quits.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1846
diff changeset
382 except IOError, inst:
258e3a7955b8 patchbomb: ignore exception if pager quits.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1846
diff changeset
383 if inst.errno != errno.EPIPE:
258e3a7955b8 patchbomb: ignore exception if pager quits.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1846
diff changeset
384 raise
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
385 fp.close()
1702
e291d9a30bef add --mbox output to patchbomb
Johannes Stezenbach <js@linuxtv.org>
parents: 1691
diff changeset
386 elif opts['mbox']:
e291d9a30bef add --mbox output to patchbomb
Johannes Stezenbach <js@linuxtv.org>
parents: 1691
diff changeset
387 ui.status('Writing ', m['Subject'], ' ...\n')
e291d9a30bef add --mbox output to patchbomb
Johannes Stezenbach <js@linuxtv.org>
parents: 1691
diff changeset
388 fp = open(opts['mbox'], m.has_key('In-Reply-To') and 'ab+' or 'wb+')
4027
2601ac9c54f0 patchbomb: fix timezone offset in message date header
Christian Ebert <blacktrash@gmx.net>
parents: 3468
diff changeset
389 date = util.datestr(date=start_time,
2601ac9c54f0 patchbomb: fix timezone offset in message date header
Christian Ebert <blacktrash@gmx.net>
parents: 3468
diff changeset
390 format='%a %b %d %H:%M:%S %Y', timezone=False)
1702
e291d9a30bef add --mbox output to patchbomb
Johannes Stezenbach <js@linuxtv.org>
parents: 1691
diff changeset
391 fp.write('From %s %s\n' % (sender_addr, date))
e291d9a30bef add --mbox output to patchbomb
Johannes Stezenbach <js@linuxtv.org>
parents: 1691
diff changeset
392 fp.write(m.as_string(0))
e291d9a30bef add --mbox output to patchbomb
Johannes Stezenbach <js@linuxtv.org>
parents: 1691
diff changeset
393 fp.write('\n\n')
e291d9a30bef add --mbox output to patchbomb
Johannes Stezenbach <js@linuxtv.org>
parents: 1691
diff changeset
394 fp.close()
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
395 else:
1702
e291d9a30bef add --mbox output to patchbomb
Johannes Stezenbach <js@linuxtv.org>
parents: 1691
diff changeset
396 ui.status('Sending ', m['Subject'], ' ...\n')
2785
58a679745b38 mailbomb: add a comment and remove the bcc in a more pythonic way
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2731
diff changeset
397 # Exim does not remove the Bcc field
58a679745b38 mailbomb: add a comment and remove the bcc in a more pythonic way
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 2731
diff changeset
398 del m['Bcc']
2909
20b95aef3fe0 Move ui.sendmail to mail.connect/sendmail
Matt Mackall <mpm@selenic.com>
parents: 2785
diff changeset
399 mailer.sendmail(sender, to + bcc + cc, m.as_string(0))
875
d3f836bf6cc1 Add patchbomb script.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
400
1669
91d40fc959f0 turn patchbomb script into an extension module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1604
diff changeset
401 cmdtable = {
91d40fc959f0 turn patchbomb script into an extension module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1604
diff changeset
402 'email':
91d40fc959f0 turn patchbomb script into an extension module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1604
diff changeset
403 (patchbomb,
2706
4af7b178976a patchbomb: optionally send patches as inline attachments
Christian Ebert <blacktrash@gmx.net>
parents: 2705
diff changeset
404 [('a', 'attach', None, 'send patches as inline attachments'),
4af7b178976a patchbomb: optionally send patches as inline attachments
Christian Ebert <blacktrash@gmx.net>
parents: 2705
diff changeset
405 ('', 'bcc', [], 'email addresses of blind copy recipients'),
2679
f1de91be1d87 optionally send blind carbon copies
Christian Ebert <blacktrash@gmx.net>
parents: 2443
diff changeset
406 ('c', 'cc', [], 'email addresses of copy recipients'),
1669
91d40fc959f0 turn patchbomb script into an extension module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1604
diff changeset
407 ('d', 'diffstat', None, 'add diffstat output to messages'),
3027
5a17423f88d7 Add --git support to hg email
Brendan Cully <brendan@kublai.com>
parents: 2930
diff changeset
408 ('g', 'git', None, _('use git extended diff format')),
1669
91d40fc959f0 turn patchbomb script into an extension module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1604
diff changeset
409 ('f', 'from', '', 'email address of sender'),
91d40fc959f0 turn patchbomb script into an extension module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1604
diff changeset
410 ('', 'plain', None, 'omit hg patch header'),
91d40fc959f0 turn patchbomb script into an extension module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1604
diff changeset
411 ('n', 'test', None, 'print messages that would be sent'),
1702
e291d9a30bef add --mbox output to patchbomb
Johannes Stezenbach <js@linuxtv.org>
parents: 1691
diff changeset
412 ('m', 'mbox', '', 'write messages to mbox file instead of sending them'),
4257
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
413 ('o', 'outgoing', None, _('send changes not found in the target repository')),
4278
cfe886c14ddf Add ability to send bundles to patchbomb extension
John Goerzen <jgoerzen@complete.org>
parents: 4257
diff changeset
414 ('b', 'bundle', None, _('send changes not in target as a binary bundle')),
4257
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
415 ('r', 'rev', [], _('a revision to send')),
4141
49d7a035235b patchbomb: Allow to specify subject of single-patch-series (issue475)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4027
diff changeset
416 ('s', 'subject', '', 'subject of first message (intro or single patch)'),
4279
126d1967a3f8 Add common bundle/outgoing options to hg email
John Goerzen <jgoerzen@complete.org>
parents: 4278
diff changeset
417 ('t', 'to', [], 'email addresses of recipients'),
126d1967a3f8 Add common bundle/outgoing options to hg email
John Goerzen <jgoerzen@complete.org>
parents: 4278
diff changeset
418 ('', 'force', None, _('run even when remote repository is unrelated (with -b)')),
126d1967a3f8 Add common bundle/outgoing options to hg email
John Goerzen <jgoerzen@complete.org>
parents: 4278
diff changeset
419 ('', 'base', [],
126d1967a3f8 Add common bundle/outgoing options to hg email
John Goerzen <jgoerzen@complete.org>
parents: 4278
diff changeset
420 _('a base changeset to specify instead of a destination (with -b)'))]
126d1967a3f8 Add common bundle/outgoing options to hg email
John Goerzen <jgoerzen@complete.org>
parents: 4278
diff changeset
421 + commands.remoteopts,
4257
f51317e24114 Add --outgoing option to patchbomb
Brendan Cully <brendan@kublai.com>
parents: 4144
diff changeset
422 "hg email [OPTION]... [DEST]...")
1669
91d40fc959f0 turn patchbomb script into an extension module.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1604
diff changeset
423 }