git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Avoid excessive rewrites in merge-recursive
@ 2007-04-25 20:06 Alex Riesen
  2007-04-25 21:18 ` Junio C Hamano
  2007-04-26 19:13 ` [PATCH] Ignore merged status of the file-level merge Alex Riesen
  0 siblings, 2 replies; 4+ messages in thread
From: Alex Riesen @ 2007-04-25 20:06 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

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>
---

Just as you may have thought merge-recursive cannot get any uglier
someone comes and does just this: puts another level of indentation.

It is a nice speed up, though. Besides, I had some directories moved
between branches, and the rewrites caused a rebuild of hefty 8000
objects, which in windows terms is around 2 hours.

 merge-recursive.c |   32 +++++++++++++++++++-------------
 1 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/merge-recursive.c b/merge-recursive.c
index 403a4c8..37f1ba9 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -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);
 			}
 		}
 	}
-- 
1.5.2.rc0.63.gdfc8-dirty

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2007-04-26 19:14 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-04-25 20:06 [PATCH] Avoid excessive rewrites in merge-recursive Alex Riesen
2007-04-25 21:18 ` Junio C Hamano
2007-04-25 22:13   ` Alex Riesen
2007-04-26 19:13 ` [PATCH] Ignore merged status of the file-level merge Alex Riesen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).