Jeff King <peff@xxxxxxxx> writes: > You can at least lazily do the stat so that only users of foo/ need to > pay the penalty. Something like this (completely untested): Without "foo/", you do not have to pay the price, so I think that is a sane optimization, but at the same time it would make it worse if "foo/" is actually used. excluded_1() is called for the same pathname from a loop to check for a match and you would end up running lstat(2) three times (once each for EXC_CMDL, EXC_DIRS and EXC_FILE). But maybe people who want "foo/" deserve it. I dunno. In any case, if you do this... > @@ -581,7 +587,7 @@ static int read_directory_recursive(struct dir_struct *dir, const char *path, co > if (simplify_away(fullname, baselen + len, simplify)) > continue; > > - dtype = get_dtype(de, fullname); > + dtype = get_dtype(de, fullname, 0); > exclude = excluded(dir, fullname, dtype); > if (exclude && dir->collect_ignored > && in_pathspec(fullname, baselen + len, simplify)) ... I think you would need to get the real dtype again in later part of this function after exclude() decides it should not ignore it, before the "switch (dtype)" really uses it, on systems with NO_D_TYPE_IN_DIRENT. - 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