t6036: add a failed conflict detection case with submodule add/add

Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Elijah Newren committed Jun 30, 2018 at 21:11 UTC a79968bed184029139ddcd0a4e8171a2c84852ee
1 file changed +88
t/t6036-recursive-corner-cases.sh
+88
@@ -1026,4 +1026,92 @@ test_expect_failure 'check submodule modify/modify' '
1026 )
1027 '
1028
1029 +#
1030 +# criss-cross with add/add on a submodule:
1031 +#
1032 +# B D
1033 +# o---o
1034 +# / \ / \
1035 +# A o X ? F
1036 +# \ / \ /
1037 +# o---o
1038 +# C E
1039 +#
1040 +# Commit A: nothing of note
1041 +# Commit B: introduce submodule repo
1042 +# Commit C: introduce submodule repo at different commit
1043 +# Commit D: merge B&C, resolving in favor of B
1044 +# Commit E: merge B&C, resolving in favor of C
1045 +#
1046 +# This is an obvious add/add conflict for the submodule 'repo'. Can
1047 +# git detect it?
1048 +
1049 +test_expect_success 'setup submodule add/add' '
1050 + test_create_repo submodule-add-add &&
1051 + (
1052 + cd submodule-add-add &&
1053 +
1054 + test_create_repo submod &&
1055 + (
1056 + cd submod &&
1057 + touch file-A &&
1058 + git add file-A &&
1059 + git commit -m A &&
1060 + git tag A &&
1061 +
1062 + git checkout -b B A &&
1063 + touch file-B &&
1064 + git add file-B &&
1065 + git commit -m B &&
1066 + git tag B &&
1067 +
1068 + git checkout -b C A &&
1069 + touch file-C &&
1070 + git add file-C &&
1071 + git commit -m C &&
1072 + git tag C
1073 + ) &&
1074 +
1075 + touch irrelevant-file &&
1076 + git add irrelevant-file &&
1077 + git commit -m A &&
1078 + git tag A &&
1079 +
1080 + git checkout -b B A &&
1081 + git -C submod reset --hard B &&
1082 + git add submod &&
1083 + git commit -m B &&
1084 +
1085 + git checkout -b C A &&
1086 + git -C submod reset --hard C &&
1087 + git add submod &&
1088 + git commit -m C &&
1089 +
1090 + git checkout -q B^0 &&
1091 + git merge -s ours -m D C^0 &&
1092 + git tag D &&
1093 +
1094 + git checkout -q C^0 &&
1095 + git merge -s ours -m E B^0 &&
1096 + git tag E
1097 + )
1098 +'
1099 +
1100 +test_expect_failure 'check submodule add/add' '
1101 + (
1102 + cd submodule-add-add &&
1103 +
1104 + git checkout D^0 &&
1105 +
1106 + test_must_fail git merge -s recursive E^0 &&
1107 +
1108 + git ls-files -s >out &&
1109 + test_line_count = 3 out &&
1110 + git ls-files -u >out &&
1111 + test_line_count = 2 out &&
1112 + git ls-files -o >out &&
1113 + test_line_count = 1 out
1114 + )
1115 +'
1116 +
1117 test_done