Getting errors with Series support
Stephen Finucane
stephen at that.guru
Wed Nov 16 23:06:26 AEDT 2016
On 2016-11-16 07:00, Daniel Axtens wrote:
> Hi,
>
>> In terms of your errors:
>>> (1062, "Duplicate entry '143-5' for key
>>> 'patchwork_seriespatch_series_id_1fc2c47f3eb85695_uniq'")
>>
>> OK, so this is hitting our unique_together contstraint ('series',
>> 'patch'): somehow we're trying to add another entry for the same
>> series
>> and the same patch. I wonder why this has not triggered duplicate
>> detection at an earlier stage? Let me look into this more and get back
>> to you.
>>
>
> Ah, I'm wrong - this could be hitting either the ('series', 'patch')
> constraint - which has duplicate detection - or the ('series',
> 'number')
> constraint - which does not have duplicate detection. I will send
> another patch which fixes this (but probably not until tomorrow).
>
> Feel free to not send the error logs at this point :)
Thanks for the patch, Daniel - I'll get that reviewed and applied this
weekend.
From what I can tell, there are two issues happening here, plus a third
that we should fix. First, there's a patch being sent with a malformed
version header in-reply-to an existing series. This looks something like
this:
[PATCH v2 1/2] My first patch
[PATCH v2 2/2] My second patch
[PATCH v2.1] My second patch
IMO, this is missing a number and we don't support series linking yet,
so we should not add this to any series. The aforementioned patch should
fix this.
Secondly, we're not handling series revisions correctly when sent
without a cover letter in-reply-to an existing series. Take something
like this:
[PATCH 1/2] My first patch
[PATCH 2/2] My second patch
[PATCH v2 1/2] My first patch
[PATCH v2 2/2] My second patch
When we receive these new patches, we'll traverse the references to find
a stored SeriesReference objects [1]. This will match on a reference for
the original patches and return the original series' Series object.
Since this is actually a new series, the attempt to assign the revised
patches to the original series hits the ('series', 'number') check and
fails (note that this doesn't happen for series revisions sent *with* a
cover letter because we don't traverse references for cover letters
[2]). The easiest fix here would be to check the version of the Series
returned by find_series. If it doesn't match, create a new series and
store any new references against this new series, preventing further
issues.
There's an issue we haven't seen yet but, as a variation of the above,
is one likely to rear its malformed head sooner rather than later. Take
the following series:
[PATCH 1/2] My first patch
[PATCH 2/2] My second patch
[PATCH 1/2] My first patch
[PATCH 2/2] My second patch
The user has forgotten to add a version but has sent the message
in-reply-to an existing series. The version check I suggested using
above wouldn't work as the versions are "the same". I've no idea how we
can solve this right now, I'm afraid, but I'd welcome some ideas.
Stephen
[1]
https://github.com/getpatchwork/patchwork/blob/c3137fe/patchwork/parser.py#L203-L208
[2]
https://github.com/getpatchwork/patchwork/blob/c3137fe/patchwork/parser.py#L848-L851
More information about the Patchwork
mailing list