t6022: Add tests for reversing order of merges when D/F conflicts present
When merging two branches with some path involved in a D/F conflict, the choice of which branch to merge into the other matters for (at least) two reasons: (1) whether the working copy has a directory full of files that is in the way of a file, or a file exists that is in the way of a directory of files, (2) when the directory full of files does not disappear due to the merge, what files at the same paths should be renamed to (e.g. filename~HEAD vs. filename~otherbranch). Add some tests that reverse the merge order of two other tests, and which verify the contents are as expected (namely, that the results are identical other than modified-for-uniqueness filenames involving branch names). Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
af6e175199
commit
3398f2f583
|
@ -415,6 +415,28 @@ test_expect_failure 'Rename+D/F conflict; renamed file merges but dir in way' '
|
||||||
test_cmp expected dir~HEAD
|
test_cmp expected dir~HEAD
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_failure 'Same as previous, but merged other way' '
|
||||||
|
git reset --hard &&
|
||||||
|
rm -rf dir~* &&
|
||||||
|
git checkout -q dir-in-way^0 &&
|
||||||
|
test_must_fail git merge --strategy=recursive renamed-file-has-no-conflicts >output 2>errors &&
|
||||||
|
|
||||||
|
! grep "error: refusing to lose untracked file at" errors &&
|
||||||
|
grep "CONFLICT (delete/modify): dir/file-in-the-way" output &&
|
||||||
|
grep "Auto-merging dir" output &&
|
||||||
|
grep "Adding as dir~renamed-file-has-no-conflicts instead" output &&
|
||||||
|
|
||||||
|
test 2 = "$(git ls-files -u | wc -l)" &&
|
||||||
|
test 2 = "$(git ls-files -u dir/file-in-the-way | wc -l)" &&
|
||||||
|
|
||||||
|
test_must_fail git diff --quiet &&
|
||||||
|
test_must_fail git diff --cached --quiet &&
|
||||||
|
|
||||||
|
test -f dir/file-in-the-way &&
|
||||||
|
test -f dir~renamed-file-has-no-conflicts &&
|
||||||
|
test_cmp expected dir~renamed-file-has-no-conflicts
|
||||||
|
'
|
||||||
|
|
||||||
cat >expected <<\EOF &&
|
cat >expected <<\EOF &&
|
||||||
1
|
1
|
||||||
2
|
2
|
||||||
|
@ -469,4 +491,40 @@ test_expect_failure 'Rename+D/F conflict; renamed file cannot merge and dir in t
|
||||||
test_cmp expected dir~HEAD
|
test_cmp expected dir~HEAD
|
||||||
'
|
'
|
||||||
|
|
||||||
|
cat >expected <<\EOF &&
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
10
|
||||||
|
<<<<<<< HEAD
|
||||||
|
11
|
||||||
|
=======
|
||||||
|
12
|
||||||
|
>>>>>>> renamed-file-has-conflicts
|
||||||
|
EOF
|
||||||
|
|
||||||
|
test_expect_failure 'Same as previous, but merged other way' '
|
||||||
|
git reset --hard &&
|
||||||
|
rm -rf dir~* &&
|
||||||
|
git checkout -q dir-in-way^0 &&
|
||||||
|
test_must_fail git merge --strategy=recursive renamed-file-has-conflicts &&
|
||||||
|
|
||||||
|
test 5 = "$(git ls-files -u | wc -l)" &&
|
||||||
|
test 3 = "$(git ls-files -u dir | grep -v file-in-the-way | wc -l)" &&
|
||||||
|
test 2 = "$(git ls-files -u dir/file-in-the-way | wc -l)" &&
|
||||||
|
|
||||||
|
test_must_fail git diff --quiet &&
|
||||||
|
test_must_fail git diff --cached --quiet &&
|
||||||
|
|
||||||
|
test -f dir/file-in-the-way &&
|
||||||
|
test -f dir~renamed-file-has-conflicts &&
|
||||||
|
test_cmp expected dir~renamed-file-has-conflicts
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Loading…
Reference in New Issue