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 with SMTP id t4cs145735fal;
        Sun, 27 Feb 2011 19:12:54 -0800 (PST)
Received: by 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 [])
        by mx.google.com with ESMTP id d4si4000685vcd.156.2011.;
        Sun, 27 Feb 2011 19:12:52 -0800 (PST)
Received-SPF: neutral (google.com: is neither permitted nor denied by domain of <email address hidden>) client-ip=;
Authentication-Results: mx.google.com; spf=neutral (google.com: is neither permitted nor denied by domain of <email address hidden>) <email address hidden>
Received: from mr16.lnh.mail.rcn.net ([])
  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 [])
 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=;
  <email address hidden>";
  <email address hidden>";
Received-SPF: Neutral identity=mailfrom; client-ip=;
  <email address hidden>";
  <email address hidden>";
Received-SPF: None identity=helo; client-ip=;
  <email address hidden>";
Received: from 207-172-203-39.c3-0.upd-ubr7.trpr-upd.pa.cable.rcn.com (HELO hydrogen) ([])
  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)

Hash: SHA1

- --=-=-=

- ------------------------------------------------------------
revno: 5691
committer: Samuel Bronson <email address hidden>
branch nick: dev
timestamp: Sun 2011-02-27 15:51:30 -0500
  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>
# 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.
     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

# Begin bundle

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


Question information

English Edit question
Launchpad itself Edit question
No assignee Edit question
Solved by:
Max Bowsher
Last query:
Last reply:
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.