rebase: fix --onto A...B parsing and add tests
The previous patch didn't parse "rebase --onto A...B" correctly when A isn't an empty string. It also tried to be careful to notice a case in which there are more than one merge bases, but forgot to give --all option to merge-base, making the test pointless. Fix these problems and add a test script to verify. Improvements to the script to parse A...B syntax was taken from review comments by Johannes Schindelin. Signed-off-by: しらいし ななこ <nanako3@lavabit.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
61dfa1bb67
commit
9f21e97ddc
@ -419,22 +419,27 @@ fi
|
||||
|
||||
# Make sure the branch to rebase onto is valid.
|
||||
onto_name=${newbase-"$upstream_name"}
|
||||
if left=$(expr "$onto_name" : '\(.*\)\.\.\.') &&
|
||||
right=$(expr "$onto_name" : '\.\.\.\(.*\)$') &&
|
||||
: ${left:=HEAD} ${right:=HEAD} &&
|
||||
onto=$(git merge-base "$left" "$right")
|
||||
then
|
||||
case "$onto" in
|
||||
?*"$LF"?*)
|
||||
die "$onto_name: there are more than one merge bases"
|
||||
;;
|
||||
'')
|
||||
case "$onto_name" in
|
||||
*...*)
|
||||
if left=${onto_name%...*} right=${onto_name#*...} &&
|
||||
onto=$(git merge-base --all ${left:-HEAD} ${right:-HEAD})
|
||||
then
|
||||
case "$onto" in
|
||||
?*"$LF"?*)
|
||||
die "$onto_name: there are more than one merge bases"
|
||||
;;
|
||||
'')
|
||||
die "$onto_name: there is no merge base"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
die "$onto_name: there is no merge base"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
onto=$(git rev-parse --verify "${onto_name}^0") || exit
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# If a hook exists, give it a chance to interrupt
|
||||
run_pre_rebase_hook "$upstream_arg" "$@"
|
||||
|
Reference in New Issue
Block a user