t6042: add testcase covering rename/rename(2to1)/delete/delete conflict
If either side of a rename/rename(2to1) conflict is itself also involved in a rename/delete conflict, then the conflict is a little more complex; we can even have what I'd call a rename/rename(2to1)/delete/delete conflict. (In some ways, this is similar to a rename/rename(1to2)/add/add conflict, as added in commit 3672c9714830 ("merge-recursive: Fix working copy handling for rename/rename/add/add", 2011-08-11)). Add a testcase for such a conflict. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
11d9ade10e
commit
eee73388f2
@ -759,4 +759,72 @@ test_expect_failure 'rad-check: rename/add/delete conflict' '
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
# Testcase rrdd, rename/rename(2to1)/delete/delete
|
||||||
|
# Commit O: foo, bar
|
||||||
|
# Commit A: rename foo->baz, rm bar
|
||||||
|
# Commit B: rename bar->baz, rm foo
|
||||||
|
# Expected: CONFLICT (rename/rename/delete/delete), two-way merged baz
|
||||||
|
|
||||||
|
test_expect_success 'rrdd-setup: rename/rename(2to1)/delete/delete conflict' '
|
||||||
|
test_create_repo rrdd &&
|
||||||
|
(
|
||||||
|
cd rrdd &&
|
||||||
|
echo foo >foo &&
|
||||||
|
echo bar >bar &&
|
||||||
|
git add foo bar &&
|
||||||
|
git commit -m O &&
|
||||||
|
|
||||||
|
git branch O &&
|
||||||
|
git branch A &&
|
||||||
|
git branch B &&
|
||||||
|
|
||||||
|
git checkout A &&
|
||||||
|
git mv foo baz &&
|
||||||
|
git rm bar &&
|
||||||
|
git commit -m "Rename foo, remove bar" &&
|
||||||
|
|
||||||
|
git checkout B &&
|
||||||
|
git mv bar baz &&
|
||||||
|
git rm foo &&
|
||||||
|
git commit -m "Rename bar, remove foo"
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_failure 'rrdd-check: rename/rename(2to1)/delete/delete conflict' '
|
||||||
|
(
|
||||||
|
cd rrdd &&
|
||||||
|
|
||||||
|
git checkout A^0 &&
|
||||||
|
test_must_fail git merge -s recursive B^0 >out 2>err &&
|
||||||
|
|
||||||
|
# Not sure whether the output should contain just one
|
||||||
|
# "CONFLICT (rename/rename/delete/delete)" line, or if it
|
||||||
|
# should break it into three: "CONFLICT (rename/rename)" and
|
||||||
|
# two "CONFLICT (rename/delete)" lines; allow for either.
|
||||||
|
test_i18ngrep "CONFLICT (rename/rename)" out &&
|
||||||
|
test_i18ngrep "CONFLICT (rename.*delete)" out &&
|
||||||
|
test_must_be_empty err &&
|
||||||
|
|
||||||
|
git ls-files -s >file_count &&
|
||||||
|
test_line_count = 2 file_count &&
|
||||||
|
git ls-files -u >file_count &&
|
||||||
|
test_line_count = 2 file_count &&
|
||||||
|
git ls-files -o >file_count &&
|
||||||
|
test_line_count = 2 file_count &&
|
||||||
|
|
||||||
|
git rev-parse >actual \
|
||||||
|
:2:baz :3:baz &&
|
||||||
|
git rev-parse >expect \
|
||||||
|
O:foo O:bar &&
|
||||||
|
|
||||||
|
test_cmp file_is_missing foo &&
|
||||||
|
test_cmp file_is_missing bar &&
|
||||||
|
# baz should have two-way merged contents of the original
|
||||||
|
# contents of foo and bar; check that content from both sides
|
||||||
|
# is present.
|
||||||
|
grep foo baz &&
|
||||||
|
grep bar baz
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
x
Reference in New Issue
Block a user