[PATCH] subtree: validate --prefix against commit in split
---
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