patchbomb: add --body flag to send patches as inline message body text
There is currently no way to make patchbomb include patches both as attachments
and as inline text. This would be quite convenient when sending patches to
people who use web email clients (e.g. gmail) which often mangle the patches,
making them hard to apply.
The default behavior of the email command is unchanged. However it is now
possible to use the --body flag _in addition_ to the -i or -a flags, in which
case the patchbomb emails will contain the patch as inline body text and as an
attachment.
A new test has been added to test-patchbomb.t ("test attach for single
patch"), based on the existing test called "test attach for single patch" test.
--- a/hgext/patchbomb.py Wed Mar 28 15:25:20 2012 -0400
+++ b/hgext/patchbomb.py Wed Mar 21 06:45:07 2012 +0100
@@ -84,7 +84,7 @@
if not patchname and not node:
raise ValueError
- if opts.get('attach'):
+ if opts.get('attach') and not opts.get('body'):
body = ('\n'.join(desc[1:]).strip() or
'Patch subject is complete summary.')
body += '\n\n\n'
@@ -101,7 +101,11 @@
if opts.get('diffstat'):
body += ds + '\n\n'
- if opts.get('attach') or opts.get('inline'):
+ addattachment = opts.get('attach') or opts.get('inline')
+ if not addattachment or opts.get('body'):
+ body += '\n'.join(patchlines)
+
+ if addattachment:
msg = email.MIMEMultipart.MIMEMultipart()
if body:
msg.attach(mail.mimeencode(ui, body, _charsets, opts.get('test')))
@@ -124,7 +128,6 @@
p['Content-Disposition'] = disposition + '; filename=' + patchname
msg.attach(p)
else:
- body += '\n'.join(patchlines)
msg = mail.mimetextpatch(body, display=opts.get('test'))
flag = ' '.join(opts.get('flag'))
@@ -142,6 +145,7 @@
return msg, subj, ds
emailopts = [
+ ('', 'body', None, _('send patches as inline message text (default)')),
('a', 'attach', None, _('send patches as attachments')),
('i', 'inline', None, _('send patches as inline attachments')),
('', 'bcc', [], _('email addresses of blind carbon copy recipients')),
@@ -199,7 +203,9 @@
By default the patch is included as text in the email body for
easy reviewing. Using the -a/--attach option will instead create
an attachment for the patch. With -i/--inline an inline attachment
- will be created.
+ will be created. You can include a patch both as text in the email
+ body and as a regular or an inline attachment by combining the
+ -a/--attach or -i/--inline with the --body option.
With -o/--outgoing, emails will be generated for patches not found
in the destination repository (or only those which are ancestors
--- a/tests/test-patchbomb.t Wed Mar 28 15:25:20 2012 -0400
+++ b/tests/test-patchbomb.t Wed Mar 21 06:45:07 2012 +0100
@@ -979,6 +979,62 @@
--===*-- (glob)
+test attach and body for single patch:
+ $ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a --body -r 2
+ This patch series consists of 1 patches.
+
+
+ Displaying [PATCH] test ...
+ Content-Type: multipart/mixed; boundary="===*" (glob)
+ MIME-Version: 1.0
+ Subject: [PATCH] test
+ X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
+ Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
+ User-Agent: Mercurial-patchbomb/* (glob)
+ Date: Thu, 01 Jan 1970 00:01:00 +0000
+ From: quux
+ To: foo
+ Cc: bar
+
+ --===* (glob)
+ Content-Type: text/plain; charset="us-ascii"
+ MIME-Version: 1.0
+ Content-Transfer-Encoding: 7bit
+
+ # HG changeset patch
+ # User test
+ # Date 3 0
+ # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
+ # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
+ c
+
+ diff -r 97d72e5f12c7 -r ff2c9fa2018b c
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+ +++ b/c Thu Jan 01 00:00:03 1970 +0000
+ @@ -0,0 +1,1 @@
+ +c
+
+ --===* (glob)
+ Content-Type: text/x-patch; charset="us-ascii"
+ MIME-Version: 1.0
+ Content-Transfer-Encoding: 7bit
+ Content-Disposition: attachment; filename=t2.patch
+
+ # HG changeset patch
+ # User test
+ # Date 3 0
+ # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
+ # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
+ c
+
+ diff -r 97d72e5f12c7 -r ff2c9fa2018b c
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+ +++ b/c Thu Jan 01 00:00:03 1970 +0000
+ @@ -0,0 +1,1 @@
+ +c
+
+ --===*-- (glob)
+
test attach for multiple patches:
$ hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a \
> -r 0:1 -r 4