|
|
@ -582,4 +582,157 @@ test_expect_success '2b-check: Directory split into two on one side, with equal |
|
|
|
# messages are handled correctly. |
|
|
|
# messages are handled correctly. |
|
|
|
########################################################################### |
|
|
|
########################################################################### |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
########################################################################### |
|
|
|
|
|
|
|
# SECTION 3: Path in question is the source path for some rename already |
|
|
|
|
|
|
|
# |
|
|
|
|
|
|
|
# Combining cases from Section 1 and trying to handle them could lead to |
|
|
|
|
|
|
|
# directory renaming detection being over-applied. So, this section |
|
|
|
|
|
|
|
# provides some good testcases to check that the implementation doesn't go |
|
|
|
|
|
|
|
# too far. |
|
|
|
|
|
|
|
########################################################################### |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Testcase 3a, Avoid implicit rename if involved as source on other side |
|
|
|
|
|
|
|
# (Related to testcases 1c and 1f) |
|
|
|
|
|
|
|
# Commit O: z/{b,c,d} |
|
|
|
|
|
|
|
# Commit A: z/{b,c,d} (no change) |
|
|
|
|
|
|
|
# Commit B: y/{b,c}, x/d |
|
|
|
|
|
|
|
# Expected: y/{b,c}, x/d |
|
|
|
|
|
|
|
test_expect_success '3a-setup: Avoid implicit rename if involved as source on other side' ' |
|
|
|
|
|
|
|
test_create_repo 3a && |
|
|
|
|
|
|
|
( |
|
|
|
|
|
|
|
cd 3a && |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mkdir z && |
|
|
|
|
|
|
|
echo b >z/b && |
|
|
|
|
|
|
|
echo c >z/c && |
|
|
|
|
|
|
|
echo d >z/d && |
|
|
|
|
|
|
|
git add z && |
|
|
|
|
|
|
|
test_tick && |
|
|
|
|
|
|
|
git commit -m "O" && |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
git branch O && |
|
|
|
|
|
|
|
git branch A && |
|
|
|
|
|
|
|
git branch B && |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
git checkout A && |
|
|
|
|
|
|
|
test_tick && |
|
|
|
|
|
|
|
git commit --allow-empty -m "A" && |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
git checkout B && |
|
|
|
|
|
|
|
mkdir y && |
|
|
|
|
|
|
|
mkdir x && |
|
|
|
|
|
|
|
git mv z/b y/ && |
|
|
|
|
|
|
|
git mv z/c y/ && |
|
|
|
|
|
|
|
git mv z/d x/ && |
|
|
|
|
|
|
|
rmdir z && |
|
|
|
|
|
|
|
test_tick && |
|
|
|
|
|
|
|
git commit -m "B" |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test_expect_success '3a-check: Avoid implicit rename if involved as source on other side' ' |
|
|
|
|
|
|
|
( |
|
|
|
|
|
|
|
cd 3a && |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
git checkout A^0 && |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
git merge -s recursive B^0 && |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
git ls-files -s >out && |
|
|
|
|
|
|
|
test_line_count = 3 out && |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
git rev-parse >actual \ |
|
|
|
|
|
|
|
HEAD:y/b HEAD:y/c HEAD:x/d && |
|
|
|
|
|
|
|
git rev-parse >expect \ |
|
|
|
|
|
|
|
O:z/b O:z/c O:z/d && |
|
|
|
|
|
|
|
test_cmp expect actual |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Testcase 3b, Avoid implicit rename if involved as source on other side |
|
|
|
|
|
|
|
# (Related to testcases 5c and 7c, also kind of 1e and 1f) |
|
|
|
|
|
|
|
# Commit O: z/{b,c,d} |
|
|
|
|
|
|
|
# Commit A: y/{b,c}, x/d |
|
|
|
|
|
|
|
# Commit B: z/{b,c}, w/d |
|
|
|
|
|
|
|
# Expected: y/{b,c}, CONFLICT:(z/d -> x/d vs. w/d) |
|
|
|
|
|
|
|
# NOTE: We're particularly checking that since z/d is already involved as |
|
|
|
|
|
|
|
# a source in a file rename on the same side of history, that we don't |
|
|
|
|
|
|
|
# get it involved in directory rename detection. If it were, we might |
|
|
|
|
|
|
|
# end up with CONFLICT:(z/d -> y/d vs. x/d vs. w/d), i.e. a |
|
|
|
|
|
|
|
# rename/rename/rename(1to3) conflict, which is just weird. |
|
|
|
|
|
|
|
test_expect_success '3b-setup: Avoid implicit rename if involved as source on current side' ' |
|
|
|
|
|
|
|
test_create_repo 3b && |
|
|
|
|
|
|
|
( |
|
|
|
|
|
|
|
cd 3b && |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mkdir z && |
|
|
|
|
|
|
|
echo b >z/b && |
|
|
|
|
|
|
|
echo c >z/c && |
|
|
|
|
|
|
|
echo d >z/d && |
|
|
|
|
|
|
|
git add z && |
|
|
|
|
|
|
|
test_tick && |
|
|
|
|
|
|
|
git commit -m "O" && |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
git branch O && |
|
|
|
|
|
|
|
git branch A && |
|
|
|
|
|
|
|
git branch B && |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
git checkout A && |
|
|
|
|
|
|
|
mkdir y && |
|
|
|
|
|
|
|
mkdir x && |
|
|
|
|
|
|
|
git mv z/b y/ && |
|
|
|
|
|
|
|
git mv z/c y/ && |
|
|
|
|
|
|
|
git mv z/d x/ && |
|
|
|
|
|
|
|
rmdir z && |
|
|
|
|
|
|
|
test_tick && |
|
|
|
|
|
|
|
git commit -m "A" && |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
git checkout B && |
|
|
|
|
|
|
|
mkdir w && |
|
|
|
|
|
|
|
git mv z/d w/ && |
|
|
|
|
|
|
|
test_tick && |
|
|
|
|
|
|
|
git commit -m "B" |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test_expect_success '3b-check: Avoid implicit rename if involved as source on current side' ' |
|
|
|
|
|
|
|
( |
|
|
|
|
|
|
|
cd 3b && |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
git checkout A^0 && |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test_must_fail git merge -s recursive B^0 >out && |
|
|
|
|
|
|
|
test_i18ngrep CONFLICT.*rename/rename.*z/d.*x/d.*w/d out && |
|
|
|
|
|
|
|
test_i18ngrep ! CONFLICT.*rename/rename.*y/d out && |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
git ls-files -s >out && |
|
|
|
|
|
|
|
test_line_count = 5 out && |
|
|
|
|
|
|
|
git ls-files -u >out && |
|
|
|
|
|
|
|
test_line_count = 3 out && |
|
|
|
|
|
|
|
git ls-files -o >out && |
|
|
|
|
|
|
|
test_line_count = 1 out && |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
git rev-parse >actual \ |
|
|
|
|
|
|
|
:0:y/b :0:y/c :1:z/d :2:x/d :3:w/d && |
|
|
|
|
|
|
|
git rev-parse >expect \ |
|
|
|
|
|
|
|
O:z/b O:z/c O:z/d O:z/d O:z/d && |
|
|
|
|
|
|
|
test_cmp expect actual && |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test_path_is_missing z/d && |
|
|
|
|
|
|
|
git hash-object >actual \ |
|
|
|
|
|
|
|
x/d w/d && |
|
|
|
|
|
|
|
git rev-parse >expect \ |
|
|
|
|
|
|
|
O:z/d O:z/d && |
|
|
|
|
|
|
|
test_cmp expect actual |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
########################################################################### |
|
|
|
|
|
|
|
# Rules suggested by section 3: |
|
|
|
|
|
|
|
# |
|
|
|
|
|
|
|
# Avoid directory-rename-detection for a path, if that path is the source |
|
|
|
|
|
|
|
# of a rename on either side of a merge. |
|
|
|
|
|
|
|
########################################################################### |
|
|
|
|
|
|
|
|
|
|
|
test_done |
|
|
|
test_done |
|
|
|