diff mbox

[v2,11/11] parsemail: Always update Person.email

Message ID 1459522667-17192-12-git-send-email-stephen.finucane@intel.com
State Superseded
Headers show

Commit Message

Stephen Finucane April 1, 2016, 2:57 p.m. UTC
Patches applied using pwclient will always use the first name that has
been seen for a particular email address. While this is usually fine,
ot actually causes issues for people changing name without changing
email addresses or people changing the capitalization of their name.
Resolve this by always updating the Person object when we receive a
new submission or comment.

Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
Closes: #24
---
 patchwork/bin/parsemail.py | 20 ++++++++------------
 1 file changed, 8 insertions(+), 12 deletions(-)

Comments

Andy Doan April 8, 2016, 6:07 p.m. UTC | #1
On 04/01/2016 09:57 AM, Stephen Finucane wrote:
> Patches applied using pwclient will always use the first name that has
> been seen for a particular email address. While this is usually fine,
> ot actually causes issues for people changing name without changing
> email addresses or people changing the capitalization of their name.
> Resolve this by always updating the Person object when we receive a
> new submission or comment.
>
> Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
> Closes: #24

Reviewed-by: Andy Doan <andy.doan@linaro.org>

>       refs = find_references(mail)
> @@ -489,8 +489,7 @@ def parse_mail(mail, list_id=None):
>
>       if diff or pull_url:  # patches or pull requests
>           # we delay the saving until we know we have a patch.
> -        if save_required:
> -            author.save()
> +        author.save()
>
>           delegate = find_delegate(mail)
>           if not delegate and diff:
> @@ -527,8 +526,7 @@ def parse_mail(mail, list_id=None):
>               is_cover_letter = True
>
>           if is_cover_letter:
> -            if save_required:
> -                author.save()
> +            author.save()
>
>               cover_letter = CoverLetter(
>                   msgid=msgid,
> @@ -550,9 +548,7 @@ def parse_mail(mail, list_id=None):
>       if not submission:
>           return
>
> -    # ...and we only save the author if we're saving the comment
> -    if save_required:
> -        author.save()
> +    author.save()
>
>       comment = Comment(
>           submission=submission,
>

Having to repeat author.save() multiple place is brittle. However, I'm 
guessing this can probably addressed separately by cleaning up this 
function a tad.
diff mbox

Patch

diff --git a/patchwork/bin/parsemail.py b/patchwork/bin/parsemail.py
index 7280b89..08bb34f 100755
--- a/patchwork/bin/parsemail.py
+++ b/patchwork/bin/parsemail.py
@@ -117,7 +117,7 @@  def find_project_by_header(mail):
 def find_author(mail):
 
     from_header = clean_header(mail.get('From'))
-    (name, email) = (None, None)
+    name, email = (None, None)
 
     # tuple of (regex, fn)
     #  - where fn returns a (name, email) tuple from the match groups resulting
@@ -150,14 +150,14 @@  def find_author(mail):
     if name is not None:
         name = name.strip()
 
-    save_required = False
     try:
         person = Person.objects.get(email__iexact=email)
+        if name:  # use the latest provided name
+            person.name = name
     except Person.DoesNotExist:
         person = Person(name=name, email=email)
-        save_required = True
 
-    return person, save_required
+    return person
 
 
 def find_date(mail):
@@ -477,7 +477,7 @@  def parse_mail(mail, list_id=None):
         return  # nothing to work with
 
     msgid = mail.get('Message-Id').strip()
-    author, save_required = find_author(mail)
+    author = find_author(mail)
     name, prefixes = clean_subject(mail.get('Subject'), [project.linkname])
     x, n = parse_series_marker(prefixes)
     refs = find_references(mail)
@@ -489,8 +489,7 @@  def parse_mail(mail, list_id=None):
 
     if diff or pull_url:  # patches or pull requests
         # we delay the saving until we know we have a patch.
-        if save_required:
-            author.save()
+        author.save()
 
         delegate = find_delegate(mail)
         if not delegate and diff:
@@ -527,8 +526,7 @@  def parse_mail(mail, list_id=None):
             is_cover_letter = True
 
         if is_cover_letter:
-            if save_required:
-                author.save()
+            author.save()
 
             cover_letter = CoverLetter(
                 msgid=msgid,
@@ -550,9 +548,7 @@  def parse_mail(mail, list_id=None):
     if not submission:
         return
 
-    # ...and we only save the author if we're saving the comment
-    if save_required:
-        author.save()
+    author.save()
 
     comment = Comment(
         submission=submission,