Skip to content

Commit d6ee204

Browse files
committed
parser: Don't group patches with different versions in a series
As noted in #340 [1], if a patch from a series is dropped or miscategorised, patches from a later revision of that series can end up included in the earlier series rather than in their own series. This was actually intentional as part of the fix for #105 [2]. However, completely ignoring this information can be problematic. Refine things by checking for versions and, if they don't match, using timeboxing to try guess if they should be kept together. This would resolve the issue seen in #340 while preventing a regression for #105. [1] #340 [1] #105 Signed-off-by: Stephen Finucane <stephen@that.guru> Tested-by: Ali Alnubani <alialnu@mellanox.com> Related: #340 Related: #105
1 parent b8a1673 commit d6ee204

File tree

4 files changed

+150
-0
lines changed

4 files changed

+150
-0
lines changed

patchwork/parser.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,14 +250,32 @@ def _find_series_by_references(project, mail):
250250
Returns:
251251
The matching ``Series`` instance, if any
252252
"""
253+
subject = mail.get('Subject')
254+
name, prefixes = clean_subject(subject, [project.linkname])
255+
version = parse_version(name, prefixes)
256+
253257
refs = find_references(mail)
254258
h = clean_header(mail.get('Message-Id'))
255259
if h:
256260
refs = [h] + refs
261+
257262
for ref in refs:
258263
try:
259264
series = SeriesReference.objects.get(
260265
msgid=ref[:255], project=project).series
266+
267+
if series.version != version:
268+
# if the versions don't match, at least make sure these were
269+
# sent around the same time
270+
date = find_date(mail)
271+
delta = datetime.timedelta(minutes=SERIES_DELAY_INTERVAL)
272+
start_date = date - delta
273+
end_date = date + delta
274+
275+
# ...and if they don't, this probably isn't our series
276+
if start_date > series.date > end_date:
277+
continue
278+
261279
# we want to return a queryset like '_find_series_by_markers'
262280
return Series.objects.filter(id=series.id)
263281
except SeriesReference.DoesNotExist:
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
From stephenfinucane@gmail.com Sun Sep 11 23:22:13 2016
2+
Return-Path: <stephenfinucane@gmail.com>
3+
From: Stephen Finucane <stephenfinucane@gmail.com>
4+
To: stephenfinucane@hotmail.com
5+
Subject: [PATCH 1/2] test: Add some lorem ipsum
6+
Date: Sun, 11 Sep 2016 23:22:03 +0100
7+
Message-ID: <1473632524-8585-2-git-send-email-stephenfinucane@gmail.com>
8+
X-Mailer: git-send-email 2.7.4
9+
MIME-Version: 1.0
10+
Content-Type: text/plain
11+
Content-Length: 670
12+
Lines: 22
13+
14+
From: Stephen Finucane <stephenfinucane@hotmail.com>
15+
16+
---
17+
test.txt | 7 +++++++
18+
1 file changed, 7 insertions(+)
19+
20+
diff --git a/test.txt b/test.txt
21+
index f75ba05..a6c61c0 100644
22+
--- a/test.txt
23+
+++ b/test.txt
24+
@@ -1 +1,8 @@
25+
Hello, world.
26+
+
27+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras eget eleifend
28+
+augue. Nullam at metus venenatis, laoreet neque nec, convallis mauris.
29+
+Pellentesque aliquam at nisi et laoreet. Duis non nisl venenatis, rhoncus risus
30+
+id, elementum felis. In hac habitasse platea dictumst. Nam sit amet maximus
31+
+eros. Nam quis ligula ut tortor egestas bibendum. Nunc sed purus sit amet
32+
+tellus commodo bibendum ut vel dolor.
33+
--
34+
2.7.4
35+
36+
37+
From stephenfinucane@gmail.com Sun Sep 18 23:31:07 2016
38+
Return-Path: <stephenfinucane@gmail.com>
39+
From: Stephen Finucane <stephenfinucane@gmail.com>
40+
To: stephenfinucane@hotmail.com
41+
Subject: [PATCH v2 2/2] test: Convert to Markdown
42+
Date: Sun, 18 Sep 2016 23:30:55 +0100
43+
Message-ID: <1473633055-10316-3-git-send-email-stephenfinucane@gmail.com>
44+
X-Mailer: git-send-email 2.7.4
45+
In-Reply-To: <1473633055-10316-2-git-send-email-stephenfinucane@gmail.com>
46+
References: <1473633055-10316-2-git-send-email-stephenfinucane@gmail.com>
47+
MIME-Version: 1.0
48+
Content-Type: text/plain
49+
Content-Length: 2589
50+
Lines: 58
51+
52+
From: Stephen Finucane <stephenfinucane@hotmail.com>
53+
54+
---
55+
test.md | 17 +++++++++++++++++
56+
test.txt | 17 -----------------
57+
2 files changed, 17 insertions(+), 17 deletions(-)
58+
create mode 100644 test.md
59+
delete mode 100644 test.txt
60+
61+
diff --git a/test.md b/test.md
62+
new file mode 100644
63+
index 0000000..201bfe7
64+
--- /dev/null
65+
+++ b/test.md
66+
@@ -0,0 +1,17 @@
67+
+# Hello, world
68+
+
69+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras eget eleifend
70+
+augue. Nullam at metus venenatis, laoreet neque nec, convallis mauris.
71+
+Pellentesque aliquam at nisi et laoreet. Duis non nisl venenatis, rhoncus risus
72+
+id, elementum felis. In hac habitasse platea dictumst. Nam sit amet maximus
73+
+eros. Nam quis ligula ut tortor egestas bibendum. Nunc sed purus sit amet
74+
+tellus commodo bibendum ut vel dolor.
75+
+
76+
+Curabitur scelerisque tempus efficitur. Maecenas aliquet elementum quam, ac
77+
+pharetra nisi gravida a. Nam vitae malesuada leo. Nam accumsan facilisis metus
78+
+sed vulputate. Ut libero odio, tempor ac posuere vel, malesuada quis ex. Donec
79+
+interdum ipsum et nibh molestie auctor eget in neque. Sed nec hendrerit enim.
80+
+Etiam scelerisque non magna eu molestie. Maecenas dui quam, tempor quis ipsum
81+
+eu, dapibus congue dui. Integer tincidunt accumsan tortor sed maximus. Praesent
82+
+eu magna accumsan, consequat turpis quis, fringilla ante. Vestibulum nec
83+
+maximus nulla. Donec vehicula nisl at pharetra eleifend.
84+
diff --git a/test.txt b/test.txt
85+
deleted file mode 100644
86+
index 4478ac2..0000000
87+
--- a/test.txt
88+
+++ /dev/null
89+
@@ -1,17 +0,0 @@
90+
-Hello, world.
91+
-
92+
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras eget eleifend
93+
-augue. Nullam at metus venenatis, laoreet neque nec, convallis mauris.
94+
-Pellentesque aliquam at nisi et laoreet. Duis non nisl venenatis, rhoncus risus
95+
-id, elementum felis. In hac habitasse platea dictumst. Nam sit amet maximus
96+
-eros. Nam quis ligula ut tortor egestas bibendum. Nunc sed purus sit amet
97+
-tellus commodo bibendum ut vel dolor.
98+
-
99+
-Curabitur scelerisque tempus efficitur. Maecenas aliquet elementum quam, ac
100+
-pharetra nisi gravida a. Nam vitae malesuada leo. Nam accumsan facilisis metus
101+
-sed vulputate. Ut libero odio, tempor ac posuere vel, malesuada quis ex. Donec
102+
-interdum ipsum et nibh molestie auctor eget in neque. Sed nec hendrerit enim.
103+
-Etiam scelerisque non magna eu molestie. Maecenas dui quam, tempor quis ipsum
104+
-eu, dapibus congue dui. Integer tincidunt accumsan tortor sed maximus. Praesent
105+
-eu magna accumsan, consequat turpis quis, fringilla ante. Vestibulum nec
106+
-maximus nulla. Donec vehicula nisl at pharetra eleifend.
107+
--
108+
2.7.4
109+
110+

patchwork/tests/test_series.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,23 @@ def test_spamming(self):
538538

539539
self.assertSerialized(patches, [1, 1, 1])
540540

541+
def test_mixed_versions(self):
542+
"""Series with a revision sent in reply to an incompleted series.
543+
544+
Parse a series with two patches, one of which has been lost or
545+
miscategorized, followed by a second revision of the missing patch.
546+
None of the patches of the second revision should be included in the
547+
first revision.
548+
549+
- [PATCH 1/2] test: Add some lorem ipsum
550+
- [PATCH v2 2/2] test: Convert to Markdown
551+
"""
552+
_, patches, _ = self._parse_mbox(
553+
'bugs-mixed-versions.mbox', [0, 2, 0],
554+
)
555+
556+
self.assertSerialized(patches, [1, 1])
557+
541558

542559
class SeriesTotalTest(_BaseTestCase):
543560

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
fixes:
3+
- |
4+
A bug that would result in patches from later series revisions being
5+
included in earlier revisions has been resolved.

0 commit comments

Comments
 (0)