On Tue, Jun 04, 2019 at 01:27:50PM -0700, Elijah Newren wrote: > Changes since v1: > * Minor tweaks suggested by SZEDER > diff --git a/t/t6042-merge-rename-corner-cases.sh b/t/t6042-merge-rename-corner-cases.sh > index 09dfa8bd92..3fe2cd91dc 100755 > --- a/t/t6042-merge-rename-corner-cases.sh > +++ b/t/t6042-merge-rename-corner-cases.sh > @@ -411,6 +411,124 @@ test_expect_success 'disappearing dir in rename/directory conflict handled' ' > ) > ' > > +# Test for basic rename/add-dest conflict, with rename needing content merge: > +# Commit O: a > +# Commit A: rename a->b, modifying b too > +# Commit B: modify a, add different b > + > +test_expect_success 'setup rename-with-content-merge vs. add' ' > + test_create_repo rename-with-content-merge-and-add && > + ( > + cd rename-with-content-merge-and-add && > + > + test_seq 1 5 >a && > + git add a && > + git commit -m O && > + git tag O && > + > + git checkout -b A O && > + git mv a b && > + test_seq 0 5 >b && > + git add b && > + git commit -m A && > + > + git checkout -b B O && > + echo 6 >>a && > + echo hello world >b && > + git add a b && > + git commit -m B > + ) > +' > + > +test_expect_success 'handle rename-with-content-merge vs. add' ' > + ( > + cd rename-with-content-merge-and-add && > + > + git checkout A^0 && > + > + test_must_fail git merge -s recursive B^0 >out && > + test_i18ngrep "CONFLICT (rename/add)" out && > + > + git ls-files -s >out && > + test_line_count = 2 out && > + git ls-files -u >out && > + test_line_count = 2 out && > + # Also, make sure both unmerged entries are for "b" > + git ls-files -u b >out && > + test_line_count = 2 out && > + git ls-files -o >out && > + test_line_count = 1 out && > + > + test_path_is_missing a && > + test_path_is_file b && > + > + test_seq 0 6 >tmp && > + git hash-object tmp >expect && > + git rev-parse B:b >>expect && > + git rev-parse >actual \ > + :2:b :3:b && > + test_cmp expect actual && > + > + # Test that the two-way merge in b is as expected > + git cat-file -p :2:b >>ours && > + git cat-file -p :3:b >>theirs && > + >empty && > + test_must_fail git merge-file \ > + -L "HEAD" \ > + -L "" \ > + -L "B^0" \ > + ours empty theirs && > + test_cmp ours b This one is OK. > + ) > +' > + > +test_expect_success 'handle rename-with-content-merge vs. add, merge other way' ' > + ( > + cd rename-with-content-merge-and-add && > + > + git reset --hard && > + git clean -fdx && > + > + git checkout B^0 && > + > + test_must_fail git merge -s recursive A^0 >out && > + test_i18ngrep "CONFLICT (rename/add)" out && > + > + git ls-files -s >out && > + test_line_count = 2 out && > + git ls-files -u >out && > + test_line_count = 2 out && > + # Also, make sure both unmerged entries are for "b" > + git ls-files -u b >out && > + test_line_count = 2 out && > + git ls-files -o >out && > + test_line_count = 1 out && > + > + test_path_is_missing a && > + test_path_is_file b && > + > + test_seq 0 6 >tmp && > + git rev-parse B:b >expect && > + git hash-object tmp >>expect && > + git rev-parse >actual \ > + :2:b :3:b && > + test_cmp expect actual && > + > + # Test that the two-way merge in b is as expected > + git cat-file -p :2:b >>ours && > + git cat-file -p :3:b >>theirs && > + >empty && > + test_must_fail git merge-file \ > + -L "HEAD" \ > + -L "" \ > + -L "A^0" \ > + ours empty theirs && > + git hash-object b >actual && > + git hash-object ours >expect && > + test_cmp ours b Here, however, you only changed what test_cmp looks at, but still kept the two 'git hash-object' invocations, and their output will never be looked at. > + ) > +' > + > # Test for all kinds of things that can go wrong with rename/rename (2to1): > # Commit A: new files: a & b > # Commit B: rename a->c, modify b > -- > 2.22.0.rc3.1.gd51cc00994 >