]> git.ipfire.org Git - thirdparty/patchwork.git/commitdiff
parsemail: Parse series markers e.g. "1/12"
authorDamien Lespiau <damien.lespiau@intel.com>
Sat, 24 May 2014 17:49:39 +0000 (18:49 +0100)
committerStephen Finucane <stephen.finucane@intel.com>
Thu, 14 Apr 2016 16:29:05 +0000 (17:29 +0100)
This can be used to identify cover letters, patches part of series,
length of series, etc.

Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Stephen Finucane <stephen.finucane@intel.com>
patchwork/bin/parsemail.py
patchwork/tests/test_patchparser.py

index f405f6bb97a6e6ccd0eaa802391a9a2099669c60..3ade49e5fbc078e0a069d6f4ee95c2d984ed1f53 100755 (executable)
@@ -193,6 +193,29 @@ def try_decode(payload, charset):
     return payload
 
 
+def parse_series_marker(subject_prefixes):
+    """Extract series markers from subject.
+
+    Extract the markers of multi-patches series, i.e. 'x/n', from the
+    provided subject series.
+
+    Args:
+        subject_prefixes: List of subject prefixes to extract markers
+          from
+
+    Returns:
+        (x, n) if markers found, else (None, None)
+    """
+
+    regex = re.compile('^([0-9]+)/([0-9]+)$')
+    for prefix in subject_prefixes:
+        m = regex.match(prefix)
+        if not m:
+            continue
+        return (int(m.group(1)), int(m.group(2)))
+    return (None, None)
+
+
 def find_content(project, mail):
     patchbuf = None
     commentbuf = ''
index 06a2598bc2f9f07eaf0392d5ad2879461f0ff585..2bc54cb702cc5c2c4879c386e3a0c80bdae1d26f 100644 (file)
@@ -25,7 +25,8 @@ from django.test import TestCase
 
 from patchwork.bin.parsemail import (find_content, find_author,
                                      find_project_by_header, parse_mail,
-                                     split_prefixes, clean_subject)
+                                     split_prefixes, clean_subject,
+                                     parse_series_marker)
 from patchwork.models import (Project, Person, Patch, Comment, State,
                               get_default_initial_patch_state)
 from patchwork.tests.utils import (read_patch, read_mail, create_email,
@@ -644,6 +645,12 @@ class PrefixTest(TestCase):
         self.assertEqual(split_prefixes('PATCH,RFC'), ['PATCH', 'RFC'])
         self.assertEqual(split_prefixes('PATCH 1/2'), ['PATCH', '1/2'])
 
+    def testSeriesMarkers(self):
+        self.assertEqual(parse_series_marker([]), (None, None))
+        self.assertEqual(parse_series_marker(['bar']), (None, None))
+        self.assertEqual(parse_series_marker(['bar', '1/2']), (1, 2))
+        self.assertEqual(parse_series_marker(['bar', '0/12']), (0, 12))
+
 
 class SubjectTest(TestCase):