Jeff King <peff@xxxxxxxx> writes: > @@ -139,8 +138,21 @@ static int lstat_cache_matchlen(struct cache_def *cache, > if (errno == ENOENT) > *ret_flags |= FL_NOENT; > } else if (S_ISDIR(st.st_mode)) { > - last_slash_dir = last_slash; > - continue; > + struct stat junk; > + struct strbuf gitdir = STRBUF_INIT; > + strbuf_add(&gitdir, cache->path, match_len); > + strbuf_addstr(&gitdir, "/.git"); > + if (lstat(gitdir.buf, &junk) < 0) { > + if (errno == ENOENT) { > + last_slash_dir = last_slash; > + strbuf_release(&gitdir); > + continue; > + } > + *ret_flags = FL_LSTATERR; > + } > + else > + *ret_flags = FL_GITREPO; This only checks "does the directory have .git in it?". It probably is sufficient, but setup.c:is_git_directory() may do a more appropriate check, I think. That ".git" thing could be a regular file (i.e. "gitdir: path"), so depending on the junk.st_mode, you may have to call read_gitfile_gently() on it before checking with is_git_directory(). Alternatively, resolve_gitlink_ref() might be usable, but because it is primarily meant to deal with a submodule, there is a slight impedance mismatch with the test we are trying to do. In this codepath, all we care about is if the subdirectory is controlled by a separate git repository, and it does not matter if that is an untracked directory from the superproject's point of view, or if it is bound to the superproject as a submodule. Also I suspect resolve_gitlink_ref() may not work for a submodule that does not have an initial commit but that is a separate issue. -- 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