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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html