@matheusbsbs / matheus-bagliano / commits / 71f7ffcc02
Fork 0

merge-recursive: Delay modify/delete conflicts if D/F conflict present

When handling merges with modify/delete conflicts, if the modified path is involved in a D/F conflict, handle the issue in process_df_entry() rather than process_entry(). Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Elijah Newren committed Sep 20, 2010 at 02:29 UTC 71f7ffcc02a2f38436c59146b86897389130a538
1 file changed +9
merge-recursive.c
+9
@@ -1249,6 +1249,10 @@ static int process_entry(struct merge_options *o,
1249 output(o, 2, "Removing %s", path);
1250 /* do not touch working file if it did not exist */
1251 remove_file(o, 1, path, !a_sha);
1252 + } else if (string_list_has_string(&o->current_directory_set,
1253 + path)) {
1254 + entry->processed = 0;
1255 + return 1; /* Assume clean till processed */
1256 } else {
1257 /* Deleted in one and changed in the other */
1258 clean_merge = 0;
@@ -1367,6 +1371,11 @@ static int process_df_entry(struct merge_options *o,
1371 entry->processed = 0;
1372 break;
1373 }
1374 + } else if (o_sha && (!a_sha || !b_sha)) {
1375 + /* Modify/delete; deleted side may have put a directory in the way */
1376 + clean_merge = 0;
1377 + handle_delete_modify(o, path,
1378 + a_sha, a_mode, b_sha, b_mode);
1379 } else if (!o_sha && !!a_sha != !!b_sha) {
1380 /* directory -> (directory, file) */
1381 const char *add_branch;