[Concept,27/32] patman: Update series description when adding a new version

Message ID 20260226200106.1727176-28-sjg@u-boot.org
State New
Headers
Series patman: Add multi-upstream support |

Commit Message

Simon Glass Feb. 26, 2026, 8 p.m. UTC
  From: Simon Glass <simon.glass@canonical.com>

When adding a new version to an existing series, the description
(cover letter subject) is not updated, so it gets stale if the title
changes between versions. Update it each time a new version is added.

Signed-off-by: Simon Glass <simon.glass@canonical.com>
---

 tools/patman/cser_helper.py |  4 ++--
 tools/patman/cseries.py     |  8 +++++---
 tools/patman/database.py    | 27 ++++++++++++++++++++-------
 3 files changed, 27 insertions(+), 12 deletions(-)
  

Patch

diff --git a/tools/patman/cser_helper.py b/tools/patman/cser_helper.py
index a60e02878a5..dd654738c06 100644
--- a/tools/patman/cser_helper.py
+++ b/tools/patman/cser_helper.py
@@ -1369,10 +1369,10 @@  class CseriesHelper:
                     updated += 1
         if cover:
             info = SerVer(svid, None, None, None, cover.id,
-                           cover.num_comments, cover.name, None)
+                           cover.num_comments, cover.name, None, None)
         else:
             info = SerVer(svid, None, None, None, None, None, patches[0].name,
-                           None)
+                           None, None)
         self.db.ser_ver_set_info(info)
 
         return updated, 1 if cover else 0
diff --git a/tools/patman/cseries.py b/tools/patman/cseries.py
index 47da57acc0f..0f1766f5539 100644
--- a/tools/patman/cseries.py
+++ b/tools/patman/cseries.py
@@ -84,11 +84,13 @@  class Cseries(cser_helper.CseriesHelper):
             series_id = self.db.series_add(ser.name, desc, ups=ups)
             added = True
             msg += f" series '{ser.name}'"
-        elif ups:
-            self.db.series_set_upstream(series_id, ups)
+        else:
+            if ups:
+                self.db.series_set_upstream(series_id, ups)
+            self.db.series_set_desc(series_id, desc)
 
         if version not in self._get_version_list(series_id):
-            svid = self.db.ser_ver_add(series_id, version, link)
+            svid = self.db.ser_ver_add(series_id, version, link, desc)
             msg += f" v{version}"
             if not added:
                 msg += f" to existing series '{ser.name}'"
diff --git a/tools/patman/database.py b/tools/patman/database.py
index a5952c6d2b6..e1ec0dc00e2 100644
--- a/tools/patman/database.py
+++ b/tools/patman/database.py
@@ -25,7 +25,7 @@  LATEST = 5
 SerVer = namedtuple(
     'SER_VER',
     'idnum,series_id,version,link,cover_id,cover_num_comments,name,'
-    'archive_tag')
+    'archive_tag,desc')
 
 # Record from the pcommit table:
 # idnum (int): record ID
@@ -493,6 +493,17 @@  class Database:  # pylint:disable=R0904
         self.execute(
             'UPDATE series SET name = ? WHERE id = ?', (name, series_idnum))
 
+    def series_set_desc(self, series_idnum, desc):
+        """Update description for a series
+
+        Args:
+            series_idnum (int): ID num of the series
+            desc (str): New description
+        """
+        self.execute(
+            'UPDATE series SET desc = ? WHERE id = ?',
+            (desc, series_idnum))
+
     def series_set_upstream(self, series_idnum, ups):
         """Update upstream for a series
 
@@ -617,7 +628,7 @@  class Database:  # pylint:disable=R0904
         if self.rowcount() != 1:
             raise ValueError(f'No ser_ver updated (svid {svid})')
 
-    def ser_ver_add(self, series_idnum, version, link=None):
+    def ser_ver_add(self, series_idnum, version, link=None, desc=None):
         """Add a new ser_ver record
 
         Args:
@@ -625,13 +636,15 @@  class Database:  # pylint:disable=R0904
                 version
             version (int): Version number to add
             link (str): Patchwork link, or None if not known
+            desc (str or None): Series description for this version
 
         Return:
             int: ID num of the new ser_ver record
         """
         self.execute(
-            'INSERT INTO ser_ver (series_id, version, link) VALUES (?, ?, ?)',
-            (series_idnum, version, link))
+            'INSERT INTO ser_ver (series_id, version, link, desc) '
+            'VALUES (?, ?, ?, ?)',
+            (series_idnum, version, link, desc))
         return self.lastrowid()
 
     def ser_ver_get_for_series(self, series_idnum, version=None):
@@ -648,8 +661,8 @@  class Database:  # pylint:disable=R0904
             ValueError: There is no matching idnum/version
         """
         base = ('SELECT id, series_id, version, link, cover_id, '
-                'cover_num_comments, name, archive_tag FROM ser_ver '
-                'WHERE series_id = ?')
+                'cover_num_comments, name, archive_tag, desc '
+                'FROM ser_ver WHERE series_id = ?')
         if version:
             res = self.execute(base + ' AND version = ?',
                                (series_idnum, version))
@@ -690,7 +703,7 @@  class Database:  # pylint:disable=R0904
         """
         res = self.execute(
             'SELECT id, series_id, version, link, cover_id, '
-            'cover_num_comments, name, archive_tag FROM ser_ver')
+            'cover_num_comments, name, archive_tag, desc FROM ser_ver')
         items = res.fetchall()
         return [SerVer(*x) for x in items]