Merge branch 'jk/git-connection-deadlock-fix' into maint
[gitweb.git] / t / t6020-merge-df.sh
index 490d3971142a87e940f3d27e7e7f068b276ff602..eec8f4e3edd85e350f5b8d8c86415317cce2aba1 100755 (executable)
@@ -6,21 +6,26 @@
 test_description='Test merge with directory/file conflicts'
 . ./test-lib.sh
 
-test_expect_success 'prepare repository' \
-'echo "Hello" > init &&
-git add init &&
-git commit -m "Initial commit" &&
-git branch B &&
-mkdir dir &&
-echo "foo" > dir/foo &&
-git add dir/foo &&
-git commit -m "File: dir/foo" &&
-git checkout B &&
-echo "file dir" > dir &&
-git add dir &&
-git commit -m "File: dir"'
-
-test_expect_code 1 'Merge with d/f conflicts' 'git merge "merge msg" B master'
+test_expect_success 'prepare repository' '
+       echo Hello >init &&
+       git add init &&
+       git commit -m initial &&
+
+       git branch B &&
+       mkdir dir &&
+       echo foo >dir/foo &&
+       git add dir/foo &&
+       git commit -m "File: dir/foo" &&
+
+       git checkout B &&
+       echo file dir >dir &&
+       git add dir &&
+       git commit -m "File: dir"
+'
+
+test_expect_success 'Merge with d/f conflicts' '
+       test_expect_code 1 git merge "merge msg" B master
+'
 
 test_expect_success 'F/D conflict' '
        git reset --hard &&
@@ -45,4 +50,51 @@ test_expect_success 'F/D conflict' '
        git merge master
 '
 
+test_expect_success 'setup modify/delete + directory/file conflict' '
+       git checkout --orphan modify &&
+       git rm -rf . &&
+       git clean -fdqx &&
+
+       printf "a\nb\nc\nd\ne\nf\ng\nh\n" >letters &&
+       git add letters &&
+       git commit -m initial &&
+
+       echo i >>letters &&
+       git add letters &&
+       git commit -m modified &&
+
+       git checkout -b delete HEAD^ &&
+       git rm letters &&
+       mkdir letters &&
+       >letters/file &&
+       git add letters &&
+       git commit -m deleted
+'
+
+test_expect_success 'modify/delete + directory/file conflict' '
+       git checkout delete^0 &&
+       test_must_fail git merge modify &&
+
+       test 3 = $(git ls-files -s | wc -l) &&
+       test 2 = $(git ls-files -u | wc -l) &&
+       test 1 = $(git ls-files -o | wc -l) &&
+
+       test -f letters/file &&
+       test -f letters~modify
+'
+
+test_expect_success 'modify/delete + directory/file conflict; other way' '
+       git reset --hard &&
+       git clean -f &&
+       git checkout modify^0 &&
+       test_must_fail git merge delete &&
+
+       test 3 = $(git ls-files -s | wc -l) &&
+       test 2 = $(git ls-files -u | wc -l) &&
+       test 1 = $(git ls-files -o | wc -l) &&
+
+       test -f letters/file &&
+       test -f letters~HEAD
+'
+
 test_done