[PATCH 10/10] parsemail: Add print messages to help debugging email parsing

Finucane, Stephen stephen.finucane at intel.com
Mon Jan 4 20:45:00 AEDT 2016


On 28 Nov 10:14, Mauro Carvalho Chehab wrote:
> When things are broken at parsemail, we need to be able to
> debug it. So, add some messages to it, in order to allow
> checking what it actually did, and to let it return 1 if
> an email got skipped by parsemail.
> 
> Signed-off-by: Mauro Carvalho Chehab <mchehab at osg.samsung.com>

Some minor changes below - mostly dropping duplicated stuff and using
logging instead of 'print'. If you're happy for me to fix, I can do
so.

Stephen

> ---
>  patchwork/bin/parsemail.py | 19 +++++++++++++++----
>  patchwork/bin/parsemail.sh |  2 +-
>  2 files changed, 16 insertions(+), 5 deletions(-)
> 
> diff --git a/patchwork/bin/parsemail.py b/patchwork/bin/parsemail.py
> index 5d6ddf45d264..71d284b273b0 100755
> --- a/patchwork/bin/parsemail.py
> +++ b/patchwork/bin/parsemail.py
> @@ -79,6 +79,9 @@ def find_project(mail):
>              except Project.DoesNotExist:
>                  pass
>  
> +    if project is None:
> +	project = Project.objects.get(listid = 'linux-media.vger.kernel.org')
> +

This is too specific to include - did you actually mean to include it?
BTW I'm open to ideas to provide a default project: the '--list-id'
parameter for this script (`./parsemail.py --help`) currently
overrides the search by header functionality - maybe this should change?

>      return project
>  
>  def find_author(mail):
> @@ -143,6 +146,9 @@ def find_pull_request(content):
>      match = git_re.search(content)
>      if match:
>          return match.group(1)
> +
> +    print "not a git pull request"
> +

This should be changed to LOG.debug (see below).

>      return None
>  
>  def try_decode(payload, charset):
> @@ -392,13 +398,16 @@ def parse_mail(mail):
>  
>      # some basic sanity checks
>      if 'From' not in mail:
> -        return 0
> +        print "From: is missing"
> +        return 1

I think this is a good idea. It's so good, in fact, that I did it
myself a few months back :) [1] There's some differences though
so the two efforts can be merged.

>  
>      if 'Subject' not in mail:
> -        return 0
> +        print "Subject: is missing"
> +        return 1
>  
>      if 'Message-Id' not in mail:
> -        return 0
> +        print "Message-Id: is missing"
> +        return 1
>  
>      hint = mail.get('X-Patchwork-Hint', '').lower()
>      if hint == 'ignore':
> @@ -407,7 +416,7 @@ def parse_mail(mail):
>      project = find_project(mail)
>      if project is None:
>          print "no project found"
> -        return 0
> +        return 1
>  
>      msgid = mail.get('Message-Id').strip()
>  
> @@ -431,6 +440,7 @@ def parse_mail(mail):
>          patch.delegate = delegate
>          try:
>              patch.save()
> +	    print "patch saved"
>          except Exception, ex:
>              print str(ex)
>  
> @@ -444,6 +454,7 @@ def parse_mail(mail):
>          comment.msgid = msgid
>          try:
>              comment.save()
> +	    print "comment saved"
>          except Exception, ex:
>              print str(ex)
>  
> diff --git a/patchwork/bin/parsemail.sh b/patchwork/bin/parsemail.sh
> index 9973392de9d4..c8220a799bba 100755
> --- a/patchwork/bin/parsemail.sh
> +++ b/patchwork/bin/parsemail.sh
> @@ -26,4 +26,4 @@ PYTHONPATH="$PATCHWORK_BASE":"$PATCHWORK_BASE/lib/python:$PYTHONPATH" \
>          DJANGO_SETTINGS_MODULE=patchwork.settings.production \
>          "$PATCHWORK_BASE/patchwork/bin/parsemail.py"
>  
> -exit 0
> +exit $@

Good idea - always wondered why we didn't make these exit codes mean
something.

> -- 
> 2.5.0

[1] https://github.com/getpatchwork/patchwork/commit/9a1802aa49299384e68d0fd2a3dd46c0885b29eb


More information about the Patchwork mailing list