[yocto] [patchwork][PATCH] parsemail: keep branch name in subject for series

Jose Lamego jose.a.lamego at linux.intel.com
Wed Sep 6 08:31:55 PDT 2017


patches with different branch names included in their name are
wrongly appended as succesive revisions of the same patch in a
series. This is due to the patches being assigned to the same
series after their prefixes got removed during series naming/search.

This change looks for an updated release name list from the Yocto
wiki and keeps the release name in the series naming/search,
effectively creating individual series for patches targeted to
diferent releases.

[YOCTO #10716]

Signed-off-by: Jose Lamego <jose.a.lamego at linux.intel.com>
---
 patchwork/bin/parsemail.py | 28 ++++++++++++++++++++++++++++
 patchwork/models.py        |  5 ++++-
 2 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/patchwork/bin/parsemail.py b/patchwork/bin/parsemail.py
index 1d27f24..ed081b5 100755
--- a/patchwork/bin/parsemail.py
+++ b/patchwork/bin/parsemail.py
@@ -678,6 +678,34 @@ prefixes_re = re.compile(r'^\[[^\]]*\]\s*')
 
 
 def strip_prefixes(subject):
+    # get last releases names from Yocto wiki page to keep them
+    # as part of the series name if present, since such patches
+    # are branch-specific
+    try:
+        from lxml import html
+        import requests
+
+        page = requests.get(
+            'https://wiki.yoctoproject.org/wiki/Stable_branch_maintenance')
+        tree = html.fromstring(page.content)
+        branches = tree.xpath('//table[@class="wikitable"]//td[count(\
+//th[contains(., "Branch name")]/preceding-sibling::th)+1]//text()')
+        # uncomment the following line to keep only last two branch names
+        # branches=branches[0:2]
+        branches[:] = [branch.replace('\n', '') for branch in branches]
+        subject = re.sub((r',?\d+/\d+\]'), ']', subject)
+        for branch in branches:
+            if "[" + branch + "]" in subject:
+                prefixes_re = re.compile(r'^\s*\[[^\]]*\]\s*')
+                branch_re = r"(?<=\[" + branch + "\])\s*(.*)"
+                branch_search = re.search(branch_re, subject)
+                if branch_search:
+                    return "[" + branch + "] " + prefixes_re.sub(
+                        '', branch_search.group(0))
+    except ImportError:
+        pass
+
+    prefixes_re = re.compile(r'^\[[^\]]*\]\s*')
     return prefixes_re.sub('', subject)
 
 
diff --git a/patchwork/models.py b/patchwork/models.py
index 7dd8120..d08e189 100644
--- a/patchwork/models.py
+++ b/patchwork/models.py
@@ -1047,13 +1047,16 @@ def _on_revision_complete(sender, revision, **kwargs):
     if series.name == SERIES_DEFAULT_NAME:
         name = series.latest_revision().ordered_patches()[0].name
         n = re.compile(r'((\[.*\]\s?)*\[.*\w+.*'
-                       '(?P<comb_pref>\W+\d+\/\d+)+\s*\]\s?)'
+                       '(?P<comb_pref>(\[|,)+\d+\/\d+\s*)\]\s?)'
                        '|(?P<ind_pref>\[\d+\/\d+\]\s?)')
         if n.match(name):
             name = re.sub(
                 n.match(name).group("comb_pref") or
                 re.escape(n.match(name).group("ind_pref")),
                 '', name)
+        re.sub(r'\[\]', '', name)
+        re.sub(r'\[\[+', '\[', name)
+        re.sub(r'\]\]+', '\]', name)
         c = len(series.latest_revision().ordered_patches())
         # For one-patch series (1/1) without cover letter
         if c == 1:
-- 
2.7.4




More information about the yocto mailing list