]> git.ipfire.org Git - thirdparty/git.git/commitdiff
subtree: use `git merge-base --is-ancestor`
authorLuke Shumaker <lukeshu@datawire.io>
Tue, 27 Apr 2021 21:17:33 +0000 (15:17 -0600)
committerJunio C Hamano <gitster@pobox.com>
Wed, 28 Apr 2021 07:47:17 +0000 (16:47 +0900)
Instead of writing a slow `rev_is_descendant_of_branch $a $b` function
in shell, just use the fast `git merge-base --is-ancestor $b $a`.

Signed-off-by: Luke Shumaker <lukeshu@datawire.io>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/subtree/git-subtree.sh

index 4503564f7ea3d60f2ede3e3792468be3e409c2e3..70e16b807b24c76e1a4402861a142bfa2110b267 100755 (executable)
@@ -280,20 +280,6 @@ rev_exists () {
        fi
 }
 
-rev_is_descendant_of_branch () {
-       newrev="$1"
-       branch="$2"
-       branch_hash=$(git rev-parse "$branch")
-       match=$(git rev-list -1 "$branch_hash" "^$newrev")
-
-       if test -z "$match"
-       then
-               return 0
-       else
-               return 1
-       fi
-}
-
 # if a commit doesn't have a parent, this might not work.  But we only want
 # to remove the parent from the rev-list, and since it doesn't exist, it won't
 # be there anyway, so do nothing in that case.
@@ -811,7 +797,7 @@ cmd_split () {
        then
                if rev_exists "refs/heads/$branch"
                then
-                       if ! rev_is_descendant_of_branch "$latest_new" "$branch"
+                       if ! git merge-base --is-ancestor "$branch" "$latest_new"
                        then
                                die "Branch '$branch' is not an ancestor of commit '$latest_new'."
                        fi