@ -1118,6 +1118,26 @@ error_return:
@@ -1118,6 +1118,26 @@ error_return:
return ret;
}
static void handle_delete_modify(struct merge_options *o,
const char *path,
unsigned char *a_sha, int a_mode,
unsigned char *b_sha, int b_mode)
{
if (!a_sha) {
output(o, 1, "CONFLICT (delete/modify): %s deleted in %s "
"and modified in %s. Version %s of %s left in tree.",
path, o->branch1,
o->branch2, o->branch2, path);
update_file(o, 0, b_sha, b_mode, path);
} else {
output(o, 1, "CONFLICT (delete/modify): %s deleted in %s "
"and modified in %s. Version %s of %s left in tree.",
path, o->branch2,
o->branch1, o->branch1, path);
update_file(o, 0, a_sha, a_mode, path);
}
}
/* Per entry merge function */
static int process_entry(struct merge_options *o,
const char *path, struct stage_data *entry)
@ -1150,19 +1170,8 @@ static int process_entry(struct merge_options *o,
@@ -1150,19 +1170,8 @@ static int process_entry(struct merge_options *o,
} else {
/* Deleted in one and changed in the other */
clean_merge = 0;
if (!a_sha) {
output(o, 1, "CONFLICT (delete/modify): %s deleted in %s "
"and modified in %s. Version %s of %s left in tree.",
path, o->branch1,
o->branch2, o->branch2, path);
update_file(o, 0, b_sha, b_mode, path);
} else {
output(o, 1, "CONFLICT (delete/modify): %s deleted in %s "
"and modified in %s. Version %s of %s left in tree.",
path, o->branch2,
o->branch1, o->branch1, path);
update_file(o, 0, a_sha, a_mode, path);
}
handle_delete_modify(o, path,
a_sha, a_mode, b_sha, b_mode);
}
} else if ((!o_sha && a_sha && !b_sha) ||