[Concept,19/24] pickman: Stop poll on errors

Message ID 20251217022823.392557-20-sjg@u-boot.org
State New
Headers
Series pickman: Refine the feature set |

Commit Message

Simon Glass Dec. 17, 2025, 2:28 a.m. UTC
  From: Simon Glass <simon.glass@canonical.com>

Change poll to stop on errors rather than continuing, since errors
like permission denied are not recoverable by retrying.

Co-developed-by: Claude Opus 4.5 <noreply@anthropic.com>
Signed-off-by: Simon Glass <simon.glass@canonical.com>
---

 tools/pickman/agent.py   | 3 +++
 tools/pickman/control.py | 2 +-
 2 files changed, 4 insertions(+), 1 deletion(-)
  

Patch

diff --git a/tools/pickman/agent.py b/tools/pickman/agent.py
index e63248a1150..26f4ac3afd9 100644
--- a/tools/pickman/agent.py
+++ b/tools/pickman/agent.py
@@ -72,6 +72,8 @@  Steps to follow:
    - For regular commits: git cherry-pick -x <hash>
    - For merge commits (identified by "Merge" in subject): git cherry-pick -x -m 1 --allow-empty <hash>
    Cherry-pick one commit at a time to handle each appropriately.
+   IMPORTANT: Always include merge commits even if they result in empty commits.
+   The merge commit message is important for tracking history.
 4. If there are conflicts:
    - Show the conflicting files
    - Try to resolve simple conflicts automatically
@@ -91,6 +93,7 @@  Important:
 - Stop immediately if there's a conflict that cannot be auto-resolved
 - Do not force push or modify history
 - If cherry-pick fails, run 'git cherry-pick --abort'
+- NEVER skip merge commits - always use --allow-empty to preserve them
 """
 
     options = ClaudeAgentOptions(
diff --git a/tools/pickman/control.py b/tools/pickman/control.py
index 446697a0d5a..d9d326a0d21 100644
--- a/tools/pickman/control.py
+++ b/tools/pickman/control.py
@@ -907,7 +907,7 @@  def do_poll(args, dbs):
         try:
             ret = do_step(args, dbs)
             if ret != 0:
-                tout.warning(f'Step returned {ret}, continuing anyway...')
+                tout.warning(f'step returned {ret}')
             tout.info('')
             tout.info(f'Sleeping {interval} seconds...')
             time.sleep(interval)