]> git.ipfire.org Git - thirdparty/git.git/commitdiff
subtree: fix argument handling in check_parents
authorJames Limbouris <james@digitalmatter.com>
Wed, 8 Dec 2021 02:11:58 +0000 (02:11 +0000)
committerJunio C Hamano <gitster@pobox.com>
Tue, 4 Jan 2022 19:38:19 +0000 (11:38 -0800)
315a84f9aa0 (subtree: use commits before rejoins for splits, 2018-09-28)
changed the signature of check_parents from 'check_parents [REV...]'
to 'check_parents PARENTS_EXPR INDENT'. In other words the variable list
of parent revisions became a list embedded in a string. However it
neglected to unpack the list again before sending it to cache_miss,
leading to incorrect calls whenever more than one parent was present.
This is the case whenever a merge commit is processed, with the end
result being a loss of performance from unecessary rechecks.

The indent parameter was subsequently removed in e9525a8a029 (subtree:
have $indent actually affect indentation, 2021-04-27), but the argument
handling bug remained.

For consistency, take multiple arguments in check_parents,
and pass all of them to cache_miss separately.

Signed-off-by: James Limbouris <james@digitalmatter.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/subtree/git-subtree.sh

index 7f767b5c38fe2c1650868057349152b2ddebaa1c..71f1fd94bde8b0cd1653677612b0f21e5b36bcd4 100755 (executable)
@@ -296,10 +296,9 @@ cache_miss () {
        done
 }
 
-# Usage: check_parents PARENTS_EXPR
+# Usage: check_parents [REVS...]
 check_parents () {
-       assert test $# = 1
-       missed=$(cache_miss "$1") || exit $?
+       missed=$(cache_miss "$@") || exit $?
        local indent=$(($indent + 1))
        for miss in $missed
        do
@@ -753,7 +752,7 @@ process_split_commit () {
        fi
        createcount=$(($createcount + 1))
        debug "parents: $parents"
-       check_parents "$parents"
+       check_parents $parents
        newparents=$(cache_get $parents) || exit $?
        debug "newparents: $newparents"