@@ -1114,4 +1114,79 @@ test_expect_failure 'check submodule add/add' '
1114
1114
)
1115
1115
'
1116
1116
1117
+ #
1118
+ # criss-cross with conflicting entry types:
1119
+ #
1120
+ # B D
1121
+ # o---o
1122
+ # / \ / \
1123
+ # A o X ? F
1124
+ # \ / \ /
1125
+ # o---o
1126
+ # C E
1127
+ #
1128
+ # Commit A: nothing of note
1129
+ # Commit B: introduce submodule 'path'
1130
+ # Commit C: introduce symlink 'path'
1131
+ # Commit D: merge B&C, resolving in favor of B
1132
+ # Commit E: merge B&C, resolving in favor of C
1133
+ #
1134
+ # This is an obvious add/add conflict for 'path'. Can git detect it?
1135
+
1136
+ test_expect_success ' setup conflicting entry types (submodule vs symlink)' '
1137
+ test_create_repo submodule-symlink-add-add &&
1138
+ (
1139
+ cd submodule-symlink-add-add &&
1140
+
1141
+ test_create_repo path &&
1142
+ (
1143
+ cd path &&
1144
+ touch file-B &&
1145
+ git add file-B &&
1146
+ git commit -m B &&
1147
+ git tag B
1148
+ ) &&
1149
+
1150
+ touch irrelevant-file &&
1151
+ git add irrelevant-file &&
1152
+ git commit -m A &&
1153
+ git tag A &&
1154
+
1155
+ git checkout -b B A &&
1156
+ git -C path reset --hard B &&
1157
+ git add path &&
1158
+ git commit -m B &&
1159
+
1160
+ git checkout -b C A &&
1161
+ rm -rf path/ &&
1162
+ test_ln_s_add irrelevant-file path &&
1163
+ git commit -m C &&
1164
+
1165
+ git checkout -q B^0 &&
1166
+ git merge -s ours -m D C^0 &&
1167
+ git tag D &&
1168
+
1169
+ git checkout -q C^0 &&
1170
+ git merge -s ours -m E B^0 &&
1171
+ git tag E
1172
+ )
1173
+ '
1174
+
1175
+ test_expect_failure ' check conflicting entry types (submodule vs symlink)' '
1176
+ (
1177
+ cd submodule-symlink-add-add &&
1178
+
1179
+ git checkout D^0 &&
1180
+
1181
+ test_must_fail git merge -s recursive E^0 &&
1182
+
1183
+ git ls-files -s >out &&
1184
+ test_line_count = 3 out &&
1185
+ git ls-files -u >out &&
1186
+ test_line_count = 2 out &&
1187
+ git ls-files -o >out &&
1188
+ test_line_count = 1 out
1189
+ )
1190
+ '
1191
+
1117
1192
test_done
0 commit comments