diff options
author | Nanako Shiraishi <nanako3@lavabit.com> | 2010-01-07 20:05:02 +0900 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-01-07 11:14:39 -0800 |
commit | 9f21e97ddccf114a6919cf4b8cf57c2838328f36 (patch) | |
tree | 6096cbd783e73d10ca772012fef8289bce72f22c /git-rebase.sh | |
parent | 61dfa1bb6710690e53fa20bc3ddd1f5fbe8c1d22 (diff) | |
download | git-9f21e97ddccf114a6919cf4b8cf57c2838328f36.tar.gz |
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>
Diffstat (limited to 'git-rebase.sh')
-rwxr-xr-x | git-rebase.sh | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/git-rebase.sh b/git-rebase.sh index 6503113a84..9bd89746ab 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" "$@" |