Browse Source

Avoid excessive rewrites in merge-recursive

If a file is changed in one branch, and renamed and changed to the
same content in another branch than we can skip the rewrite of this
file in the working directory, as the content does not change.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Alex Riesen 18 years ago committed by Junio C Hamano
parent
commit
c135ee88f8
  1. 32
      merge-recursive.c

32
merge-recursive.c

@ -1342,20 +1342,26 @@ static int process_renames(struct path_list *a_renames, @@ -1342,20 +1342,26 @@ static int process_renames(struct path_list *a_renames,
mfi = merge_file(o, a, b,
a_branch, b_branch);

if (mfi.merge || !mfi.clean)
output(1, "Renamed %s => %s", ren1_src, ren1_dst);
if (mfi.merge)
output(2, "Auto-merged %s", ren1_dst);
if (!mfi.clean) {
output(1, "CONFLICT (rename/modify): Merge conflict in %s",
ren1_dst);
clean_merge = 0;

if (!index_only)
update_stages(ren1_dst,
o, a, b, 1);
if (mfi.merge && mfi.clean &&
sha_eq(mfi.sha, ren1->pair->two->sha1) &&
mfi.mode == ren1->pair->two->mode)
output(3, "Skipped %s (merged same as existing)", ren1_dst);
else {
if (mfi.merge || !mfi.clean)
output(1, "Renamed %s => %s", ren1_src, ren1_dst);
if (mfi.merge)
output(2, "Auto-merged %s", ren1_dst);
if (!mfi.clean) {
output(1, "CONFLICT (rename/modify): Merge conflict in %s",
ren1_dst);
clean_merge = 0;

if (!index_only)
update_stages(ren1_dst,
o, a, b, 1);
}
update_file(mfi.clean, mfi.sha, mfi.mode, ren1_dst);
}
update_file(mfi.clean, mfi.sha, mfi.mode, ren1_dst);
}
}
}

Loading…
Cancel
Save