Re: [PATCH 3/3] Avoid doing extra 'lstat()'s for d_type if we have an up-to-date cache entry
- From
Linus Torvalds <torvalds@linux-foundation.org>
- Date
- Jul 9, 2009, 17:18 UTC
- Message-ID
- <alpine.LFD.2.01.0907091013540.3352@localhost.localdomain>
- In-Reply-To
- <alpine.LFD.2.01.0907091011280.3352@localhost.localdomain>
On Thu, 9 Jul 2009, Linus Torvalds wrote:
> > Here's an alternative version that just makes the thing return the DT_xyz > flag rather than the mode (and it returns DT_REG for symlinks too, because > it knows nobody cares - we only really care about "directory or not")
Btw, I'm wondering whether this "look if 'dir/file' exists in index and is up-to-date" is really safe.
We don't really verify the whole path when we mark things ce_uptodate(). Part of what read_directory() does is to find directory entries, and in the process things like "git add" will notice if there's a conflict with existing index entries.
So if a directory has changed into a symlink to a directory, this particular optimization will actually hide that, I suspect. I haven't tested, though. But it might be worth-while to see what happens when you had a directory structure, and then do
mkdir dir touch dir/a touch dir/b git add dir
mv dir new-dir ln -s new-dir dir git status
Quite frankly, I'd personally be perfectly ok with git _not_ noticing subtle things like this automatically, but..
Linus