t6042: add testcase covering rename/add/delete conflict type
If a file is renamed on one side of history, and the other side of history both deletes the original file and adds a new unrelated file in the way of the rename, then we have what I call a rename/add/delete conflict. Add a testcase covering this scenario. Reported-by: Robert Dailey <rcdailey.lists@gmail.com> Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
e3331758f1
commit
11d9ade10e
@ -693,4 +693,70 @@ test_expect_success 'rename/rename/add-dest merge still knows about conflicting
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
# Testcase rad, rename/add/delete
|
||||||
|
# Commit O: foo
|
||||||
|
# Commit A: rm foo, add different bar
|
||||||
|
# Commit B: rename foo->bar
|
||||||
|
# Expected: CONFLICT (rename/add/delete), two-way merged bar
|
||||||
|
|
||||||
|
test_expect_success 'rad-setup: rename/add/delete conflict' '
|
||||||
|
test_create_repo rad &&
|
||||||
|
(
|
||||||
|
cd rad &&
|
||||||
|
echo "original file" >foo &&
|
||||||
|
git add foo &&
|
||||||
|
git commit -m "original" &&
|
||||||
|
|
||||||
|
git branch O &&
|
||||||
|
git branch A &&
|
||||||
|
git branch B &&
|
||||||
|
|
||||||
|
git checkout A &&
|
||||||
|
git rm foo &&
|
||||||
|
echo "different file" >bar &&
|
||||||
|
git add bar &&
|
||||||
|
git commit -m "Remove foo, add bar" &&
|
||||||
|
|
||||||
|
git checkout B &&
|
||||||
|
git mv foo bar &&
|
||||||
|
git commit -m "rename foo to bar"
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_failure 'rad-check: rename/add/delete conflict' '
|
||||||
|
(
|
||||||
|
cd rad &&
|
||||||
|
|
||||||
|
git checkout B^0 &&
|
||||||
|
test_must_fail git merge -s recursive A^0 >out 2>err &&
|
||||||
|
|
||||||
|
# Not sure whether the output should contain just one
|
||||||
|
# "CONFLICT (rename/add/delete)" line, or if it should break
|
||||||
|
# it into a pair of "CONFLICT (rename/delete)" and
|
||||||
|
# "CONFLICT (rename/add)"; allow for either.
|
||||||
|
test_i18ngrep "CONFLICT (rename.*add)" 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:bar :3:bar &&
|
||||||
|
git rev-parse >expect \
|
||||||
|
B:bar A:bar &&
|
||||||
|
|
||||||
|
test_cmp file_is_missing foo &&
|
||||||
|
# bar should have two-way merged contents of the different
|
||||||
|
# versions of bar; check that content from both sides is
|
||||||
|
# present.
|
||||||
|
grep original bar &&
|
||||||
|
grep different bar
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Reference in New Issue
Block a user