Browse Source
* ew/rebase: rebase --merge: fix for rebasing more than 7 commits. rebase: error out for NO_PYTHON if they use recursive merge Add renaming-rebase test. rebase: Allow merge strategies to be used when rebasingmaint
Junio C Hamano
19 years ago
3 changed files with 320 additions and 10 deletions
@ -0,0 +1,112 @@
@@ -0,0 +1,112 @@
|
||||
#!/bin/sh |
||||
# |
||||
# Copyright (c) 2006 Junio C Hamano |
||||
# |
||||
|
||||
test_description='git rebase --merge test' |
||||
|
||||
. ./test-lib.sh |
||||
|
||||
if test "$no_python"; then |
||||
echo "Skipping: no python => no recursive merge" |
||||
test_done |
||||
exit 0 |
||||
fi |
||||
|
||||
T="A quick brown fox |
||||
jumps over the lazy dog." |
||||
for i in 1 2 3 4 5 6 7 8 9 10 |
||||
do |
||||
echo "$i $T" |
||||
done >original |
||||
|
||||
test_expect_success setup ' |
||||
git add original && |
||||
git commit -m"initial" && |
||||
git branch side && |
||||
echo "11 $T" >>original && |
||||
git commit -a -m"master updates a bit." && |
||||
|
||||
echo "12 $T" >>original && |
||||
git commit -a -m"master updates a bit more." && |
||||
|
||||
git checkout side && |
||||
(echo "0 $T" ; cat original) >renamed && |
||||
git add renamed && |
||||
git update-index --force-remove original && |
||||
git commit -a -m"side renames and edits." && |
||||
|
||||
tr "[a-z]" "[A-Z]" <original >newfile && |
||||
git add newfile && |
||||
git commit -a -m"side edits further." && |
||||
|
||||
tr "[a-m]" "[A-M]" <original >newfile && |
||||
rm -f original && |
||||
git commit -a -m"side edits once again." && |
||||
|
||||
git branch test-rebase side && |
||||
git branch test-rebase-pick side && |
||||
git branch test-reference-pick side && |
||||
git checkout -b test-merge side |
||||
' |
||||
|
||||
test_expect_success 'reference merge' ' |
||||
git merge -s recursive "reference merge" HEAD master |
||||
' |
||||
|
||||
test_expect_success rebase ' |
||||
git checkout test-rebase && |
||||
git rebase --merge master |
||||
' |
||||
|
||||
test_expect_success 'merge and rebase should match' ' |
||||
git diff-tree -r test-rebase test-merge >difference && |
||||
if test -s difference |
||||
then |
||||
cat difference |
||||
(exit 1) |
||||
else |
||||
echo happy |
||||
fi |
||||
' |
||||
|
||||
test_expect_success 'rebase the other way' ' |
||||
git reset --hard master && |
||||
git rebase --merge side |
||||
' |
||||
|
||||
test_expect_success 'merge and rebase should match' ' |
||||
git diff-tree -r test-rebase test-merge >difference && |
||||
if test -s difference |
||||
then |
||||
cat difference |
||||
(exit 1) |
||||
else |
||||
echo happy |
||||
fi |
||||
' |
||||
|
||||
test_expect_success 'picking rebase' ' |
||||
git reset --hard side && |
||||
git rebase --merge --onto master side^^ && |
||||
mb=$(git merge-base master HEAD) && |
||||
if test "$mb" = "$(git rev-parse master)" |
||||
then |
||||
echo happy |
||||
else |
||||
git show-branch |
||||
(exit 1) |
||||
fi && |
||||
f=$(git diff-tree --name-only HEAD^ HEAD) && |
||||
g=$(git diff-tree --name-only HEAD^^ HEAD^) && |
||||
case "$f,$g" in |
||||
newfile,newfile) |
||||
echo happy ;; |
||||
*) |
||||
echo "$f" |
||||
echo "$g" |
||||
(exit 1) |
||||
esac |
||||
' |
||||
|
||||
test_done |
Loading…
Reference in new issue