From 9f21e97ddccf114a6919cf4b8cf57c2838328f36 Mon Sep 17 00:00:00 2001 From: Nanako Shiraishi Date: Thu, 7 Jan 2010 20:05:02 +0900 Subject: rebase: fix --onto A...B parsing and add tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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: しらいし ななこ Signed-off-by: Junio C Hamano --- git-rebase.sh | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) (limited to 'git-rebase.sh') diff --git a/git-rebase.sh b/git-rebase.sh index 6503113a8..9bd89746a 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -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" "$@" -- cgit v1.2.1