git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Torsten Bögershausen" <tboegi@web.de>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH v3 3/3] correct ce_compare_data() in a middle of a merge
Date: Fri, 8 Jul 2016 17:00:39 +0200	[thread overview]
Message-ID: <30eb6711-a559-155b-d068-c7ab94f32871@web.de> (raw)
In-Reply-To: <xmqqr3b5p9v0.fsf@gitster.mtv.corp.google.com>



On 07/07/16 20:43, Junio C Hamano wrote:
 > Torsten Bögershausen <tboegi@web.de> writes:
 >
 >> This is the call stack:
 >>
 >> merge-recursive.c/add_cacheinfo(unsigned int mode, const unsigned 
char *sha1,
 >> 		const char *path, int stage, int refresh, int options)
 >> {
 >> 	struct cache_entry *ce;
 >> 	ce = make_cache_entry
 >> 	if (!ce)
 >> 		return error(_("addinfo_cache failed for path '%s'"), path);
 >> 	return add_cache_entry(ce, options);
 >> }
 >> #Calls
 >> read-cache.c/make_cache_entry(path=file sha1=0x99b633 stage=0)
 >>
 >>
 >> struct cache_entry *make_cache_entry(unsigned int mode,
 >> 		const unsigned char *sha1, const char *path, int stage,
 >> 		unsigned int refresh_options)
 >> {
 >>         [snip]
 >> 	ret = refresh_cache_entry(ce, refresh_options);
 >> 	if (ret != ce)
 >> 		free(ce);
 >> 	return ret;
 >> }
 >>
 >> #Calls
 >> refresh_cache_ent(&the_index, ce, options, NULL, NULL);
 >>
 >> #Calls
 >> ie_modified()
 >>
 >> #Calls
 >> read-cache.c/ie_match_stat()
 >>
 >> #Calls
 >> changed |= ce_modified_check_fs(ce, st);
 >>
 >> #Calls
 >> ce_compare_data(path=file sha1=0x99b633)
 >>
 >> #Calls
 >> index_fd(..., ..., ce->name, ...)
 >> #Note the sha is lost here, the parameter sha is the output.
 >>
 >> Deep down, has_cr_in_index(path) will look at ad55e2 instead,
 >> which is wrong.
 > The call to add_cacheinfo() is made with 99b633 to record the 3-way
 > merge result to the index in this callchain:
 >
 >  merge_trees()
 >  -> git_merge_trees()
 >  -> process_renames() # does nothing for this case
 >  -> process_entry()
 >     -> merge_content()
 >        -> merge_file_special_markers()
 >           -> merge_file_1()
 >              -> merge_3way()
 >                 -> ll_merge() # correctly handles the renormalization
 >              -> write_sha1_file() # this is what gives us 99b633
 >     -> update_file() # this is fed the 99b633 write_sha1_file() computed
 >        -> update_file_flags()
 >           -> read_sha1_file() # reads 99b633
 >           -> convert_to_working_tree()
 >           -> write_in_full() # updates the working tree
 >           -> add_cacheinfo() # to record 99b633 at "file" in the index
 >
 > So refresh() may incorrectly find that 99b633 does not match what is
 > in the filesystem if it looks at _any_ entry in the index.  We know
 > we have written the file ourselves, so by definition it should match
 > ;-)

Does it, always ?
There was a lengthy discussion around January, if
git checkout -f
should always give a clean workspace.
(My suggestion was yes, please), but the conclusion
was to always check the other way around:
What would "git add" say ?
If the smudge/clean don't provide
a round trip, then the worktree should not be clean.

My understanding is, that after merge, the filters must be round trip
(and all other conversions), otherwise the merge willl fail.

In this case the merge fails because of a bug in Git.

      parent reply	other threads:[~2016-07-08 15:01 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-27 23:21 What's cooking in git.git (Jun 2016, #09; Mon, 27) Junio C Hamano
2016-06-28  8:01 ` [PATCH v3 0/3] unified auto CRLF handling, V3 tboegi
2016-06-28  8:01 ` [PATCH v3 1/3] convert: unify the "auto" handling of CRLF tboegi
2016-06-28  8:01 ` [PATCH v3 2/3] read-cache: factor out get_sha1_from_index() helper tboegi
2016-06-28  8:01 ` [PATCH v3 3/3] correct ce_compare_data() in a middle of a merge tboegi
2016-06-29 16:14   ` Junio C Hamano
2016-06-30 16:52     ` Torsten Bögershausen
2016-07-01 22:11       ` Junio C Hamano
2016-07-02 18:41         ` Torsten Bögershausen
2016-07-06 14:57           ` Junio C Hamano
2016-07-07 17:16             ` Torsten Bögershausen
2016-07-07 18:43               ` Junio C Hamano
2016-07-07 22:19                 ` Junio C Hamano
2016-07-08  7:52                 ` Torsten Bögershausen
2016-07-08 16:36                   ` Junio C Hamano
2016-07-08 17:13                     ` Torsten Bögershausen
2016-07-08 17:25                       ` Junio C Hamano
2016-07-08 17:59                         ` Junio C Hamano
2016-07-08 19:01                       ` Junio C Hamano
2016-07-08 20:50                         ` Junio C Hamano
2016-07-11 20:07                           ` Junio C Hamano
2016-07-12  2:23                             ` Torsten Bögershausen
2016-07-12 19:54                               ` Junio C Hamano
2016-07-08 15:00                 ` Torsten Bögershausen [this message]

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=30eb6711-a559-155b-d068-c7ab94f32871@web.de \
    --to=tboegi@web.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /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).