]> git.ozlabs.org Git - patchwork/blobdiff - apps/patchwork/bin/parsemail.py
Move patchparser to patchwork.parser
[patchwork] / apps / patchwork / bin / parsemail.py
index d41bd92b04048bd0d2db2da2adb2629f5a50712a..15b62d22f70008ae9da1f14eee010b5c42dd6877 100755 (executable)
@@ -25,10 +25,15 @@ import datetime
 import time
 import operator
 from email import message_from_file
-from email.header import Header
-from email.utils import parsedate_tz, mktime_tz
-
-from patchparser import parse_patch
+try:
+    from email.header import Header
+    from email.utils import parsedate_tz, mktime_tz
+except ImportError:
+    # Python 2.4 compatibility
+    from email.Header import Header
+    from email.Utils import parsedate_tz, mktime_tz
+
+from patchwork.parser import parse_patch
 from patchwork.models import Patch, Project, Person, Comment
 
 list_id_headers = ['List-ID', 'X-Mailing-List']
@@ -85,12 +90,15 @@ def find_author(mail):
     if name is not None:
         name = name.strip()
 
+    new_person = False
+
     try:
         person = Person.objects.get(email = email)
     except Person.DoesNotExist:
         person = Person(name = name, email = email)
+        new_person = True
 
-    return person
+    return (person, new_person)
 
 def mail_date(mail):
     t = parsedate_tz(mail.get('Date', ''))
@@ -147,8 +155,8 @@ def find_content(project, mail):
 
     if commentbuf:
         if patch:
-           cpatch = patch
-       else:
+            cpatch = patch
+        else:
             cpatch = find_patch_for_comment(mail)
             if not cpatch:
                 return (None, None)
@@ -230,22 +238,26 @@ def main(args):
 
     msgid = mail.get('Message-Id').strip()
 
-    author = find_author(mail)
+    (author, save_required) = find_author(mail)
 
     (patch, comment) = find_content(project, mail)
 
     if patch:
-        author.save()
+        # we delay the saving until we know we have a patch.
+        if save_required:
+            author.save()
+            save_required = False
         patch.submitter = author
         patch.msgid = msgid
         patch.project = project
         try:
             patch.save()
         except Exception, ex:
-            print ex.message
+            print str(ex)
 
     if comment:
-        author.save()
+        if save_required:
+            author.save()
         # looks like the original constructor for Comment takes the pk
         # when the Comment is created. reset it here.
         if patch:
@@ -255,7 +267,7 @@ def main(args):
         try:
             comment.save()
         except Exception, ex:
-            print ex.message
+            print str(ex)
 
     return 0