Exactly how should a merge proposal email be formed?

Asked by Samuel Bronson on 2011-02-28

According to https://help.launchpad.net/Code/Review#Proposing%20a%20merge, I can propose merges via email, but I'm not sure how exactly such an email should be formed.

First I tried without signing the email, so launchpad helpfully replied telling me I needed to sign my email; then, I tried once and launchpad didn't even notice it was signed (perhaps I only signed part of the email?), and the next two tries got me OOPS's: OOPS-1885CMP2 and OOPS-1885CMP4.

How should such an email be formed, that is:

  - Is there any required MIME type for the merge directive?

  - What signature format is wanted, ordinary PGP or PGP/MIME?

It would also probably be a good idea to have a page explaining how to sign emails appropriately with various clients. (I'm trying to do it with Emacs' `message' package.)

Here is the text of one of the two OOPSing emails; hopefully it won't be mangled too badly by being included in the text here, but I don't see any way to make an attachment, so:

Delivered-To: <email address hidden>
Received: by 10.223.86.196 with SMTP id t4cs145735fal;
        Sun, 27 Feb 2011 19:12:54 -0800 (PST)
Received: by 10.220.177.198 with SMTP id bj6mr541291vcb.214.1298862772750;
        Sun, 27 Feb 2011 19:12:52 -0800 (PST)
Return-Path: <email address hidden>
Received: from smtp02.lnh.mail.rcn.net (smtp02.lnh.mail.rcn.net [207.172.157.102])
        by mx.google.com with ESMTP id d4si4000685vcd.156.2011.02.27.19.12.52;
        Sun, 27 Feb 2011 19:12:52 -0800 (PST)
Received-SPF: neutral (google.com: 207.172.157.102 is neither permitted nor denied by domain of <email address hidden>) client-ip=207.172.157.102;
Authentication-Results: mx.google.com; spf=neutral (google.com: 207.172.157.102 is neither permitted nor denied by domain of <email address hidden>) <email address hidden>
Received: from mr16.lnh.mail.rcn.net ([207.172.157.36])
  by smtp02.lnh.mail.rcn.net with ESMTP; 27 Feb 2011 22:12:52 -0500
Received: from smtp01.lnh.mail.rcn.net (smtp01.lnh.mail.rcn.net [207.172.4.11])
 by mr16.lnh.mail.rcn.net (MOS 4.2.3-GA)
 with ESMTP id AYD28653;
 Sun, 27 Feb 2011 22:12:52 -0500
Received-SPF: None identity=pra; client-ip=207.172.203.39;
  receiver=smtp01.lnh.mail.rcn.net;
  <email address hidden>";
  <email address hidden>";
  x-conformance=sidf_compatible
Received-SPF: Neutral identity=mailfrom; client-ip=207.172.203.39;
  receiver=smtp01.lnh.mail.rcn.net;
  <email address hidden>";
  <email address hidden>";
  x-conformance=sidf_compatible;
  x-record-type="v=spf1"
Received-SPF: None identity=helo; client-ip=207.172.203.39;
  receiver=smtp01.lnh.mail.rcn.net;
  <email address hidden>";
  x-sender="postmaster@hydrogen";
  x-conformance=sidf_compatible
Received: from 207-172-203-39.c3-0.upd-ubr7.trpr-upd.pa.cable.rcn.com (HELO hydrogen) ([207.172.203.39])
  by smtp01.lnh.mail.rcn.net with ESMTP; 27 Feb 2011 22:12:51 -0500
Received: from naesten by hydrogen with local (Exim 4.69)
 (envelope-from <email address hidden>)
 id 1PttXV-0002T9-O5
 for <email address hidden>; Sun, 27 Feb 2011 22:12:49 -0500
From: Samuel Bronson <email address hidden>
To: <email address hidden>
Subject: [MERGE] Fix an obvious typo in ExtendedTestResult's docstring.
Date: Sun, 27 Feb 2011 22:12:46 -0500
Message-ID: <email address hidden>
MIME-Version: 1.0
X-Junkmail-Whitelist: YES (by domain whitelist at mr16.lnh.mail.rcn.net)

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

- --=-=-=

- ------------------------------------------------------------
revno: 5691
committer: Samuel Bronson <email address hidden>
branch nick: dev
timestamp: Sun 2011-02-27 15:51:30 -0500
message:
  Fix an obvious typo in ExtendedTestResult's docstring.
  "addSuccess", "addFailure", and "addError" are methods, not classes!
  (This has been sitting in my working tree for a looong time.)

- --=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment; filename=5691.patch
Content-Transfer-Encoding: quoted-printable

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: <email address hidden>
# target_branch: bzr+ssh://bazaar.launchpad.net/~bzr-pqm/bzr/bzr.dev
# testament_sha1: e2f2babcda0d0f41895df7d65a560b1c777ea5ad
# timestamp: 2011-02-27 22:09:44 -0500
# base_revision_id: <email address hidden>
#=20
# Begin patch
=3D=3D=3D modified file 'bzrlib/tests/__init__.py'
=2D-- bzrlib/tests/__init__.py 2011-02-25 00:15:23 +0000
+++ bzrlib/tests/__init__.py 2011-02-27 20:51:30 +0000
@@ -219,7 +219,7 @@
     different types of display.
=20
     When a test finishes, in whatever way, it calls one of the addSuccess,
=2D addFailure or addError classes. These in turn may redirect to a more
+ addFailure or addError methods. These in turn may redirect to a more
     specific case for the special test results supported by our extended
     tests.
=20

# Begin bundle
IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWXtUNkEAAYPfgEAQcOf/91MA
HAC////wUAOu8D3pnqI0AaFNGkPTRTzSeim2pPU8o9qjQNAyaA0pMQb0p5MoyNAMgwmRkyBoGgQ1
MjQmmpo9RoAAAAART00miaN6oNNNA0ZGTAGo0DTQSSCMgBMgKeJlNNlTT0NMmppp6iOv0Pi5wtN1
bEF3VbSAEfLOqRqKpJNcbZbIsMzHHzL7SrUgOJERKWJ+YBwM/bo8Av/E854Us0OkWXMhllLggkQp
sZ9cWyp5Q3Z8Ncre6g2hwcF7nz4Yk99pLL3QcDjiLFaU4/qqqzVM/1ckt/tWYLS6yq7SIsHid1hw
zWD04RS9hHRyeKI+Gj3CgcE56YpxPr+iNZ0LJWquLk0Fw86BFGBUfie0r41iLHwrhXmXCqMF+5U5
hjz+1NXzrzLSN8DGISQtAHWZjhxmrxEoCKIKuxg2/sp1uJNEUCjbSQmWUG6GrZLtoYNmJrtgtRUt
VE1aqHbKWhsLFxhhsjsJgNzArSVATyFLmFApaloIcuaDBQQG5CNaDfJoOBIYpWNtaSxHI0ApAJgW
ke38hGZMGPC4vvJH0mp3lO1yZTutcaknGyVcLJ8AplnlCgzxE1uqorQwYRawNgm3XSTTFUni1ISO
KVURipGBI4kgpob6G/56TbrksPTxgky60FTDHtW+Y5jOxnD/z2jbY6UGDw7wJHLUQWjOebCGz467
e9WH5YvxSw2BtS9yKpXc9k5tOghbkwDNYKwaB477QqRd4lGh0aDsiXtmBq5tau4VDhikn4buEmt8
xF13KlszDjjkLxsqmqV3yfOHrKcgxVRC5abPDeF3AnWBh7oTOkLBV2PCA4btvlNVWNQix9RrRrQM
6sWoGb69Z/sMMrKcz2/SC8rkYAKQwjKp6nvBaoHg98yy6JiRdEDKAJikkW8QaIAqB+YduBll5KlO
gr265I/iV5rCqWhmStW955K0tv+6aOswSzTD1vV4eoWwdXV6a8qdQcruPyWMAyfR923xF7V7y8MN
vySYJCmDOCiC+gnrbiLLyhtdOR9UH/JmX9pXFKkTlgrAwNdixgDSDHI2ojEhEfuPUG+ljhwHdwzG
5ovgh7K9OXPlzpz4mGxI2zDtbFtHFlTiwNPT4oV8V4VWXzr1sycR7LnVn2VIWq9RFJbW2Awd3Cc+
ZfdjBFfOBTLpS8Ju9YWaz3JSCz4urjw4nsnRC52lB16tnHo4ymGbqlZxr/jYsCmHXWnvhnHpfNiL
XPqH+Y5nJOt4rAnaVWbo3EnVBYnOdFlaMoEVbQuK/zLphHmmxJ342qhweIrr6ILljqu1p562xmSr
E8X/i7kinChIPaobIIA=3D

- --=-=-=--
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iD8DBQFNaxKupw20rkEBi0URAvrsAJ92tsYzOuVIe5hPUgYe0P8afuekCgCfcBbE
oBuScpKqjXbf0JNuIZn0LyU=
=LDDn
-----END PGP SIGNATURE-----

Question information

Language:
English Edit question
Status:
Solved
For:
Launchpad itself Edit question
Assignee:
No assignee Edit question
Solved by:
Max Bowsher
Solved:
2011-03-02
Last query:
2011-03-02
Last reply:
2011-03-02
Max Bowsher (maxb) said : #1

wgrant looked up the oops codes and apparently it the error was:

ValueError: tag/value separator not found in line '=20\\n'

Looking at your pasted email, this makes sense - your email client has encoded the bzr bundle using quoted-printable, and has written things which look approximately like MIME multipart headers and boundary lines, but which actually are not. Therefore a computer parser has no means to know it needs to apply quoted-printable decoding to a portion of the message body.

If you can use a mail client which sends the comment and merge directive either concatenated in a single part email, or which produces a properly formatted MIME multipart email, Launchpad should accept your merge proposal.

Samuel Bronson (naesten) said : #2

It doesn't seem to help if I *do* send a PGP/MIME message, though; I just got OOPS-1886CMP2 after sending one. I checked, and it really had a fully-MIME structure this time! (The attachment was still quoted-printable, though.)

Best Max Bowsher (maxb) said : #3

The good news is that your email is now valid.

The bad news is that on investigation, it appears that the creation of branches from emailed bundles is broken where the base branch is in 2a format, due to a defect in Bazaar.

I've linked this question to the related bug.

Sorry that your efforts have been thwarted. Thanks for bringing this breakage to light.

Samuel Bronson (naesten) said : #4

Thanks Max Bowsher, that solved my question.