From: Junio C Hamano Date: Thu, 30 Sep 2010 00:25:28 +0000 (-0700) Subject: Merge branch 'en/rename-d-f' into en/merge-recursive X-Git-Tag: v1.7.4-rc0~101^2~39 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/a1155adc2dde23fd664ad47399379cd0561762af?ds=inline;hp=-c Merge branch 'en/rename-d-f' into en/merge-recursive * en/rename-d-f: merge-recursive: D/F conflicts where was_a_dir/file -> was_a_dir t3509: Add rename + D/F conflict testcase that recursive strategy fails --- a1155adc2dde23fd664ad47399379cd0561762af diff --combined merge-recursive.c index c574698819,5ea6d11507..51c0536d4e --- a/merge-recursive.c +++ b/merge-recursive.c @@@ -935,14 -935,7 +935,7 @@@ static int process_renames(struct merge try_merge = 0; - if (string_list_has_string(&o->current_directory_set, ren1_dst)) { - clean_merge = 0; - output(o, 1, "CONFLICT (rename/directory): Rename %s->%s in %s " - " directory %s added in %s", - ren1_src, ren1_dst, branch1, - ren1_dst, branch2); - conflict_rename_dir(o, ren1, branch1); - } else if (sha_eq(src_other.sha1, null_sha1)) { + if (sha_eq(src_other.sha1, null_sha1)) { clean_merge = 0; output(o, 1, "CONFLICT (rename/delete): Rename %s->%s in %s " "and deleted in %s", @@@ -955,12 -948,6 +948,12 @@@ ren1->pair->two : NULL, branch1 == o->branch1 ? NULL : ren1->pair->two, 1); + } else if ((dst_other.mode == ren1->pair->two->mode) && + sha_eq(dst_other.sha1, ren1->pair->two->sha1)) { + /* Added file on the other side + identical to the file being + renamed: clean merge */ + update_file(o, 1, ren1->pair->two->sha1, ren1->pair->two->mode, ren1_dst); } else if (!sha_eq(dst_other.sha1, null_sha1)) { const char *new_path; clean_merge = 0; @@@ -1040,6 -1027,13 +1033,13 @@@ if (!ren1->dst_entry->stages[2].mode != !ren1->dst_entry->stages[3].mode) ren1->dst_entry->processed = 0; + } else if (string_list_has_string(&o->current_directory_set, ren1_dst)) { + clean_merge = 0; + output(o, 1, "CONFLICT (rename/directory): Rename %s->%s in %s " + " directory %s added in %s", + ren1_src, ren1_dst, branch1, + ren1_dst, branch2); + conflict_rename_dir(o, ren1, branch1); } else { if (mfi.merge || !mfi.clean) output(o, 1, "Renaming %s => %s", ren1_src, ren1_dst);