[Concept,12/32] patman: Wire up per-upstream patchwork project in commands

Message ID 20260226200106.1727176-13-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>

Add -u/--upstream-name to set-project and get-project so the user can
specify which upstream a project belongs to.

In do_series(), look up the series' upstream and use it to find the
matching patchwork project, falling back to any configured project if
there is no upstream-specific one.

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

 tools/patman/cmdline.py |  8 +++++++-
 tools/patman/control.py | 26 +++++++++++++++++++-------
 2 files changed, 26 insertions(+), 8 deletions(-)
  

Patch

diff --git a/tools/patman/cmdline.py b/tools/patman/cmdline.py
index 65b9dfab4bb..74571fd7220 100644
--- a/tools/patman/cmdline.py
+++ b/tools/patman/cmdline.py
@@ -159,10 +159,16 @@  def add_patchwork_subparser(subparsers):
         ['set-project', 'U-Boot'],
     ]
     patchwork_subparsers = patchwork.add_subparsers(dest='subcmd')
-    patchwork_subparsers.add_parser('get-project')
+    gproj = patchwork_subparsers.add_parser('get-project')
+    gproj.add_argument(
+        '-u', '--upstream-name',
+        help='Upstream to get the project for')
     uset = patchwork_subparsers.add_parser('set-project')
     uset.add_argument(
         'project_name', help="Patchwork project name, e.g. 'U-Boot'")
+    uset.add_argument(
+        '-u', '--upstream-name',
+        help='Upstream to associate this project with')
     return patchwork
 
 
diff --git a/tools/patman/control.py b/tools/patman/control.py
index 1a65dfc2cc6..191cfc134d3 100644
--- a/tools/patman/control.py
+++ b/tools/patman/control.py
@@ -135,11 +135,15 @@  def do_series(args, test_db=None, pwork=None, cser=None):
         if args.subcmd in needs_patchwork:
             if not pwork:
                 pwork = Patchwork(args.patchwork_url)
-                proj = cser.project_get()
+                ups = cser.get_series_upstream(args.series)
+                proj = cser.project_get(ups)
+                if not proj:
+                    proj = cser.project_get()
                 if not proj:
                     raise ValueError(
-                        "Please set project ID with 'patman patchwork set-project'")
-                _, proj_id, link_name = cser.project_get()
+                        "Please set project ID with "
+                        "'patman patchwork set-project'")
+                _, proj_id, link_name = proj
                 pwork.project_set(proj_id, link_name)
         elif pwork and pwork is not True:
             raise ValueError(
@@ -270,13 +274,21 @@  def patchwork(args, test_db=None, pwork=None):
         if args.subcmd == 'set-project':
             if not pwork:
                 pwork = Patchwork(args.patchwork_url)
-            cser.project_set(pwork, args.project_name)
+            cser.project_set(pwork, args.project_name,
+                             ups=args.upstream_name)
         elif args.subcmd == 'get-project':
-            info = cser.project_get()
+            ups = args.upstream_name
+            info = cser.project_get(ups)
             if not info:
-                raise ValueError("Project has not been set; use 'patman patchwork set-project'")
+                raise ValueError(
+                    "Project has not been set; use "
+                    "'patman patchwork set-project'")
             name, pwid, link_name = info
-            print(f"Project '{name}' patchwork-ID {pwid} link-name '{link_name}'")
+            msg = (f"Project '{name}' patchwork-ID {pwid} "
+                   f"link-name '{link_name}'")
+            if ups:
+                msg += f" upstream '{ups}'"
+            print(msg)
         else:
             raise ValueError(f"Unknown patchwork subcommand '{args.subcmd}'")
     finally: