"Elijah Newren via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > From: Elijah Newren <newren@xxxxxxxxx> > > This is an attempt at minimalizing a testcase reported by Glen Choo > with tensorflow where merge-ort would report an assertion failure: > > Assertion failed: (ci->filemask == 2 || ci->filemask == 4), function apply_directory_rename_modifications, file merge-ort.c, line 2410 First of all, thanks for this fix - I've verified with Glen Choo's test cases and it does fix it. > diff --git a/t/t6423-merge-rename-directories.sh b/t/t6423-merge-rename-directories.sh > index 479db32cd62..296c04f8046 100755 > --- a/t/t6423-merge-rename-directories.sh > +++ b/t/t6423-merge-rename-directories.sh > @@ -5199,6 +5199,108 @@ test_expect_success '12k: Directory rename with sibling causes rename-to-self' ' > ) > ' > > +# Testcase 12l, Both sides rename a directory into the other side, both add > +# a file with after directory renames are the same filename > +# Commit O: sub1/file, sub2/other > +# Commit A: sub3/file, sub2/{other, new_add_add_file_1} > +# Commit B: sub1/{file, newfile}, sub1/sub2/{other, new_add_add_file_2} > +# > +# In words: > +# A: sub1/ -> sub3/, add sub2/new_add_add_file_1 > +# B: sub2/ -> sub1/sub2, add sub1/newfile, add sub1/sub2/new_add_add_file_2 > +# > +# Expected: sub3/{file, newfile, sub2/other} > +# CONFLICT (add/add): sub3/sub2/new_add_add_file The "expected" might need to be updated. After all patches are applied, this is the tree I get (note that it's "sub1/sub2/new_add_add_file, not "sub3/sub2/new_add_add_file"): . |-- sub1 | `-- sub2 | `-- new_add_add_file `-- sub3 |-- file |-- newfile `-- sub2 `-- other Also, at first glance, "newfile" shouldn't belong in a minimal reproduction, but it somehow changes the output. When I apply this diff (to the state after all patches are applied): diff --git a/t/t6423-merge-rename-directories.sh b/t/t6423-merge-rename-directories.sh index 4286ae987c..9472fb7233 100755 --- a/t/t6423-merge-rename-directories.sh +++ b/t/t6423-merge-rename-directories.sh @@ -5237,7 +5237,6 @@ test_setup_12l () { git checkout B && echo dissimilar >sub2/new_add_add_file && - echo brand >sub1/newfile && git add sub1 sub2 && git mv sub2 sub1 && test_tick && @@ -5255,14 +5254,14 @@ test_expect_merge_algorithm failure success '12l (B into A): Rename into each ot test_must_fail git -c merge.directoryRenames=true merge -s recursive B^0 && git ls-files -s >out && - test_line_count = 5 out && + test_line_count = 4 out && git rev-parse >actual \ - :0:sub3/file :0:sub3/newfile :0:sub3/sub2/other \ + :0:sub3/file :0:sub3/sub2/other \ :2:sub1/sub2/new_add_add_file \ :3:sub1/sub2/new_add_add_file && git rev-parse >expect \ - O:sub1/file B:sub1/newfile O:sub2/other \ + O:sub1/file O:sub2/other \ A:sub2/new_add_add_file \ B:sub1/sub2/new_add_add_file && test_cmp expect actual && I get: . |-- sub1 | `-- sub2 | |-- new_add_add_file | `-- other `-- sub3 `-- file (Note the path to "other".) I haven't figured out what's going on, though.