diff options
author | Johannes Sixt <johannes.sixt@telecom.at> | 2007-07-04 22:09:10 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-07-04 21:12:39 -0700 |
commit | 1308c17b3e6bd3f5636f5b9bcadb2fbdf559009d (patch) | |
tree | ed1ac272833101767363d37c4a5a49d36f4db23c /t/t3400-rebase.sh | |
parent | d97bc5de929e525add9977a9c1ab3834b8c04657 (diff) | |
download | git-1308c17b3e6bd3f5636f5b9bcadb2fbdf559009d.tar.gz |
Allow rebase to run if upstream is completely merged
Consider this history:
o--o-...-B <- origin
\ \
x--x--M--x--x <- master
In this situation, rebase considers master fully up-to-date and would
not do anything. However, if there were additional commits on origin,
the rebase would run and move the commits x on top of origin.
Here we change rebase to short-circuit out only if the history since origin
is strictly linear. Consequently, the above as well as a history like this
would be linearized:
o--o <- origin
\
x--x
\ \
x--M--x--x <- master
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t3400-rebase.sh')
-rwxr-xr-x | t/t3400-rebase.sh | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh index 95f3a2a556..62205b2531 100755 --- a/t/t3400-rebase.sh +++ b/t/t3400-rebase.sh @@ -12,7 +12,7 @@ This test runs git rebase and checks that the author information is not lost. export GIT_AUTHOR_EMAIL=bogus_email_address test_expect_success \ - 'prepare repository with topic branch, then rebase against master' \ + 'prepare repository with topic branches' \ 'echo First > A && git update-index --add A && git-commit -m "Add A." && @@ -24,11 +24,48 @@ test_expect_success \ echo Third >> A && git update-index A && git-commit -m "Modify A." && + git checkout -b side my-topic-branch && + echo Side >> C && + git add C && + git commit -m "Add C" && + git checkout -b nonlinear my-topic-branch && + echo Edit >> B && + git add B && + git commit -m "Modify B" && + git merge side && + git checkout -b upstream-merged-nonlinear && + git merge master && git checkout -f my-topic-branch && + git tag topic +' + +test_expect_success 'rebase against master' ' git rebase master' test_expect_failure \ 'the rebase operation should not have destroyed author information' \ 'git log | grep "Author:" | grep "<>"' +test_expect_success 'rebase after merge master' ' + git reset --hard topic && + git merge master && + git rebase master && + ! git show | grep "^Merge:" +' + +test_expect_success 'rebase of history with merges is linearized' ' + git checkout nonlinear && + test 4 = $(git rev-list master.. | wc -l) && + git rebase master && + test 3 = $(git rev-list master.. | wc -l) +' + +test_expect_success \ + 'rebase of history with merges after upstream merge is linearized' ' + git checkout upstream-merged-nonlinear && + test 5 = $(git rev-list master.. | wc -l) && + git rebase master && + test 3 = $(git rev-list master.. | wc -l) +' + test_done |