t6036: add a failed conflict detection case: regular files, different modes
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
5d1daf30cce5744b219002e0a6da015a13216cd1
1 file changed
+67
t/t6036-recursive-corner-cases.sh
+67
@@ -1189,4 +1189,71 @@ test_expect_failure 'check conflicting entry types (submodule vs symlink)' '
1189
)
1190
'
1191
1192
+#
1193
+# criss-cross with regular files that have conflicting modes:
1194
+#
1195
+# B D
1196
+# o---o
1197
+# / \ / \
1198
+# A o X ? F
1199
+# \ / \ /
1200
+# o---o
1201
+# C E
1202
+#
1203
+# Commit A: nothing of note
1204
+# Commit B: introduce file source_me.bash, not executable
1205
+# Commit C: introduce file source_me.bash, executable
1206
+# Commit D: merge B&C, resolving in favor of B
1207
+# Commit E: merge B&C, resolving in favor of C
1208
+#
1209
+# This is an obvious add/add mode conflict. Can git detect it?
1210
+
1211
+test_expect_success 'setup conflicting modes for regular file' '
1212
+ test_create_repo regular-file-mode-conflict &&
1213
+ (
1214
+ cd regular-file-mode-conflict &&
1215
+
1216
+ touch irrelevant-file &&
1217
+ git add irrelevant-file &&
1218
+ git commit -m A &&
1219
+ git tag A &&
1220
+
1221
+ git checkout -b B A &&
1222
+ echo "command_to_run" >source_me.bash &&
1223
+ git add source_me.bash &&
1224
+ git commit -m B &&
1225
+
1226
+ git checkout -b C A &&
1227
+ echo "command_to_run" >source_me.bash &&
1228
+ git add source_me.bash &&
1229
+ test_chmod +x source_me.bash &&
1230
+ git commit -m C &&
1231
+
1232
+ git checkout -q B^0 &&
1233
+ git merge -s ours -m D C^0 &&
1234
+ git tag D &&
1235
+
1236
+ git checkout -q C^0 &&
1237
+ git merge -s ours -m E B^0 &&
1238
+ git tag E
1239
+ )
1240
+'
1241
+
1242
+test_expect_failure 'check conflicting modes for regular file' '
1243
+ (
1244
+ cd regular-file-mode-conflict &&
1245
+
1246
+ git checkout D^0 &&
1247
+
1248
+ test_must_fail git merge -s recursive E^0 &&
1249
+
1250
+ git ls-files -s >out &&
1251
+ test_line_count = 3 out &&
1252
+ git ls-files -u >out &&
1253
+ test_line_count = 2 out &&
1254
+ git ls-files -o >out &&
1255
+ test_line_count = 1 out
1256
+ )
1257
+'
1258
+
1259
test_done