return (subject, prefixes)
+def subject_check(subject):
+ """Determine if a mail is a reply."""
+ comment_re = re.compile(r'^(re)[:\s]\s*', re.I)
+
+ return comment_re.match(subject)
+
+
def clean_content(content):
"""Remove cruft from the email message.
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)
# 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()
# 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()
if not submission:
return
+ if is_comment and diff:
+ message += diff
+
author.save()
comment = Comment(
from patchwork.parser import parse_pull_request
from patchwork.parser import parse_series_marker
from patchwork.parser import split_prefixes
+from patchwork.parser import subject_check
from patchwork.tests.utils import create_project
from patchwork.tests.utils import create_state
from patchwork.tests.utils import create_user
('[bar] meep', ['bar']))
self.assertEqual(clean_subject('[FOO] [bar] meep', ['foo']),
('[bar] meep', ['bar']))
+
+ def test_subject_check(self):
+ self.assertIsNotNone(subject_check('RE: meep'))
+ self.assertIsNotNone(subject_check('Re: meep'))
+ self.assertIsNotNone(subject_check('re: meep'))
+ self.assertIsNotNone(subject_check('RE meep'))
+ self.assertIsNotNone(subject_check('Re meep'))
+ self.assertIsNotNone(subject_check('re meep'))