[PATCH 05/10] parsemail: Handle series sent "in-reply-to"
Andy Doan
andy.doan at linaro.org
Fri Jun 24 04:24:46 AEST 2016
On 06/13/2016 05:41 AM, Stephen Finucane wrote:
> Take a series, "v2", sent as a reply to another, "v1", like so:
>
> [PATCH 0/3] A cover letter
> [PATCH 1/3] The first patch
> ...
> [PATCH v2 0/3] A cover letter
> [PATCH v2 1/3] The first patch
> ...
>
> The current behavior for traversing references is oldest first. For
> example, for "PATCH v2 1/3" above, the references field will look like
> so:
>
> ["0/3", "v2 0/3", "v2 1/3"]
>
> Where "0/3" corresponds to the message-id of "PATCH 0/3".
>
> By traversing this way, patches sent in-reply-to an existing series
> will always be linked to that series, instead of creating a new series,
> as expected. Flip things around, and instead attempt to find series
> using the most recent message-id first. This will ensure the most
> recent series is always used.
>
> Signed-off-by: Stephen Finucane <stephen.finucane at intel.com>
> ---
> patchwork/bin/parsemail.py | 10 +++++++++-
> 1 files changed, 9 insertions(+), 1 deletions(-)
>
> diff --git a/patchwork/bin/parsemail.py b/patchwork/bin/parsemail.py
> index f52776e..8baacf6 100755
> --- a/patchwork/bin/parsemail.py
> +++ b/patchwork/bin/parsemail.py
> @@ -137,7 +137,7 @@ def find_series(mail):
> """
> series = None
>
> - for ref in find_references(mail) + [mail.get('Message-ID').strip()]:
> + for ref in [mail.get('Message-ID').strip()] + find_references(mail)[::-1]:
> # try parsing by RFC5322 fields first
> try:
> series_ref = SeriesReference.objects.get(msgid=ref)
> @@ -575,6 +575,10 @@ def parse_mail(mail, list_id=None):
> series.save()
>
> for ref in refs + [msgid]: # save references for series
I think this can be simplified and perhaps be less racy:
> + # prevent duplication
> + if SeriesReference.objects.filter(msgid=ref).exists():
> + continue
> +
> series_ref = SeriesReference(series=series,
> msgid=ref)
> series_ref.save()
try:
SeriesReference.objects.create(series=series, msgid=ref)
except IntegrityError:
pass # already exists
> @@ -621,6 +625,10 @@ def parse_mail(mail, list_id=None):
> series.save()
>
> for ref in refs + [msgid]: # save references for series
> + # prevent duplication
> + if SeriesReference.objects.filter(msgid=ref).exists():
> + continue
> +
> series_ref = SeriesReference(series=series,
> msgid=ref)
> series_ref.save()
>
More information about the Patchwork
mailing list