From patchwork Wed Dec 17 02:25:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 64 Return-Path: X-Original-To: u-boot-concept@u-boot.org Delivered-To: u-boot-concept@u-boot.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1765938391; bh=0aUfoqbRAh5Yqor2OOGBlYIdrj8YVGL9GRLivY75glI=; h=From:To:Date:CC:Subject:List-Id:List-Archive:List-Help:List-Owner: List-Post:List-Subscribe:List-Unsubscribe:From; b=Igmt5Bx/kiU88mNFelktXqIbiN/y78SscjX2mM7bdlFEm5013ylevDK9t89pake4H byVKvqLOIzn/7sVleY/c3SUh0H+zqrjnNxfFeXPdzqBbjKUNCARE8UketaRacZOOSi CsTPDi6RmSwfPCIqv9ohtRew1hqjVkmRo1kA1CyhtkQ1DosAQ4HKF/zVucUyH9nEHS MY0lkue9CyFDKWYndiwY+4h6Wjt5ZWg9CKVy2WZOK4kMOTwhL0gnza9TxEofY2QHRK xzewhflTlp8wzdxpYIAOrdjji24f6xpgYSBNDH/kmu+e6HGMjWbvinzAZMb41nAc+v sJ325KUtKtASg== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 1290568BA8 for ; Tue, 16 Dec 2025 19:26:31 -0700 (MST) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id OKC1Jc0hetqC for ; Tue, 16 Dec 2025 19:26:31 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1765938391; bh=0aUfoqbRAh5Yqor2OOGBlYIdrj8YVGL9GRLivY75glI=; h=From:To:Date:CC:Subject:List-Id:List-Archive:List-Help:List-Owner: List-Post:List-Subscribe:List-Unsubscribe:From; b=Igmt5Bx/kiU88mNFelktXqIbiN/y78SscjX2mM7bdlFEm5013ylevDK9t89pake4H byVKvqLOIzn/7sVleY/c3SUh0H+zqrjnNxfFeXPdzqBbjKUNCARE8UketaRacZOOSi CsTPDi6RmSwfPCIqv9ohtRew1hqjVkmRo1kA1CyhtkQ1DosAQ4HKF/zVucUyH9nEHS MY0lkue9CyFDKWYndiwY+4h6Wjt5ZWg9CKVy2WZOK4kMOTwhL0gnza9TxEofY2QHRK xzewhflTlp8wzdxpYIAOrdjji24f6xpgYSBNDH/kmu+e6HGMjWbvinzAZMb41nAc+v sJ325KUtKtASg== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 0065D68ACA for ; Tue, 16 Dec 2025 19:26:31 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1765938388; bh=0kxj+z2RPuTczIKl7uwP233l2Ygi5i0RcSC6G9S5TjM=; h=From:To:Cc:Subject:Date:From; b=r7LePtqybFo523TZsCmSLhVfMai2qT2wF+8t1erAhkdNoUD/y9ElWSP2brpuG79Gk LveHSt48Of4HHYXNeZuiJcpA1N5XjJkvvKwKLoOVO516weO3pekbF7sjnWimxysWQP j78F1tENe2bvVc3Z6NrOlvIjiJYRdK08BqZvlHBZ++lmOH0chICunovKgEjukICNLY lOdTC8eM2GWrY69cOxcMumHP2dvurFqS/ExgNIS8/iGCnwF24nNUhx3MMGUwZlVb/8 kawCm8w4vrLPRnLzgeetnWmUDwC6mrghcMjeqK2p5hAs2vT2nVBlgpA4KhyNt4/Zi2 WB0vS8Uw2AEiA== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 3411B6884F; Tue, 16 Dec 2025 19:26:28 -0700 (MST) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10026) with ESMTP id YBYfBqced-h2; Tue, 16 Dec 2025 19:26:28 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1765938384; bh=cPjNM5bCDc7GIdBQ99xROjlvR1NIhk0eENTuHcdxXyI=; h=From:To:Cc:Subject:Date:From; b=ubSuWhgFFNgWR+HAv8TGAqs9ogZeqRb3BvJZuNg6H2Tk621H9CypsTe1wuX2gej+2 HaQaXNIeHFtpQQiU6HYiPKJYOy5laE0H9J6r+WtXAScsWrFsDqlolv8GuDjCpFfU6A NUyWM0ywVNqYOSRo6QP07Tp+XdIFxp4SKkSBY5/Q/16s2muuK5tABe3xINXxsYLr5p 9COb9+U2Di+wiYDVU5MlHbD3K9fvtYsXVk+mtG0ZB+a7ISlGtpHNEvHNJAC54/GYUd ER+5/nH7Rm8Q4f4aDn+J4SUvO6IThjHKFINGMGE/doocKiGh4A1MH2d5pnm4FHQxId qZRF+pFUNnAhw== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id B46FC6892F; Tue, 16 Dec 2025 19:26:23 -0700 (MST) From: Simon Glass To: U-Boot Concept Date: Tue, 16 Dec 2025 19:25:48 -0700 Message-ID: <20251217022611.389379-1-sjg@u-boot.org> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Message-ID-Hash: UP3PZYEDPLXYYOEUMI2W5G7B4MY5YXA2 X-Message-ID-Hash: UP3PZYEDPLXYYOEUMI2W5G7B4MY5YXA2 X-MailFrom: sjg@u-boot.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Heinrich Schuchardt , Simon Glass X-Mailman-Version: 3.3.10 Precedence: list Subject: [Concept] [PATCH 00/17] pickman: Add a manager for cherry-picks List-Id: Discussion and patches related to U-Boot Concept Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Simon Glass This series adds pickman, a tool to help manage cherry-picking commits between branches. It's designed to automate the tedious process of cherry-picking large numbers of commits from one branch to another, such as when maintaining a downstream branch. Key features: - Track source branches and cherry-pick progress in a SQLite database - Find commits to cherry-pick up to the next merge commit - Use Claude AI agent to automate cherry-picks with conflict resolution - Create GitLab merge requests for review - Handle MR review comments automatically - Poll for continuous automated cherry-picking The tool integrates with GitLab for MR management and uses the Claude Agent SDK for automated cherry-picking and conflict resolution. This tool is *very* experimental (so don't use it yourself!), but should become usable sometime in the new year. Simon Glass (17): pickman: Add tool to compare branch differences pickman: Add argument parsing with compare and test commands pickman: Add database for tracking cherry-pick state pickman: Add add-source command to track source branches pickman: Add list-sources command pickman: Add next-set command to show commits to cherry-pick pickman: Add pcommit and mergereq tables to database pickman: Add a Claude agent pickman: Add an apply command to cherry-pick commits pickman: Add GitLab API module pickman: Add GitLab integration to push and create MRs pickman: Add commit-source command pickman: Add review command to handle MR comments pickman: Add step command to create MR if none pending pickman: Add workflow overview to documentation pickman: Update database when MRs are merged pickman: Process review comments in step command .gitignore | 1 + doc/develop/index.rst | 1 + doc/develop/pickman.rst | 1 + tools/pickman/README.rst | 236 +++++++ tools/pickman/__init__.py | 4 + tools/pickman/__main__.py | 99 +++ tools/pickman/agent.py | 221 ++++++ tools/pickman/control.py | 732 ++++++++++++++++++++ tools/pickman/database.py | 413 +++++++++++ tools/pickman/ftest.py | 1309 +++++++++++++++++++++++++++++++++++ tools/pickman/gitlab_api.py | 345 +++++++++ tools/pickman/pickman | 1 + 12 files changed, 3363 insertions(+) create mode 120000 doc/develop/pickman.rst create mode 100644 tools/pickman/README.rst create mode 100644 tools/pickman/__init__.py create mode 100755 tools/pickman/__main__.py create mode 100644 tools/pickman/agent.py create mode 100644 tools/pickman/control.py create mode 100644 tools/pickman/database.py create mode 100644 tools/pickman/ftest.py create mode 100644 tools/pickman/gitlab_api.py create mode 120000 tools/pickman/pickman