diff --git a/hgext/patchbomb.py b/hgext/patchbomb.py --- a/hgext/patchbomb.py +++ b/hgext/patchbomb.py @@ -84,7 +84,7 @@ def makepatch(ui, repo, patchlines, opts 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 @@ def makepatch(ui, repo, patchlines, opts 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 @@ def makepatch(ui, repo, patchlines, opts 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 @@ def makepatch(ui, repo, patchlines, opts 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 @@ def patchbomb(ui, repo, *revs, **opts): 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 diff --git a/tests/test-patchbomb.t b/tests/test-patchbomb.t --- a/tests/test-patchbomb.t +++ b/tests/test-patchbomb.t @@ -979,6 +979,62 @@ test attach for single patch (quoted-pri --===*-- (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: (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