From nobody Fri Jul 10 14:46:44 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4gxZR84shKz6lFgx for ; Fri, 10 Jul 2026 14:46:44 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gxZR83LJvz3wDF for ; Fri, 10 Jul 2026 14:46:44 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1783694804; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=AN+DA4xE7aG0JTurALc5xR9KYoxgwKvox22jpP01B+4=; b=c1nxg/zvimY9sqJwbV/dJfMN9BLB39TvU8RFTdir4v75008cSP6qnPfkR3ijykUn3vj16r mw09h1osRx6ZgJMrOqze6+UuGoTDfODoPPURaXOgVSLZbsY/IuHZ4a1sg4a1TIc0tjOz6J gV5SDPiNlw8saIuTE327NGI9CMJnMMhb/TD5Nk1pGmkAxCBGGdcQp0N5881MOcZn566mTs i+BhWyNdDeYvzzl5GN04pADFuZC98wxp97AdYlJs5umvwahSp3LHp0Qu3++PA067eLyI/s tPeK5eFNMAGE8ajDSVNLPtHxf2lmdSKLl6y2G+8trVc2yDyFdtyWHyXs2r2ckw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1783694804; a=rsa-sha256; cv=none; b=VJYMbjPPRpfvPU6P+ZDDCzlpHqvdcLuD/qgb+IbuTBLatgYgdT42tCjvgjcWjjHXXDnKOt k5InHSTAnaJNqmJl1E4DIgYgormSze2ukXd5tEf2DI0Okc+H6S9r66xxlWdMI9DfD46oHA aVnhSNcdSoqveTLeZ4niIf/HfL0m9PejyWfmD+rpwgHZADGlObyqsNhgNng+BYv3e08rqj j95p8BH80oU58n2XbG7FFsxGZ82hQjiMYnjmgj86yn+ka4AhTMVAP55yMFcMW+6i+m/A5R G1I5jjs6aCtdynw46TrZzsVwRfGYKTgmP1laRxD2qeOSALRlACPjgkz1jkNIGg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1783694804; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=AN+DA4xE7aG0JTurALc5xR9KYoxgwKvox22jpP01B+4=; b=K9kp2IxPwlxcMmj35oFEWa/yRbdJTm3/ZpLNZk84i3EAFrRT//VAWUJ47iL9EjUPSOC3c/ tX5L+N3T7jggP+REPTqxCFD5nvelZEI2FkQlFPCExEW4a0gaKzeU9P6Biab5qr2xQWqcPC C1+EnlY4WDFFvQ5TipDyLMDKDHfZf2e+rZtSl7U3pp4eJFs1zZEn+1WEl+lyt6aYaTm/Gv hReby+o7V/juwnoLIq2bo/+oZOgMMfqtE0jfNBP5YRZ6SEqdZ4/CkTYvYNPz/z08IDt/c7 q6tNTfO+bpRinQtfr6J64brE+dO2V4i2+bW7VVzM7ehTUN+dil6TxSqbrZ5n7g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gxZR81Dg1z109k for ; Fri, 10 Jul 2026 14:46:44 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 27bcb by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 10 Jul 2026 14:46:44 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 59a4b6c2a065 - main - git-mfc: Cherry-pick all commits in one git command List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 59a4b6c2a06512bc7b62fdfe16df4afed355d2e5 Auto-Submitted: auto-generated Date: Fri, 10 Jul 2026 14:46:44 +0000 Message-Id: <6a5105d4.27bcb.3486712e@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=59a4b6c2a06512bc7b62fdfe16df4afed355d2e5 commit 59a4b6c2a06512bc7b62fdfe16df4afed355d2e5 Author: Mark Johnston AuthorDate: 2026-07-10 14:44:33 +0000 Commit: Mark Johnston CommitDate: 2026-07-10 14:46:31 +0000 git-mfc: Cherry-pick all commits in one git command This allows one to resume from a conflict with a plain `git cherry-pick --continue`, whereas before one would have to re-run the original git-mfc command after resolving the conflict and running `git cherry-pick --continue`. Suggested by: des Reviewed by: des Differential Revision: https://reviews.freebsd.org/D58129 --- tools/tools/git/git-mfc | 16 +++++++++------- tools/tools/git/git-mfc.1 | 11 +++++++---- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/tools/tools/git/git-mfc b/tools/tools/git/git-mfc index 513a7f150e3c..42fb4f169412 100755 --- a/tools/tools/git/git-mfc +++ b/tools/tools/git/git-mfc @@ -360,17 +360,16 @@ def pending(repo, upstream, author=None, committer=None, baking=False): return list(results.values()) -def cherry_pick(commit, edit=False): - """Cherry-pick a single commit with -x. Abort on failure.""" +def cherry_pick(commits, edit=False): + """Cherry-pick a list of commits with -x. Abort on failure.""" cmd = ['git', 'cherry-pick', '-x', '-m1'] if edit: cmd.append('-e') - cmd.append(commit.hexsha) + cmd.extend([c.hexsha for c in commits]) result = subprocess.run(cmd, capture_output=False) if result.returncode != 0: - print(f"\nCherry-pick of {commit.hexsha} ({commit.summary}) failed.", - file=sys.stderr) - print("Resolve the conflict and then re-run git mfc to continue,", + print("\nCherry-pick failed.", file=sys.stderr) + print("Resolve the conflict and run 'git cherry-pick --continue',", file=sys.stderr) print("or run 'git cherry-pick --abort' to give up.", file=sys.stderr) sys.exit(1) @@ -521,13 +520,16 @@ def main(): print(commit.hexsha, commit.summary) return + topick = [] for commit in tomfc: if commit.hexsha in already_picked: print(f"Skipping {commit.hexsha[:12]} {commit.summary} " f"(already cherry-picked)") continue print(f"Cherry-picking {commit.hexsha[:12]} {commit.summary}") - cherry_pick(commit, edit=args.edit) + topick.append(commit) + if topick: + cherry_pick(topick, edit=args.edit) if __name__ == '__main__': diff --git a/tools/tools/git/git-mfc.1 b/tools/tools/git/git-mfc.1 index a730eae7ee6b..2594446201c2 100644 --- a/tools/tools/git/git-mfc.1 +++ b/tools/tools/git/git-mfc.1 @@ -68,13 +68,16 @@ Fixup commits that have been reverted are skipped with a warning. .Pp Commits that have already been cherry-picked to the current branch are automatically skipped. -This allows the same -.Nm -command to be re-run after resolving a conflict without re-applying -earlier commits. Use .Fl f to override this behavior. +.Pp +All commits are cherry-picked using a single +.Xr git-cherry-pick 1 +invocation. +If a conflict occurs, resolve it and run +.Dq git cherry-pick --continue +to proceed with the remaining commits. .It In .Fl -pending