All of lore.kernel.org
 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

* Re: [PATCH] Avoid excessive rewrites in merge-recursive
  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
  1 sibling, 1 reply; 4+ messages in thread
From: Junio C Hamano @ 2007-04-25 21:18 UTC (permalink / raw)
  To: Alex Riesen; +Cc: git

Alex Riesen <raa.lkml@gmail.com> writes:

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

It really was painful for me the last time I touched the file,
so I share that feeling.  The complexity of this program is
getting out of hand.

Probably we would want a refactoring before doing something like
this.

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

* Re: [PATCH] Avoid excessive rewrites in merge-recursive
  2007-04-25 21:18 ` Junio C Hamano
@ 2007-04-25 22:13   ` Alex Riesen
  0 siblings, 0 replies; 4+ messages in thread
From: Alex Riesen @ 2007-04-25 22:13 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Junio C Hamano, Wed, Apr 25, 2007 23:18:21 +0200:
> 
> > Just as you may have thought merge-recursive cannot get any uglier
> > someone comes and does just this: puts another level of indentation.
> 
> It really was painful for me the last time I touched the file,
> so I share that feeling.  The complexity of this program is
> getting out of hand.
> 
> Probably we would want a refactoring before doing something like
> this.
> 

I want. I just can't afford something like this lately.
I'm even saving on "am"s and "not"s! :)

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

* [PATCH] Ignore merged status of the file-level merge
  2007-04-25 20:06 [PATCH] Avoid excessive rewrites in merge-recursive Alex Riesen
  2007-04-25 21:18 ` Junio C Hamano
@ 2007-04-26 19:13 ` Alex Riesen
  1 sibling, 0 replies; 4+ messages in thread
From: Alex Riesen @ 2007-04-26 19:13 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano

as it is not relevant for whether the result should be written.
Even if no real merge happened, there might be _no_ reason to
rewrite the working tree file. Maybe even more so.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
---

 merge-recursive.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/merge-recursive.c b/merge-recursive.c
index 094ac59..8f72b2c 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -1342,7 +1342,7 @@ static int process_renames(struct path_list *a_renames,
 				mfi = merge_file(o, a, b,
 						a_branch, b_branch);
 
-				if (mfi.merge && mfi.clean &&
+				if (mfi.clean &&
 				    sha_eq(mfi.sha, ren1->pair->two->sha1) &&
 				    mfi.mode == ren1->pair->two->mode)
 					/*
-- 
1.5.2.rc0.65.g92b0b

^ 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.