Skip to content

Commit

Permalink
merge-recursive: Delay modify/delete conflicts if D/F conflict present
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Elijah Newren authored and Junio C Hamano committed Sep 30, 2010
1 parent 882fd11 commit 71f7ffc
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions merge-recursive.c
Original file line number Diff line number Diff line change
Expand Up @@ -1249,6 +1249,10 @@ static int process_entry(struct merge_options *o,
output(o, 2, "Removing %s", path);
/* do not touch working file if it did not exist */
remove_file(o, 1, path, !a_sha);
} else if (string_list_has_string(&o->current_directory_set,
path)) {
entry->processed = 0;
return 1; /* Assume clean till processed */
} else {
/* Deleted in one and changed in the other */
clean_merge = 0;
Expand Down Expand Up @@ -1367,6 +1371,11 @@ static int process_df_entry(struct merge_options *o,
entry->processed = 0;
break;
}
} else if (o_sha && (!a_sha || !b_sha)) {
/* Modify/delete; deleted side may have put a directory in the way */
clean_merge = 0;
handle_delete_modify(o, path,
a_sha, a_mode, b_sha, b_mode);
} else if (!o_sha && !!a_sha != !!b_sha) {
/* directory -> (directory, file) */
const char *add_branch;
Expand Down

0 comments on commit 71f7ffc

Please sign in to comment.