Merge branch 'jk/rebase-i-submodule-conflict-only' into maint
authorJunio C Hamano <gitster@pobox.com>
Wed, 2 May 2012 04:11:26 +0000 (21:11 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 2 May 2012 04:11:26 +0000 (21:11 -0700)
Giving "--continue" to a conflicted "rebase -i" session skipped a
commit that only results in changes to submodules.

By John Keeping
* jk/rebase-i-submodule-conflict-only:
rebase -i continue: don't skip commits that only change submodules

git-rebase--interactive.sh
t/t3404-rebase-interactive.sh
index 5812222eb9afa2b2903040d7cf32ab0fb33c3508..454674976ea7661b90d46ae5b5698be37b391166 100644 (file)
@@ -672,7 +672,7 @@ rearrange_squash () {
 case "$action" in
 continue)
        # do we have anything to commit?
-       if git diff-index --cached --quiet --ignore-submodules HEAD --
+       if git diff-index --cached --quiet HEAD --
        then
                : Nothing to commit -- skip this
        else
index b981572d736a1adf8da5281f31e580982e2059af..7fd2127625506c39371bda873ec2f56593b65aca 100755 (executable)
@@ -624,8 +624,38 @@ test_expect_success 'submodule rebase -i' '
        FAKE_LINES="1 squash 2 3" git rebase -i A
 '
 
+test_expect_success 'submodule conflict setup' '
+       git tag submodule-base &&
+       git checkout HEAD^ &&
+       (
+               cd sub && git checkout HEAD^ && echo 4 >elif &&
+               git add elif && git commit -m "submodule conflict"
+       ) &&
+       git add sub &&
+       test_tick &&
+       git commit -m "Conflict in submodule" &&
+       git tag submodule-topic
+'
+
+test_expect_success 'rebase -i continue with only submodule staged' '
+       test_must_fail git rebase -i submodule-base &&
+       git add sub &&
+       git rebase --continue &&
+       test $(git rev-parse submodule-base) != $(git rev-parse HEAD)
+'
+
+test_expect_success 'rebase -i continue with unstaged submodule' '
+       git checkout submodule-topic &&
+       git reset --hard &&
+       test_must_fail git rebase -i submodule-base &&
+       git reset &&
+       git rebase --continue &&
+       test $(git rev-parse submodule-base) = $(git rev-parse HEAD)
+'
+
 test_expect_success 'avoid unnecessary reset' '
        git checkout master &&
+       git reset --hard &&
        test-chmtime =123456789 file3 &&
        git update-index --refresh &&
        HEAD=$(git rev-parse HEAD) &&