From: Elijah Newren <newren@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Stephen Rothwell <sfr@canb.auug.org.au>,
Jeff King <peff@peff.net>
Subject: Re: [PATCHv2 3/3] merge-recursive: When we detect we can skip an update, actually skip it
Date: Wed, 2 Mar 2011 15:22:49 -0700 [thread overview]
Message-ID: <AANLkTin1EDUMRY7T+Jx64eG6R4mOZOeOukJWQHpFX+j5@mail.gmail.com> (raw)
In-Reply-To: <7vwrkhb7ig.fsf@alter.siamese.dyndns.org>
On Wed, Mar 2, 2011 at 1:19 PM, Junio C Hamano <gitster@pobox.com> wrote:
> Elijah Newren <newren@gmail.com> writes:
>
>> @@ -1274,9 +1275,13 @@ 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 &&
>> + lstat(path, &st) == 0) {
>> output(o, 3, "Skipped %s (merged same as existing)", path);
>> - else
>> + add_cacheinfo(mfi.mode, mfi.sha, path,
>> + 0 /*stage*/, 1 /*refresh*/, 0 /*options*/);
>> + return mfi.clean;
>> + } else
>
> Hmmmm. During a merge, we allow files missing from the working tree as if
> it is not modified from the index. Changing the behaviour based on the
> existence of the path on the filesystem does not feel quite right.
Really? Ouch. Then things have been broken ever since
make_room_for_directories_of_df_conflicts() was introduced, as that
function deletes files intentionally and expects them to be reinstated
later when possible. If a user has a file deleted that happens to be
involved in a D/F conflict before a merge, and the file is unchanged,
the merge will reinstate it.
> Even if we decide that regressing in that use case were acceptable, what
> guarantees that the path that happens to be in the work tree has the same
> contents as what the merge result should be? IOW, shouldn't we be looking
> at the original index, making sure that our side (stage #2) at the path
> had a file there that matches the merge result mfi.{sha,mode}, instead of
> looking at the working tree?
We DID look at the original index, make sure that our side (stage #2)
at the path had a file there that matches the merge result
mfi.{sha,mode}.
But, that's not enough to know that we can skip the update of the
file. The merged results being different are only one reason to
update the file; the other is that we may have deleted the file
ourselves in make_room_for_directories_of_df_conflicts() and need to
replace it. This is the location in the code where such deleted files
are reinstated.
Suggestions?
next prev parent reply other threads:[~2011-03-02 22:22 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-01 1:08 [PATCHv2 0/3] Fix unnecessary (mtime) updates of files during merge Elijah Newren
2011-03-01 1:08 ` [PATCHv2 1/3] t6022: New test checking for unnecessary updates of renamed+modified files Elijah Newren
2011-03-01 7:33 ` Johannes Sixt
2011-03-01 19:38 ` Jeff King
2011-03-02 22:26 ` Elijah Newren
2011-03-01 1:08 ` [PATCHv2 2/3] t6022: New test checking for unnecessary updates of files in D/F conflicts Elijah Newren
2011-03-01 1:08 ` [PATCHv2 3/3] merge-recursive: When we detect we can skip an update, actually skip it Elijah Newren
2011-03-02 20:19 ` Junio C Hamano
2011-03-02 22:22 ` Elijah Newren [this message]
2011-03-02 23:23 ` Junio C Hamano
2011-03-01 19:31 ` [PATCHv2 0/3] Fix unnecessary (mtime) updates of files during merge Jeff King
2011-03-01 19:36 ` Jeff King
2011-03-02 23:11 ` Elijah Newren
2011-03-02 23:22 ` Junio C Hamano
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=AANLkTin1EDUMRY7T+Jx64eG6R4mOZOeOukJWQHpFX+j5@mail.gmail.com \
--to=newren@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
--cc=sfr@canb.auug.org.au \
/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).