Just thinking out loud. If I'm not mistaken, a directory's mtime is only changed when files are added are removed in that directory. And that's all we care about in read_directory. So if we keep a secondary index containing the list of all (tracked and untracked) .gitignore files and all untracked files (regardless ignore status), we could avoid reading a directory if: - all relevant .gitignore are unchanged - the directory's stat is unchanged In that case we already have the list of untracked files. Exclude can be run over to filter out ignored files. And because we know these are not tracked, we do not need to call index_name_exists (not if ignore_case == 0). In the best case, nothing's added or removed, read_directory just issues a bunch of lstat (like index refresh), filter out ignored files and _not_ trigger (nor pay penalty for) lazy_init_name_hash. webkit has 11k untracked files. I don't think we have problems storing that list as we already have to chew 182k entries in index. Did I make any mistakes above? -- Duy -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html