Patchwork [1,of,2,V2] patchbomb: includes series information in the header

login
register
mail settings
Submitter Pierre-Yves David
Date May 6, 2014, 10:06 p.m.
Message ID <d689d1f81dd9365f4834.1399413995@marginatus.alto.octopoid.net>
Download mbox | patch
Permalink /patch/4644/
State Superseded
Headers show

Comments

Pierre-Yves David - May 6, 2014, 10:06 p.m.
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@fb.com>
# Date 1399355234 25200
#      Mon May 05 22:47:14 2014 -0700
# Node ID d689d1f81dd9365f48348ee544ed9fab97d8142f
# Parent  0768cda8b5799dc803dc0ee27a832cd64e05f28a
patchbomb: includes series information in the header

We includes information about the series being patch bombed in all email. Two
new headers are added:

* X-Mercurial-Series-index: index of the patches in the series (starts at 1)
* X-Mercurial-Series-total: The total number of patches in the series

This information is available in the email subject line, but having them
formalized in the header will helps automated tools to process patches send with
modern mercurial.
Angel Ezquerra - May 6, 2014, 10:32 p.m.
On Wed, May 7, 2014 at 12:06 AM,  <pierre-yves.david@ens-lyon.org> wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david@fb.com>
> # Date 1399355234 25200
> #      Mon May 05 22:47:14 2014 -0700
> # Node ID d689d1f81dd9365f48348ee544ed9fab97d8142f
> # Parent  0768cda8b5799dc803dc0ee27a832cd64e05f28a
> patchbomb: includes series information in the header
>
> We includes information about the series being patch bombed in all email. Two
> new headers are added:
>
> * X-Mercurial-Series-index: index of the patches in the series (starts at 1)
> * X-Mercurial-Series-total: The total number of patches in the series
>
> This information is available in the email subject line, but having them
> formalized in the header will helps automated tools to process patches send with
> modern mercurial.

I'd be neat if this could be done in such a way that regular email
clients (including gmail) were able to consider the whole series as a
single thread. Isn't there any standard header that can be used for
that (or in addition to these proposed new headers)?

Cheers,

Angel
Pierre-Yves David - May 6, 2014, 10:41 p.m.
On 05/06/2014 03:32 PM, Angel Ezquerra wrote:
> On Wed, May 7, 2014 at 12:06 AM,  <pierre-yves.david@ens-lyon.org> wrote:
>> # HG changeset patch
>> # User Pierre-Yves David <pierre-yves.david@fb.com>
>> # Date 1399355234 25200
>> #      Mon May 05 22:47:14 2014 -0700
>> # Node ID d689d1f81dd9365f48348ee544ed9fab97d8142f
>> # Parent  0768cda8b5799dc803dc0ee27a832cd64e05f28a
>> patchbomb: includes series information in the header
>>
>> We includes information about the series being patch bombed in all email. Two
>> new headers are added:
>>
>> * X-Mercurial-Series-index: index of the patches in the series (starts at 1)
>> * X-Mercurial-Series-total: The total number of patches in the series
>>
>> This information is available in the email subject line, but having them
>> formalized in the header will helps automated tools to process patches send with
>> modern mercurial.
>
> I'd be neat if this could be done in such a way that regular email
> clients (including gmail) were able to consider the whole series as a
> single thread. Isn't there any standard header that can be used for
> that (or in addition to these proposed new headers)?

all email in the series -already- contains a in-reply-to header pointing 
to the first email of the series. This has been the case for age and 
should be enough for any descent email client to thread them.
Angel Ezquerra - May 6, 2014, 10:44 p.m.
El 07/05/2014 00:41, "Pierre-Yves David" <pierre-yves.david@ens-lyon.org>
escribió:
>
>
>
> On 05/06/2014 03:32 PM, Angel Ezquerra wrote:
>>
>> On Wed, May 7, 2014 at 12:06 AM,  <pierre-yves.david@ens-lyon.org> wrote:
>>>
>>> # HG changeset patch
>>> # User Pierre-Yves David <pierre-yves.david@fb.com>
>>> # Date 1399355234 25200
>>> #      Mon May 05 22:47:14 2014 -0700
>>> # Node ID d689d1f81dd9365f48348ee544ed9fab97d8142f
>>> # Parent  0768cda8b5799dc803dc0ee27a832cd64e05f28a
>>> patchbomb: includes series information in the header
>>>
>>> We includes information about the series being patch bombed in all
email. Two
>>> new headers are added:
>>>
>>> * X-Mercurial-Series-index: index of the patches in the series (starts
at 1)
>>> * X-Mercurial-Series-total: The total number of patches in the series
>>>
>>> This information is available in the email subject line, but having them
>>> formalized in the header will helps automated tools to process patches
send with
>>> modern mercurial.
>>
>>
>> I'd be neat if this could be done in such a way that regular email
>> clients (including gmail) were able to consider the whole series as a
>> single thread. Isn't there any standard header that can be used for
>> that (or in addition to these proposed new headers)?
>
>
> all email in the series -already- contains a in-reply-to header pointing
to the first email of the series. This has been the case for age and should
be enough for any descent email client to thread them.
>

In that case it seems that gmail is not really a decent email client :-/

Angel
Pierre-Yves David - May 6, 2014, 10:47 p.m.
On 05/06/2014 03:44 PM, Angel Ezquerra wrote:
 >
>  > all email in the series -already- contains a in-reply-to header
> pointing to the first email of the series. This has been the case for
> age and should be enough for any descent email client to thread them.
>  >
>
> In that case it seems that gmail is not really a decent email client :-/

I know that cool kids now lives in the cloud, but for services as 
critical as email you should consider not relying on small startups 
based in some remote country.
Augie Fackler - May 7, 2014, 1:33 a.m.
On May 6, 2014, at 6:44 PM, Angel Ezquerra <angel.ezquerra@gmail.com> wrote:

>>> I'd be neat if this could be done in such a way that regular email
>>> clients (including gmail) were able to consider the whole series as a
>>> single thread. Isn't there any standard header that can be used for
>>> that (or in addition to these proposed new headers)?
>> 
>> 
>> all email in the series -already- contains a in-reply-to header pointing
>> to the first email of the series. This has been the case for age and should
>> be enough for any descent email client to thread them.
>> 
> 
> In that case it seems that gmail is not really a decent email client :-/

Yup. Gmail notably ignores the in-reply-to header (see jwz's authoritative document http://www.jwz.org/doc/threading.html), which the rest of the universe actually understands and uses.

Gmail will *only* thread messages together if the subjects are substantially similar. I have no idea why this is the case.

Honestly: for patch review I use mail.app or mutt, and never gmail. mbsync+mutt works pretty well overall. Thunderbird is okay too, but I don't know how to get patches out of it.
Martin Geisler - May 7, 2014, 6:50 a.m.
Angel Ezquerra <angel.ezquerra@gmail.com> writes:

> El 07/05/2014 00:41, "Pierre-Yves David" <pierre-yves.david@ens-lyon.org>
> escribió:
>>
>>
>>
>> On 05/06/2014 03:32 PM, Angel Ezquerra wrote:
>>>
>>> I'd be neat if this could be done in such a way that regular email
>>> clients (including gmail) were able to consider the whole series as
>>> a single thread. Isn't there any standard header that can be used
>>> for that (or in addition to these proposed new headers)?
>>
>>
>> all email in the series -already- contains a in-reply-to header pointing
> to the first email of the series. This has been the case for age and should
> be enough for any descent email client to thread them.
>>
>
> In that case it seems that gmail is not really a decent email client :-/

That has unfortunately been established some time ago. In addition to
ignoring standard headers for threading, the way it applies quoting to
inline replies is broken:

  http://www.selenic.com/pipermail/mercurial-devel/2009-December/017681.html
Angel Ezquerra - May 7, 2014, 7:16 a.m.
On Wed, May 7, 2014 at 8:50 AM, Martin Geisler <martin@geisler.net> wrote:
> Angel Ezquerra <angel.ezquerra@gmail.com> writes:
>
>> El 07/05/2014 00:41, "Pierre-Yves David" <pierre-yves.david@ens-lyon.org>
>> escribió:
>>>
>>>
>>>
>>> On 05/06/2014 03:32 PM, Angel Ezquerra wrote:
>>>>
>>>> I'd be neat if this could be done in such a way that regular email
>>>> clients (including gmail) were able to consider the whole series as
>>>> a single thread. Isn't there any standard header that can be used
>>>> for that (or in addition to these proposed new headers)?
>>>
>>>
>>> all email in the series -already- contains a in-reply-to header pointing
>> to the first email of the series. This has been the case for age and should
>> be enough for any descent email client to thread them.
>>>
>>
>> In that case it seems that gmail is not really a decent email client :-/
>
> That has unfortunately been established some time ago. In addition to
> ignoring standard headers for threading, the way it applies quoting to
> inline replies is broken:
>
>   http://www.selenic.com/pipermail/mercurial-devel/2009-December/017681.html

That is too bad because gmail is otherwise pretty nice.

If only we new some people who work at google... :->

Angel

Patch

diff --git a/hgext/patchbomb.py b/hgext/patchbomb.py
--- a/hgext/patchbomb.py
+++ b/hgext/patchbomb.py
@@ -147,10 +147,12 @@  def makepatch(ui, repo, patchlines, opts
     else:
         tlen = len(str(total))
         subj = '[PATCH %0*d of %d%s] %s' % (tlen, idx, total, flag, subj)
     msg['Subject'] = mail.headencode(ui, subj, _charsets, opts.get('test'))
     msg['X-Mercurial-Node'] = node
+    msg['X-Mercurial-Series-index'] = '%i' % idx
+    msg['X-Mercurial-Series-total'] = '%i' % total
     return msg, subj, ds
 
 emailopts = [
     ('', 'body', None, _('send patches as inline message text (default)')),
     ('a', 'attach', None, _('send patches as attachments')),
diff --git a/tests/test-patchbomb.t b/tests/test-patchbomb.t
--- a/tests/test-patchbomb.t
+++ b/tests/test-patchbomb.t
@@ -15,10 +15,12 @@ 
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH] a
   X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <8580ff50825a50c8f716.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:00 +0000
   From: quux
   To: foo
@@ -85,10 +87,12 @@ 
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 1 of 2] a
   X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 2
   Message-Id: <8580ff50825a50c8f716.121@*> (glob)
   In-Reply-To: <patchbomb.120@*> (glob)
   References: <patchbomb.120@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:02:01 +0000
@@ -114,10 +118,12 @@ 
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 2 of 2] b
   X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
+  X-Mercurial-Series-index: 2
+  X-Mercurial-Series-total: 2
   Message-Id: <97d72e5f12c7e84f8506.122@*> (glob)
   In-Reply-To: <patchbomb.120@*> (glob)
   References: <patchbomb.120@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:02:02 +0000
@@ -249,10 +255,12 @@  no mime encoding for email --test:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 8bit
   Subject: [PATCH] utf-8 content
   X-Mercurial-Node: 909a00e13e9d78b575aeee23dddbada46d5a143f
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <909a00e13e9d78b575ae.240@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:04:00 +0000
   From: quux
   To: foo
@@ -292,10 +300,12 @@  mime encoded mbox (base64):
   Content-Type: text/plain; charset="utf-8"
   MIME-Version: 1.0
   Content-Transfer-Encoding: base64
   Subject: [PATCH] utf-8 content
   X-Mercurial-Node: 909a00e13e9d78b575aeee23dddbada46d5a143f
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <909a00e13e9d78b575ae.240@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:04:00 +0000
   From: Q <quux>
   To: foo
@@ -351,10 +361,12 @@  no mime encoding for email --test:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: quoted-printable
   Subject: [PATCH] long line
   X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <a2ea8fc83dd8b93cfd86.240@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:04:00 +0000
   From: quux
   To: foo
@@ -402,10 +414,12 @@  mime encoded mbox (quoted-printable):
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: quoted-printable
   Subject: [PATCH] long line
   X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <a2ea8fc83dd8b93cfd86.240@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:04:00 +0000
   From: quux
   To: foo
@@ -461,10 +475,12 @@  fake ascii mbox:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 8bit
   Subject: [PATCH] isolatin 8-bit encoding
   X-Mercurial-Node: 240fb913fc1b7ff15ddb9f33e73d82bf5277c720
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <240fb913fc1b7ff15ddb.300@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:05:00 +0000
   From: quux
   To: foo
@@ -506,10 +522,12 @@  test diffstat for single patch:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH] test
   X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:00 +0000
   From: quux
   To: foo
@@ -582,10 +600,12 @@  test diffstat for multiple patches:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 1 of 2] a
   X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 2
   Message-Id: <8580ff50825a50c8f716.61@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:01 +0000
@@ -615,10 +635,12 @@  test diffstat for multiple patches:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 2 of 2] b
   X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
+  X-Mercurial-Series-index: 2
+  X-Mercurial-Series-total: 2
   Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:02 +0000
@@ -653,10 +675,12 @@  test inline for single patch:
   displaying [PATCH] test ...
   Content-Type: multipart/mixed; boundary="===*" (glob)
   MIME-Version: 1.0
   Subject: [PATCH] test
   X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:00 +0000
   From: quux
   To: foo
@@ -693,10 +717,12 @@  test inline for single patch (quoted-pri
   displaying [PATCH] test ...
   Content-Type: multipart/mixed; boundary="===*" (glob)
   MIME-Version: 1.0
   Subject: [PATCH] test
   X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <a2ea8fc83dd8b93cfd86.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:00 +0000
   From: quux
   To: foo
@@ -765,10 +791,12 @@  test inline for multiple patches:
   displaying [PATCH 1 of 3] a ...
   Content-Type: multipart/mixed; boundary="===*" (glob)
   MIME-Version: 1.0
   Subject: [PATCH 1 of 3] a
   X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 3
   Message-Id: <8580ff50825a50c8f716.61@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:01 +0000
@@ -800,10 +828,12 @@  test inline for multiple patches:
   displaying [PATCH 2 of 3] b ...
   Content-Type: multipart/mixed; boundary="===*" (glob)
   MIME-Version: 1.0
   Subject: [PATCH 2 of 3] b
   X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
+  X-Mercurial-Series-index: 2
+  X-Mercurial-Series-total: 3
   Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:02 +0000
@@ -835,10 +865,12 @@  test inline for multiple patches:
   displaying [PATCH 3 of 3] long line ...
   Content-Type: multipart/mixed; boundary="===*" (glob)
   MIME-Version: 1.0
   Subject: [PATCH 3 of 3] long line
   X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
+  X-Mercurial-Series-index: 3
+  X-Mercurial-Series-total: 3
   Message-Id: <a2ea8fc83dd8b93cfd86.63@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:03 +0000
@@ -892,10 +924,12 @@  test attach for single patch:
   displaying [PATCH] test ...
   Content-Type: multipart/mixed; boundary="===*" (glob)
   MIME-Version: 1.0
   Subject: [PATCH] test
   X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:00 +0000
   From: quux
   To: foo
@@ -940,10 +974,12 @@  test attach for single patch (quoted-pri
   displaying [PATCH] test ...
   Content-Type: multipart/mixed; boundary="===*" (glob)
   MIME-Version: 1.0
   Subject: [PATCH] test
   X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <a2ea8fc83dd8b93cfd86.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:00 +0000
   From: quux
   To: foo
@@ -1004,10 +1040,12 @@  test attach and body for single patch:
   displaying [PATCH] test ...
   Content-Type: multipart/mixed; boundary="===*" (glob)
   MIME-Version: 1.0
   Subject: [PATCH] test
   X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:00 +0000
   From: quux
   To: foo
@@ -1079,10 +1117,12 @@  test attach for multiple patches:
   displaying [PATCH 1 of 3] a ...
   Content-Type: multipart/mixed; boundary="===*" (glob)
   MIME-Version: 1.0
   Subject: [PATCH 1 of 3] a
   X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 3
   Message-Id: <8580ff50825a50c8f716.61@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:01 +0000
@@ -1123,10 +1163,12 @@  test attach for multiple patches:
   displaying [PATCH 2 of 3] b ...
   Content-Type: multipart/mixed; boundary="===*" (glob)
   MIME-Version: 1.0
   Subject: [PATCH 2 of 3] b
   X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
+  X-Mercurial-Series-index: 2
+  X-Mercurial-Series-total: 3
   Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:02 +0000
@@ -1167,10 +1209,12 @@  test attach for multiple patches:
   displaying [PATCH 3 of 3] long line ...
   Content-Type: multipart/mixed; boundary="===*" (glob)
   MIME-Version: 1.0
   Subject: [PATCH 3 of 3] long line
   X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
+  X-Mercurial-Series-index: 3
+  X-Mercurial-Series-total: 3
   Message-Id: <a2ea8fc83dd8b93cfd86.63@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:03 +0000
@@ -1251,10 +1295,12 @@  test intro for single patch:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 1 of 1] c
   X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <ff2c9fa2018b15fa74b3.61@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:01 +0000
@@ -1302,10 +1348,12 @@  test --desc without --intro for a single
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 1 of 1] c
   X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <ff2c9fa2018b15fa74b3.61@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:01 +0000
@@ -1354,10 +1402,12 @@  test intro for multiple patches:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 1 of 2] a
   X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 2
   Message-Id: <8580ff50825a50c8f716.61@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:01 +0000
@@ -1383,10 +1433,12 @@  test intro for multiple patches:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 2 of 2] b
   X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
+  X-Mercurial-Series-index: 2
+  X-Mercurial-Series-total: 2
   Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:02 +0000
@@ -1419,10 +1471,12 @@  test reply-to via config:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH] test
   X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:00 +0000
   From: quux
   To: foo
@@ -1454,10 +1508,12 @@  test reply-to via command line:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH] test
   X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:00 +0000
   From: quux
   To: foo
@@ -1492,10 +1548,12 @@  test inline for single named patch:
   displaying [PATCH] test ...
   Content-Type: multipart/mixed; boundary="===*" (glob)
   MIME-Version: 1.0
   Subject: [PATCH] test
   X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:00 +0000
   From: quux
   To: foo
@@ -1547,10 +1605,12 @@  test inline for multiple named/unnamed p
   displaying [PATCH 1 of 2] a ...
   Content-Type: multipart/mixed; boundary="===*" (glob)
   MIME-Version: 1.0
   Subject: [PATCH 1 of 2] a
   X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 2
   Message-Id: <8580ff50825a50c8f716.61@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:01 +0000
@@ -1582,10 +1642,12 @@  test inline for multiple named/unnamed p
   displaying [PATCH 2 of 2] b ...
   Content-Type: multipart/mixed; boundary="===*" (glob)
   MIME-Version: 1.0
   Subject: [PATCH 2 of 2] b
   X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
+  X-Mercurial-Series-index: 2
+  X-Mercurial-Series-total: 2
   Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:02 +0000
@@ -1626,10 +1688,12 @@  test inreplyto:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH] Added tag two, two.diff for changeset ff2c9fa2018b
   X-Mercurial-Node: 7aead2484924c445ad8ce2613df91f52f9e502ed
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <7aead2484924c445ad8c.60@*> (glob)
   In-Reply-To: <baz>
   References: <baz>
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:00 +0000
@@ -1666,10 +1730,12 @@  no intro message in non-interactive mode
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 1 of 2] a
   X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 2
   Message-Id: <8580ff50825a50c8f716.60@*> (glob)
   In-Reply-To: <baz>
   References: <baz>
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:00 +0000
@@ -1695,10 +1761,12 @@  no intro message in non-interactive mode
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 2 of 2] b
   X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
+  X-Mercurial-Series-index: 2
+  X-Mercurial-Series-total: 2
   Message-Id: <97d72e5f12c7e84f8506.61@*> (glob)
   In-Reply-To: <baz>
   References: <baz>
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:01 +0000
@@ -1750,10 +1818,12 @@  no intro message in non-interactive mode
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 1 of 2] a
   X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 2
   Message-Id: <8580ff50825a50c8f716.61@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:01 +0000
@@ -1779,10 +1849,12 @@  no intro message in non-interactive mode
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 2 of 2] b
   X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
+  X-Mercurial-Series-index: 2
+  X-Mercurial-Series-total: 2
   Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:02 +0000
@@ -1817,10 +1889,12 @@  test single flag for single patch (and n
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH fooFlag] test
   X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:00 +0000
   From: quux
   To: foo
@@ -1868,10 +1942,12 @@  test single flag for multiple patches (a
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 1 of 2 fooFlag] a
   X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 2
   Message-Id: <8580ff50825a50c8f716.61@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:01 +0000
@@ -1897,10 +1973,12 @@  test single flag for multiple patches (a
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 2 of 2 fooFlag] b
   X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
+  X-Mercurial-Series-index: 2
+  X-Mercurial-Series-total: 2
   Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:02 +0000
@@ -1935,10 +2013,12 @@  test multiple flags for single patch:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH fooFlag barFlag] test
   X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <ff2c9fa2018b15fa74b3.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:00 +0000
   From: quux
   To: foo
@@ -1985,10 +2065,12 @@  test multiple flags for multiple patches
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 1 of 2 fooFlag barFlag] a
   X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 2
   Message-Id: <8580ff50825a50c8f716.61@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:01 +0000
@@ -2014,10 +2096,12 @@  test multiple flags for multiple patches
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 2 of 2 fooFlag barFlag] b
   X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
+  X-Mercurial-Series-index: 2
+  X-Mercurial-Series-total: 2
   Message-Id: <97d72e5f12c7e84f8506.62@*> (glob)
   In-Reply-To: <patchbomb.60@*> (glob)
   References: <patchbomb.60@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Thu, 01 Jan 1970 00:01:02 +0000
@@ -2053,10 +2137,12 @@  test multi-address parsing:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH] test
   X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <8580ff50825a50c8f716.315532860@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Tue, 01 Jan 1980 00:01:00 +0000
   From: quux
   To: spam <spam>, eggs, toast
@@ -2095,10 +2181,12 @@  test multi-byte domain parsing:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH] test
   X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <8580ff50825a50c8f716.315532860@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Tue, 01 Jan 1980 00:01:00 +0000
   From: quux
   To: bar@xn--nicode-2ya.com
@@ -2182,10 +2270,12 @@  test outgoing:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 1 of 6] c
   X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 6
   Message-Id: <ff2c9fa2018b15fa74b3.315532861@*> (glob)
   In-Reply-To: <patchbomb.315532860@*> (glob)
   References: <patchbomb.315532860@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Tue, 01 Jan 1980 00:01:01 +0000
@@ -2210,10 +2300,12 @@  test outgoing:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 8bit
   Subject: [PATCH 2 of 6] utf-8 content
   X-Mercurial-Node: 909a00e13e9d78b575aeee23dddbada46d5a143f
+  X-Mercurial-Series-index: 2
+  X-Mercurial-Series-total: 6
   Message-Id: <909a00e13e9d78b575ae.315532862@*> (glob)
   In-Reply-To: <patchbomb.315532860@*> (glob)
   References: <patchbomb.315532860@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Tue, 01 Jan 1980 00:01:02 +0000
@@ -2245,10 +2337,12 @@  test outgoing:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: quoted-printable
   Subject: [PATCH 3 of 6] long line
   X-Mercurial-Node: a2ea8fc83dd8b93cfd86ac97b28287204ab806e1
+  X-Mercurial-Series-index: 3
+  X-Mercurial-Series-total: 6
   Message-Id: <a2ea8fc83dd8b93cfd86.315532863@*> (glob)
   In-Reply-To: <patchbomb.315532860@*> (glob)
   References: <patchbomb.315532860@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Tue, 01 Jan 1980 00:01:03 +0000
@@ -2289,10 +2383,12 @@  test outgoing:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 8bit
   Subject: [PATCH 4 of 6] isolatin 8-bit encoding
   X-Mercurial-Node: 240fb913fc1b7ff15ddb9f33e73d82bf5277c720
+  X-Mercurial-Series-index: 4
+  X-Mercurial-Series-total: 6
   Message-Id: <240fb913fc1b7ff15ddb.315532864@*> (glob)
   In-Reply-To: <patchbomb.315532860@*> (glob)
   References: <patchbomb.315532860@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Tue, 01 Jan 1980 00:01:04 +0000
@@ -2317,10 +2413,12 @@  test outgoing:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 5 of 6] Added tag zero, zero.foo for changeset 8580ff50825a
   X-Mercurial-Node: 5d5ef15dfe5e7bd3a4ee154b5fff76c7945ec433
+  X-Mercurial-Series-index: 5
+  X-Mercurial-Series-total: 6
   Message-Id: <5d5ef15dfe5e7bd3a4ee.315532865@*> (glob)
   In-Reply-To: <patchbomb.315532860@*> (glob)
   References: <patchbomb.315532860@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Tue, 01 Jan 1980 00:01:05 +0000
@@ -2346,10 +2444,12 @@  test outgoing:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH 6 of 6] d
   X-Mercurial-Node: 2f9fa9b998c5fe3ac2bd9a2b14bfcbeecbc7c268
+  X-Mercurial-Series-index: 6
+  X-Mercurial-Series-total: 6
   Message-Id: <2f9fa9b998c5fe3ac2bd.315532866@*> (glob)
   In-Reply-To: <patchbomb.315532860@*> (glob)
   References: <patchbomb.315532860@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Tue, 01 Jan 1980 00:01:06 +0000
@@ -2384,10 +2484,12 @@  dest#branch URIs:
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
   Content-Transfer-Encoding: 7bit
   Subject: [PATCH] test
   X-Mercurial-Node: 2f9fa9b998c5fe3ac2bd9a2b14bfcbeecbc7c268
+  X-Mercurial-Series-index: 1
+  X-Mercurial-Series-total: 1
   Message-Id: <2f9fa9b998c5fe3ac2bd.315532860@*> (glob)
   User-Agent: Mercurial-patchbomb/* (glob)
   Date: Tue, 01 Jan 1980 00:01:00 +0000
   From: test
   To: foo