| #!/bin/sh |
| # |
| # Copyright (c) 2006 Yann Dirson, based on t3400 by Amos Waterland |
| # |
| |
| test_description='git rebase should detect patches integrated upstream |
| |
| This test cherry-picks one local change of two into master branch, and |
| checks that git rebase succeeds with only the second patch in the |
| local branch. |
| ' |
| . ./test-lib.sh |
| |
| test_expect_success 'prepare repository with topic branch' ' |
| test_commit A && |
| git checkout -b my-topic-branch && |
| test_commit B && |
| test_commit C && |
| git checkout -f master && |
| test_commit A2 A.t |
| ' |
| |
| test_expect_success 'pick top patch from topic branch into master' ' |
| git cherry-pick C && |
| git checkout -f my-topic-branch |
| ' |
| |
| test_debug ' |
| git cherry master && |
| git format-patch -k --stdout --full-index master >/dev/null && |
| gitk --all & sleep 1 |
| ' |
| |
| test_expect_success 'rebase topic branch against new master and check git am did not get halted' ' |
| git rebase master && |
| test_path_is_missing .git/rebase-apply |
| ' |
| |
| test_expect_success 'rebase --merge topic branch that was partially merged upstream' ' |
| git reset --hard C && |
| git rebase --merge master && |
| test_path_is_missing .git/rebase-merge |
| ' |
| |
| test_expect_success 'rebase ignores empty commit' ' |
| git reset --hard A && |
| git commit --allow-empty -m empty && |
| test_commit D && |
| git rebase C && |
| test "$(git log --format=%s C..)" = "D" |
| ' |
| |
| test_expect_success 'rebase --keep-empty' ' |
| git reset --hard D && |
| git rebase --keep-empty C && |
| test "$(git log --format=%s C..)" = "D |
| empty" |
| ' |
| |
| test_expect_success 'rebase --keep-empty keeps empty even if already in upstream' ' |
| git reset --hard A && |
| git commit --allow-empty -m also-empty && |
| git rebase --keep-empty D && |
| test "$(git log --format=%s A..)" = "also-empty |
| D |
| empty" |
| ' |
| |
| test_done |