subtree: fix argument handling in check_parents

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>

James Limbouris committed Dec 8, 2021 at 02:11 UTC 3ce8888fb499f9646b770306be6e2c7674a75199
1 file changed +3 -4
contrib/subtree/git-subtree.sh
+3 -4
@@ -296,10 +296,9 @@ cache_miss () {
296 done
297 }
298
299 -# Usage: check_parents PARENTS_EXPR
299 +# Usage: check_parents [REVS...]
300 check_parents () {
301 - assert test $# = 1
302 - missed=$(cache_miss "$1") || exit $?
301 + missed=$(cache_miss "$@") || exit $?
302 local indent=$(($indent + 1))
303 for miss in $missed
304 do
@@ -753,7 +752,7 @@ process_split_commit () {
752 fi
753 createcount=$(($createcount + 1))
754 debug "parents: $parents"
756 - check_parents "$parents"
755 + check_parents $parents
756 newparents=$(cache_get $parents) || exit $?
757 debug "newparents: $newparents"
758