From nobody Mon Jan 5 14:17:58 2026 X-Original-To: dev-commits-src-main@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 4dlGbq0QGhz6MYM2 for ; Mon, 05 Jan 2026 14:17:59 +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 "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dlGbp4jhfz3cGM for ; Mon, 05 Jan 2026 14:17:58 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1767622678; 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=zxV3k1Fk/tfk6LSI0fTB4KtYcKiXjy1EcBA8OUQK124=; b=HHVirjRRnuZy26ykBWGV9rKj5SgmCiwEmrIoO9Qr8yP1DgYcKVKfNrjLuEvOzXm4BzzlTQ ZUMHItcH8ZS3Ea5ZkJREKt6zxTj0h5u/YBcTRtrH84qubL0zpDatOSO0JP9/0YdN0N9DXH JXqQZ2dentMIhIupOpbt/gcwUyfSvFcd77g9TyMXO4ylxssaxaoH2WC5Onx7iuy97d9u4p tX7v+Dhh5/I+v7ReZDpR5UyOcrWaDnaOeuW1yrCsVm8GFw/o+zhoPpV640EbDxoRtGtAo4 ihn00om9HTyBVwjO3Ys7B0KY3ptRqf4/gbWIR26hAKYsPN87qi9SAfcdUcEakw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1767622678; 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=zxV3k1Fk/tfk6LSI0fTB4KtYcKiXjy1EcBA8OUQK124=; b=FDbNbqkILf+5f6QDDy0p/DyKQIo2DD0WoukPTScW6NwI+F2sUavo8CwVJy690hZnkEHsbG mFWRZFJAUDtnUZLGAlHM6211XV4aAfEKETZ1Y7yV7H6sEJ+U0L0UadCjs2+FLBprGqCrKx fFnKW2EdiPPVEWq91yZc7aWlUCuvkmtgEsAez5Qir/+LgLEudjGd9dGA83ctL8RuBz7gCF GGqrh2A38Sbs0Rj0gEXYRK91JMc9aGAmjC5QnsK2X78NyNAaDVSLGBybbiS7CNySLSh0N/ 2FiWmF+5R5eV+g5T+WPGXLSRz5YKvNbEfxR+MvUv+7n9kitDEQVwGPkyLhg5HQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1767622678; a=rsa-sha256; cv=none; b=CKluq7ZgPftZ3JCN1Nw/B1FV++jXioqe9NDajRG4tTrQ0O48xGzucyONB7a16iBYrqTrzC GKjkBmh7aB0V3hHNoWQ/GJbL7ShWvnbciigDLryKNYGdmym4Om+LDnuTQIPa5J1REL8z2o LXSOPRqrSwT3j25H5BDvHhl/ip1gHmotnKne3+wCn7fMAyz3pfSx4P6TOVb4k61+HakjzL 1GnXRmxa59pz8e5KiyBefsGvQvGKMHv12wUO9t/nMkZ1zswtSLUUqblhR0QQhyRPsOQuVM yFZEzOmMp0wmPGhU9HZpD4FjId4NqEoF7MARZU2e06AvrK3HAKduxc0v1ec7qg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dlGbp41gxz7kf for ; Mon, 05 Jan 2026 14:17:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 46403 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 05 Jan 2026 14:17:58 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 684c762485d3 - main - git-arc: Try to make patching more useful List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org 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: 684c762485d31d769b9e1ebeaababa31f684d2de Auto-Submitted: auto-generated Date: Mon, 05 Jan 2026 14:17:58 +0000 Message-Id: <695bc816.46403.2733a59@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=684c762485d31d769b9e1ebeaababa31f684d2de commit 684c762485d31d769b9e1ebeaababa31f684d2de Author: Mark Johnston AuthorDate: 2026-01-05 14:17:11 +0000 Commit: Mark Johnston CommitDate: 2026-01-05 14:17:11 +0000 git-arc: Try to make patching more useful Add a raw mode, which fetches the patch file and applies it manually rather than using arc patch. This is handy because arc patch will always try to fetch your remotes if it can't find the base commit in your repo (even if you ask it not to make a commit). This is basically unusable in some of my workspaces where I have 20+ remotes configured, some of which may be unreachable. Add a stack mode, which causes git-arc to recursively apply parent revisions, going up the patch stack. Thus, to apply a full patch stack, just apply the final patch with -s. Reviewed by: ngie Differential Revision: https://reviews.freebsd.org/D54403 --- tools/tools/git/git-arc.sh | 79 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 70 insertions(+), 9 deletions(-) diff --git a/tools/tools/git/git-arc.sh b/tools/tools/git/git-arc.sh index 98d29809d636..bff9b0607761 100755 --- a/tools/tools/git/git-arc.sh +++ b/tools/tools/git/git-arc.sh @@ -59,7 +59,7 @@ Usage: git arc [-vy] Commands: create [-l] [-r [,...]] [-s subscriber[,...]] [|] list | - patch [-bc] [ ...] + patch [-bcrs] [ ...] stage [-b branch] [|] update [-l] [-m message] [|] @@ -226,6 +226,20 @@ diff2phid() jq -r "select(.response != []) | .response.${diff}.phid" } +phid2diff() +{ + local diff phid + + phid=$1 + if ! expr "$phid" : 'PHID-DREV-[0-9A-Za-z]*$' >/dev/null; then + err "invalid diff PHID $phid" + fi + diff=$(echo '{"constraints": {"phids": ["'"$phid"'"]}}' | + arc_call_conduit -- differential.revision.search | + jq -r '.response.data[0].id') + echo "D${diff}" +} + diff2status() { local diff tmp status summary @@ -244,6 +258,19 @@ diff2status() printf "%-14s %s\n" "${status}" "${summary}" } +diff2parents() +{ + local dep dependencies diff parents phid + + diff=$1 + phid=$(diff2phid "$diff") + for dep in $(echo '{"phids": ["'"$phid"'"]}' | + arc_call_conduit -- differential.query | + jq -r '.response[0].auxiliary."phabricator:depends-on"[]'); do + echo $(phid2diff $dep) + done +} + log2diff() { local diff @@ -651,13 +678,46 @@ patch_commit() git commit --author "${author}" --file "$tmp" } +apply_rev() +{ + local commit parent parents raw rev stack + + rev=$1 + commit=$2 + raw=$3 + stack=$4 + + if $stack; then + parents=$(diff2parents "$rev") + for parent in $parents; do + echo "Applying parent ${parent}..." + if ! apply_rev $parent $commit $raw $stack; then + return 1 + fi + done + fi + + if $raw; then + fetch -o /dev/stdout "https://reviews.freebsd.org/${rev}.diff" | git apply --index + else + arc patch --skip-dependencies --nobranch --nocommit --force $rev + fi + + if ${commit}; then + patch_commit $rev + fi + return 0 +} + gitarc__patch() { - local branch commit rev + local branch commit o raw rev stack branch=false commit=false - while getopts bc o; do + raw=false + stack=false + while getopts bcrs o; do case "$o" in b) require_clean_work_tree "patch -b" @@ -667,6 +727,12 @@ gitarc__patch() require_clean_work_tree "patch -c" commit=true ;; + r) + raw=true + ;; + s) + stack=true + ;; *) err_usage ;; @@ -682,13 +748,8 @@ gitarc__patch() patch_branch "$@" fi for rev in "$@"; do - if ! arc patch --skip-dependencies --nobranch --nocommit --force "$rev"; then - break - fi echo "Applying ${rev}..." - if ${commit}; then - patch_commit $rev - fi + apply_rev $rev $commit $raw $stack done }