git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Elijah Newren <newren@gmail.com>
To: git@vger.kernel.org
Cc: Elijah Newren <newren@gmail.com>
Subject: [RFC PATCH 2/2] merge-recursive: When we detect we can skip an update, actually skip it
Date: Sat, 26 Feb 2011 11:34:57 -0700	[thread overview]
Message-ID: <1298745297-25713-3-git-send-email-newren@gmail.com> (raw)
In-Reply-To: <1298745297-25713-1-git-send-email-newren@gmail.com>

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

  parent reply	other threads:[~2011-02-26 18:35 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-24  3:33 new behaviour in git merge Stephen Rothwell
2011-02-24  8:15 ` Jeff King
2011-02-24  9:24   ` Stephen Rothwell
2011-02-24 11:52     ` Jeff King
2011-02-26 18:34       ` [RFC PATCH 0/2] Fix unnecessary updates of files during merge Elijah Newren
2011-02-26 18:34         ` [RFC PATCH 1/2] t6022: New test checking for unnecessary updates of renamed+modified files Elijah Newren
2011-02-26 18:34         ` Elijah Newren [this message]
2011-02-26 18:43         ` [RFC PATCH 0/2] Fix unnecessary updates of files during merge Elijah Newren

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1298745297-25713-3-git-send-email-newren@gmail.com \
    --to=newren@gmail.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).