From: Junio C Hamano <gitster@pobox.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Luciano Rocha <luciano@eurotux.com>,
Pieter de Bie <pdebie@ai.rug.nl>,
git@vger.kernel.org
Subject: Re: [PATCH 01/02/RFC] implement a stat cache
Date: Mon, 21 Apr 2008 13:06:35 -0700 [thread overview]
Message-ID: <7vprsj9dmc.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: <alpine.LFD.1.10.0804211203460.2779@woody.linux-foundation.org> (Linus Torvalds's message of "Mon, 21 Apr 2008 12:09:43 -0700 (PDT)")
Linus Torvalds <torvalds@linux-foundation.org> writes:
> On Mon, 21 Apr 2008, Junio C Hamano wrote:
>>
>> Doesn't it become very tempting to replace lstat() calls we make to check
>> the status of a work tree path, with a function git_wtstat() that is:
>
> Yes.
>
> That looks like a very good abstraction.
>
>> /*
>> * As far as git is concerned, this does not exist in
>> * the work tree!
>> */
>> errno = ENOENT;
>> return -1;
>> }
>
> Well, how about returning something else than "ENOENT" here?
>
> As you point out, git doesn't actually think this is a "does not exist"
> case, but something else that may require more work:
>
>> This unfortunately is not enough to hide the need for has_symlink calls
>> from outside callers. When we check out a new path "a/b/c/d/e", for
>> example, if we naively checked if we creat(2) "a/b/c/d/e" (and otherwise
>> we try the equivalent of "mkdir -p"), we would be tricked by a symlink
>> "a/b" that points at some random place that has "c/d" subdirectory in it,
>> and we need to unlink "a/b" first, and the above git_wtstat() does not
>> really help such codepath.
>
> Maybe ENOTDIR would be a better error return?
Yeah, and we could return which component in the given path is the
offending one at the same time.
In the above example, we would say "No, a/b/c/d/e does not exist because
a/b is a symlink". But would that be enough, I have to wonder. lstat(2)
may have already said "There is no a/b/c/d/f" in the same example, but we
still need to know "a/b" is an unwanted symbolic link if the reason we are
asking that question is because we would want to check out "a/b/c/d/f".
So the answer need to be "a/b/c/d/f" (does not exist|exists in the work
tree), and it cannot exist because "a/b" is a symlink for such a caller.
But when we are trying to git-add, we simply do not care such
distinction.
next prev parent reply other threads:[~2008-04-21 20:07 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-19 19:28 Git performance on OS X Pieter de Bie
2008-04-19 21:22 ` Linus Torvalds
2008-04-19 21:29 ` Linus Torvalds
2008-04-19 22:08 ` Pieter de Bie
2008-04-20 16:17 ` David Kastrup
2008-04-19 21:54 ` Linus Torvalds
2008-04-19 22:00 ` Pieter de Bie
2008-04-19 22:39 ` Linus Torvalds
2008-04-20 4:14 ` Junio C Hamano
2008-04-20 11:13 ` [PATCH 01/02/RFC] implement a stat cache Luciano Rocha
2008-04-20 11:15 ` [PATCH 02/02/RFC] make use of the " Luciano Rocha
2008-04-20 11:18 ` [PATCH 01/02/RFC] implement a " Luciano Rocha
2008-04-20 16:03 ` Linus Torvalds
2008-04-20 22:04 ` Luciano Rocha
2008-04-20 22:29 ` Linus Torvalds
2008-04-20 23:07 ` Linus Torvalds
2008-04-21 0:53 ` Dmitry Potapov
2008-04-21 8:41 ` Johan Herland
2008-04-21 1:21 ` Junio C Hamano
2008-04-21 3:15 ` Linus Torvalds
2008-04-21 3:20 ` Linus Torvalds
2008-04-21 18:27 ` Junio C Hamano
2008-04-21 19:09 ` Linus Torvalds
2008-04-21 20:06 ` Junio C Hamano [this message]
2008-04-21 10:04 ` David Kastrup
2008-04-19 22:44 ` Git performance on OS X Jakub Narebski
2008-04-19 22:50 ` Linus Torvalds
2008-04-19 22:54 ` Linus Torvalds
2008-04-19 23:10 ` Pieter de Bie
2008-04-19 23:26 ` Linus Torvalds
2008-04-19 23:35 ` Roman Shaposhnik
2008-04-19 23:57 ` Pieter de Bie
2008-04-20 0:06 ` Linus Torvalds
2008-04-20 0:21 ` Roman Shaposhnik
2008-04-19 23:56 ` Pieter de Bie
2008-04-20 0:31 ` Linus Torvalds
2008-04-20 1:23 ` Dmitry Potapov
2008-04-20 16:22 ` David Kastrup
2008-04-19 23:04 ` Linus Torvalds
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=7vprsj9dmc.fsf@gitster.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=luciano@eurotux.com \
--cc=pdebie@ai.rug.nl \
--cc=torvalds@linux-foundation.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).