From: Junio C Hamano <gitster@pobox.com>
To: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Cc: Jiri Olsa <olsajiri@gmail.com>, git@vger.kernel.org
Subject: Re: [BUG] - git-read-tree segfaults
Date: Thu, 12 Mar 2009 00:01:13 -0700 [thread overview]
Message-ID: <7vfxhjjkcm.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: <7vtz5zjnai.fsf@gitster.siamese.dyndns.org> (Junio C. Hamano's message of "Wed, 11 Mar 2009 22:57:41 -0700")
Junio C Hamano <gitster@pobox.com> writes:
> I suspect that the reason add_entry() passed SKIP_DFCHECK was to work
> around an old bug in add_index_entry() that considered it a D/F conflict
> if you have a file D at stage N and a file D/F at stage M when N and M are
> different. I think such a bug has been fixed long time ago, and there is
> no reason for such a workaround. Besides, OK_TO_REPLACE only makes sense
> when you do check D/F conflict ("replace" in the name of the flag means
> "If you want to add 'xxx/zzz' when the index has 'xxx', it is Ok to drop
> the existing 'xxx' in order to add your 'xxx/zzz''); it makes no sense to
> give it if you are giving SKIP_DFCHECK at the same time.
The ancient D/F conflict detection bug in add_cache_entry() I had in mind
was fixed by b155725 ([PATCH] Fix oversimplified optimization for
add_cache_entry()., 2005-06-25). The use of SKIP_DFCHECK turns out to
have nothing to do with working that ancient bug around.
The real culprit seems to be 34110cd (Make 'unpack_trees()' have a
separate source and destination index, 2008-03-06).
Before that commit:
* merge_entry() that records the final tree-level 3-way merge decision
used to pass OK_TO_REPLACE without SKIP_DFCHECK.
* unpack_nondirectories() codepath for non-merge multi-tree read-tree
(the one under discussion in this thread) used to pass SKIP_DFCHECK but
did not pass OK_TO_REPLACE.
The fact that even merge_entry() side passes SKIP_DFCHECK these days does
not appear to be a workaround for an old bug in D/F conflict detection
code after all; it simply is a bug in the refactoring done with the said
commit.
The unpack_nondirectories() codepath passed SKIP_DFCHECK from ee6566e
(Rewrite read-tree, 2005-09-05), which is the very original implementation
of the modern "read-tree A B C" code. The ancient bug in the D/F conflict
detection code was killed way before that commit, and SKIP_DFCHECK in the
commit is not a workaround either; it also simply is a bug.
Side note: I was somewhat surprised that "make test" of that old
commit dates from September 2005 runs _much_ faster than the test
suite we have these days.
The only sane use of SKIP_DFCHECK is when the caller knows the addition is
not introducing D/F conflict in the index to avoid the overhead.
next prev parent reply other threads:[~2009-03-12 7:02 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-10 19:34 [BUG] - git-read-tree segfaults Jiri Olsa
2009-03-10 19:50 ` Johannes Schindelin
2009-03-10 20:21 ` Johannes Schindelin
2009-03-11 7:59 ` Jiri Olsa
2009-03-11 12:04 ` Johannes Schindelin
2009-03-12 5:57 ` Junio C Hamano
2009-03-12 7:01 ` Junio C Hamano [this message]
2009-03-12 7:29 ` [PATCH] read-tree A B C: do not create a bogus index and do not segfault Junio C Hamano
2009-03-12 14:46 ` Daniel Barkalow
2009-03-12 16:34 ` Linus Torvalds
2009-03-14 6:41 ` 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=7vfxhjjkcm.fsf@gitster.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=olsajiri@gmail.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).