Thread (8 messages) flat view 8 messages, 3 authors, 2016-06-15
DORMANTno replies

[RFC PATCH 2/2] merge-recursive: When we detect we can skip an update, actually skip it

From: Elijah Newren <hidden>
Date: 2016-06-15 22:50:40
Subsystem: the rest · Maintainer: Linus Torvalds

In 882fd11 (merge-recursive: Delay content merging for renames 2010-09-20),
the code that checked for whether we could skip updating a file in the
working directory (due to the merged version matching the current copy) was
moved into a separate function.  In order to defer the content merging, we
had to update the index with unmerged entries.  As part of the move, a bug
was introduced such that the message about skipping the update would be
printed (if GIT_MERGE_VERBOSITY was sufficiently high) but the file would
be updated in the working copy anyway.

When we detect that the file does not need to be updated in the working
copy, update the index to remove the unmerged entries and then return early
before updating the working copy.

STILL BROKEN: Unfortunately, this change leaves the index in a state where
the renamed file is only racily clean; a 'git diff-files' will report the
file as modified.

---
No Signed-off-by since it still doesn't work.

 merge-recursive.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/merge-recursive.c b/merge-recursive.c
index 16c2dbe..94b818c 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -1274,9 +1274,12 @@ static int merge_content(struct merge_options *o,
 	}
 
 	if (mfi.clean && !df_conflict_remains &&
-	    sha_eq(mfi.sha, a_sha) && mfi.mode == a.mode)
+	    sha_eq(mfi.sha, a_sha) && mfi.mode == a.mode) {
 		output(o, 3, "Skipped %s (merged same as existing)", path);
-	else
+		add_cacheinfo(mfi.mode, mfi.sha, path,
+			      0, 0, ADD_CACHE_OK_TO_REPLACE);
+		return mfi.clean;
+	} else
 		output(o, 2, "Auto-merging %s", path);
 
 	if (!mfi.clean) {
-- 
1.7.4.1.23.g4865dd
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help