@@ -496,22 +496,36 @@ def parse_mail(mail, list_id=None):
LOGGER.debug('Patch saved')
return patch
- elif refs == [] and x == 0: # cover letters
+ elif x == 0: # (potential) cover letters
if save_required:
author.save()
- cover_letter = CoverLetter(
- msgid=msgid,
- project=project,
- name=name,
- date=date,
- headers=headers,
- submitter=author,
- content=message)
- cover_letter.save()
- LOGGER.debug('Cover letter saved')
-
- return cover_letter
+ # if refs are empty, it's implicitly a cover letter. If not,
+ # 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: # no match => new cover
+ is_cover_letter = True
+ else:
+ is_cover_letter = True
+
+
+ if is_cover_letter:
+ cover_letter = CoverLetter(
+ msgid=msgid,
+ project=project,
+ name=name,
+ date=date,
+ headers=headers,
+ submitter=author,
+ content=message)
+ cover_letter.save()
+ LOGGER.debug('Cover letter saved')
+
+ return cover_letter
# comments
@@ -525,7 +539,7 @@ def parse_mail(mail, list_id=None):
author.save()
comment = Comment(
- submission=patch,
+ submission=submission,
msgid=msgid,
date=date,
headers=headers,
Some people send cover letters (and therefore series) as replies to existing series. Apply a second set of heuristics to cover this case: * The message contains a '[0/n]' marker tag in the subject * The message is not the root message, but the subject is unique, i.e. it is not a reply to a cover letter already stored in Patchwork It is theoretically possible that the message could be a reply to a cover letter that's been missed, but such occurences should be rare and only get rarer the longer an instance is running. Note that there is a third case which is not yet covered: a cover letter with the same name but a different number of patches. This will have to wait until series support is fully inplemented. Signed-off-by: Stephen Finucane <stephen.finucane@intel.com> --- patchwork/bin/parsemail.py | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-)