[Concept,12/37] patman: Use per-version description for autolink search

Message ID 20260404213020.372253-13-sjg@u-boot.org
State New
Headers
Series patman: Autolink fixes and AI-assisted patch review |

Commit Message

Simon Glass April 4, 2026, 9:28 p.m. UTC
  From: Simon Glass <sjg@chromium.org>

The series-level description can become stale when the patch order
changes between versions. Use the per-version description (stored in
ser_ver) when available, falling back to the series-level description.

Also set the per-version description during increment() and scan() so
it is available for future autolink searches.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 tools/patman/cseries.py | 34 +++++++++++++++++++++++++++++++---
 1 file changed, 31 insertions(+), 3 deletions(-)
  

Patch

diff --git a/tools/patman/cseries.py b/tools/patman/cseries.py
index e75e55c2764..5569eb6f4f5 100644
--- a/tools/patman/cseries.py
+++ b/tools/patman/cseries.py
@@ -191,7 +191,19 @@  class Cseries(cser_helper.CseriesHelper):
         old_svid = self.get_series_svid(ser.idnum, max_vers)
         pcd = self.get_pcommit_dict(old_svid)
 
-        svid = self.db.ser_ver_add(ser.idnum, vers)
+        # Set the per-version description from the cover letter or
+        # first commit subject, so autolink can find the series on
+        # patchwork even if the patch order changes
+        meta_name = new_name if not dry_run else branch_name
+        new_series = patchstream.get_metadata(meta_name, 0, count,
+                                              git_dir=self.gitdir)
+        if new_series.get('cover'):
+            sv_desc = new_series.cover[0]  # pylint: disable=E1136
+        elif new_series.commits:
+            sv_desc = new_series.commits[0].subject
+        else:
+            sv_desc = None
+        svid = self.db.ser_ver_add(ser.idnum, vers, desc=sv_desc)
         self.db.pcommit_add_list(svid, pcd.values())
         if not dry_run:
             self.commit()
@@ -260,13 +272,18 @@  class Cseries(cser_helper.CseriesHelper):
                 str: series description
         """
         _, ser, version, _, _, _, _, _ = self._get_patches(series, version)
+        svinfo = self.get_ser_ver(ser.idnum, version)
 
-        if not ser.desc:
+        # Use the per-version description if available, since the
+        # series-level desc may be stale (e.g. patch order changed)
+        desc = svinfo.desc or ser.desc
+        if not desc:
             raise ValueError(f"Series '{ser.name}' has an empty description")
+        ser.desc = desc
 
         pws, options = self.loop.run_until_complete(pwork.find_series(
             ser, version))
-        return pws, options, ser.name, version, ser.desc
+        return pws, options, ser.name, version, desc
 
     def link_auto(self, pwork, series, version, update_commit, wait_s=0):
         """Automatically find a series link by looking in patchwork
@@ -939,6 +956,17 @@  class Cseries(cser_helper.CseriesHelper):
             self.db.series_set_desc(ser.idnum, branch_desc)
             tout.notice(f"Updated description to '{branch_desc}'")
 
+        # Update per-version description from cover letter or first
+        # commit, so autolink uses the right search term
+        if ser.cover:
+            sv_desc = ser.cover[0]  # pylint: disable=E1136
+        elif ser.commits:
+            sv_desc = ser.commits[0].subject
+        else:
+            sv_desc = None
+        if sv_desc:
+            self.db.ser_ver_set_desc(svid, sv_desc)
+
         if not dry_run:
             self.commit()
             seq = len(ser.commits)