[PATCH V2] parser: fix wrong parsing of diff comments
Pingbo Wen
wengpingbo at gmail.com
Tue Sep 6 00:31:46 AEST 2016
From: WEN Pingbo <wengpingbo at gmail.com>
If the subject of a submission is prefixed by 'Re:', then it can't be a
patch or cover letter.
Signed-off-by: WEN Pingbo <wengpingbo at gmail.com>
---
patchwork/parser.py | 34 ++++++++++++++++++++++------------
1 file changed, 22 insertions(+), 12 deletions(-)
diff --git a/patchwork/parser.py b/patchwork/parser.py
index 1805df8..a4b20a8 100644
--- a/patchwork/parser.py
+++ b/patchwork/parser.py
@@ -303,6 +303,10 @@ def split_prefixes(prefix):
return [s for s in matches if s != '']
+def subject_check(subject):
+ comment_re = re.compile(r'^(re)[:\s]\s*', re.I)
+
+ return comment_re.match(subject)
def clean_subject(subject, drop_prefixes=None):
"""Clean a Subject: header from an incoming patch.
@@ -620,7 +624,9 @@ def parse_mail(mail, list_id=None):
msgid = mail.get('Message-Id').strip()
author = find_author(mail)
- name, prefixes = clean_subject(mail.get('Subject'), [project.linkname])
+ subject = mail.get('Subject')
+ name, prefixes = clean_subject(subject, [project.linkname])
+ is_comment = subject_check(subject)
x, n = parse_series_marker(prefixes)
refs = find_references(mail)
date = find_date(mail)
@@ -629,7 +635,7 @@ def parse_mail(mail, list_id=None):
# build objects
- if diff or pull_url: # patches or pull requests
+ if not is_comment and (diff or pull_url): # patches or pull requests
# we delay the saving until we know we have a patch.
author.save()
@@ -659,17 +665,18 @@ def parse_mail(mail, list_id=None):
# however, we need to see if a match already exists and, if
# not, assume that it is indeed a new cover letter
is_cover_letter = False
- if not refs == []:
- try:
- CoverLetter.objects.all().get(name=name)
- except CoverLetter.DoesNotExist:
- # if no match, this is a new cover letter
+ if not is_comment:
+ if not refs == []:
+ try:
+ CoverLetter.objects.all().get(name=name)
+ except CoverLetter.DoesNotExist:
+ # if no match, this is a new cover letter
+ is_cover_letter = True
+ except CoverLetter.MultipleObjectsReturned:
+ # if multiple cover letters are found, just ignore
+ pass
+ else:
is_cover_letter = True
- except CoverLetter.MultipleObjectsReturned:
- # if multiple cover letters are found, just ignore
- pass
- else:
- is_cover_letter = True
if is_cover_letter:
author.save()
@@ -694,6 +701,9 @@ def parse_mail(mail, list_id=None):
if not submission:
return
+ if is_comment and diff:
+ message += diff
+
author.save()
comment = Comment(
--
1.9.1
More information about the Patchwork
mailing list