#!/bin/sh test_description="merges with unrelated index changes" . ./test-lib.sh # Testcase for some simple merges # A # o-----o B # \ # \---o C # \ # \-o D # \ # o E # Commit A: some file a # Commit B: adds file b, modifies end of a # Commit C: adds file c # Commit D: adds file d, modifies beginning of a # Commit E: renames a->subdir/a, adds subdir/e test_expect_success 'setup trivial merges' ' test_seq 1 10 >a && git add a && test_tick && git commit -m A && git branch A && git branch B && git branch C && git branch D && git branch E && git checkout B && echo b >b && echo 11 >>a && git add a b && test_tick && git commit -m B && git checkout C && echo c >c && git add c && test_tick && git commit -m C && git checkout D && test_seq 2 10 >a && echo d >d && git add a d && test_tick && git commit -m D && git checkout E && mkdir subdir && git mv a subdir/a && echo e >subdir/e && git add subdir && test_tick && git commit -m E ' test_expect_success 'ff update' ' git reset --hard && git checkout A^0 && touch random_file && git add random_file && git merge E^0 && test_must_fail git rev-parse HEAD:random_file && test "$(git diff --name-only --cached E)" = "random_file" ' test_expect_success 'ff update, important file modified' ' git reset --hard && git checkout A^0 && mkdir subdir && touch subdir/e && git add subdir/e && test_must_fail git merge E^0 ' test_expect_success 'resolve, trivial' ' git reset --hard && git checkout B^0 && touch random_file && git add random_file && test_must_fail git merge -s resolve C^0 ' test_expect_success 'resolve, non-trivial' ' git reset --hard && git checkout B^0 && touch random_file && git add random_file && test_must_fail git merge -s resolve D^0 ' test_expect_success 'recursive' ' git reset --hard && git checkout B^0 && touch random_file && git add random_file && test_must_fail git merge -s recursive C^0 ' test_expect_success 'octopus, unrelated file touched' ' git reset --hard && git checkout B^0 && touch random_file && git add random_file && test_must_fail git merge C^0 D^0 ' test_expect_success 'octopus, related file removed' ' git reset --hard && git checkout B^0 && git rm b && test_must_fail git merge C^0 D^0 ' test_expect_success 'octopus, related file modified' ' git reset --hard && git checkout B^0 && echo 12 >>a && git add a && test_must_fail git merge C^0 D^0 ' test_expect_success 'ours' ' git reset --hard && git checkout B^0 && touch random_file && git add random_file && test_must_fail git merge -s ours C^0 ' test_expect_success 'subtree' ' git reset --hard && git checkout B^0 && touch random_file && git add random_file && test_must_fail git merge -s subtree E^0 ' test_done