git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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.

  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).