[Concept,15/29] patman: Record workflow entry when reviewing a series

Message ID 20260501110040.1874719-16-sjg@u-boot.org
State New
Headers
Series patman: Review-flow improvements and shared helpers |

Commit Message

Simon Glass May 1, 2026, 11 a.m. UTC
  From: Simon Glass <sjg@chromium.org>

After completing a review, add a 'reviewed' workflow entry and a
follow-up todo for 7 days later. This makes reviews visible in
'patman wf ls' alongside sent series, so the user can track which
series need follow-up.

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

 tools/patman/review.py   |  2 ++
 tools/patman/workflow.py | 19 +++++++++++++++++++
 2 files changed, 21 insertions(+)
  

Patch

diff --git a/tools/patman/review.py b/tools/patman/review.py
index a850ec180df..92fbcfa8a2d 100644
--- a/tools/patman/review.py
+++ b/tools/patman/review.py
@@ -32,6 +32,7 @@  from u_boot_pylib import tout
 from patman import database
 from patman import gmail
 from patman import patchstream
+from patman import workflow
 
 try:
     from claude_agent_sdk import ClaudeAgentOptions
@@ -1821,6 +1822,7 @@  def do_review(args, pwork, cser):
         ctx.comments_path = _write_comments_file(series_data, pwork)
 
         _run_and_store_reviews(ctx, args)
+        workflow.reviewed(cser, ctx.series_id, ctx.svid)
 
         _git_restore(orig_branch, had_stash, ctx.repo_path)
         orig_branch = None
diff --git a/tools/patman/workflow.py b/tools/patman/workflow.py
index 299686e3269..97e3b1bbafc 100644
--- a/tools/patman/workflow.py
+++ b/tools/patman/workflow.py
@@ -13,6 +13,7 @@  class Wtype(str, enum.Enum):
     """Types of workflow entry"""
     SENT = 'sent'
     TODO = 'todo'
+    REVIEWED = 'reviewed'
 
 
 def friendly_time(now, when):
@@ -61,6 +62,24 @@  def sent(cser, series_id, ser_ver_id=None):
     cser.commit()
 
 
+def reviewed(cser, series_id, ser_ver_id=None):
+    """Record that a series was reviewed and create a follow-up todo
+
+    Args:
+        cser (CseriesHelper): Series helper with open database
+        series_id (int): ID of the series that was reviewed
+        ser_ver_id (int or None): ID of the ser_ver record
+    """
+    ts = cser.get_now().strftime('%Y-%m-%d %H:%M:%S')
+    cser.db.workflow_archive(Wtype.REVIEWED, series_id)
+    cser.db.workflow_add(Wtype.REVIEWED, series_id, ts, ser_ver_id=ser_ver_id)
+    when = cser.get_now() + timedelta(days=7)
+    todo_ts = when.strftime('%Y-%m-%d %H:%M:%S')
+    cser.db.workflow_archive(Wtype.TODO, series_id)
+    cser.db.workflow_add(Wtype.TODO, series_id, todo_ts)
+    cser.commit()
+
+
 def todo(cser, series, days):
     """Mark a series as a todo item after a number of days