From: Pushkar Singh Date: Thu, 15 Jan 2026 12:09:36 GMT Subject: [PATCH] subtree: validate --prefix against commit in split Message-ID: <20260115120936.18491-1-pushkarkumarsingh1970@gmail.com> --- contrib/subtree/git-subtree.sh | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh index 17106d1a72..a1b60eac8b 100755 --- a/contrib/subtree/git-subtree.sh +++ b/contrib/subtree/git-subtree.sh @@ -257,6 +257,9 @@ main () { test -e "$arg_prefix" && die "fatal: prefix '$arg_prefix' already exists." ;; + split) + # checked later against the commit, not the working tree + ;; *) test -e "$arg_prefix" || die "fatal: '$arg_prefix' does not exist; use 'git subtree add'" @@ -958,13 +961,19 @@ cmd_add_commit () { cmd_split () { if test $# -eq 0 then - rev=$(git rev-parse HEAD) + rev=$(git rev-parse HEAD) elif test $# -eq 1 || test $# -eq 2 then - rev=$(git rev-parse -q --verify "$1^{commit}") || - die "fatal: '$1' does not refer to a commit" + rev=$(git rev-parse -q --verify "$1^{commit}") || + die "fatal: '$1' does not refer to a commit" else - die "fatal: you must provide exactly one revision, and optionally a repository. Got: '$*'" + die "fatal: you must provide exactly one revision, and optionally a repository. Got: '$*'" + fi + + # Now validate prefix against the commit, not the working tree + if ! git ls-tree -d "$rev" -- "$dir" >/dev/null + then + die "fatal: '$dir' does not exist in commit $rev" fi repository="" if test "$#" = 2 -- 2.43.0