On Fri, Mar 13, 2015 at 4:02 AM, Junio C Hamano <gitster@xxxxxxxxx> wrote: > Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> writes: > >> list-files is supposed to be the user friendly version of ls-files, or >> an alternative to git-status. Nothing fancy in this patch yet. > > The result of applying this patch alone will not give us anything > fancy, but the patch itself is interesting ;-) That's the point. Fancy stuff comes as separate, bite-size patches. >> +static void populate_cached_entries(struct string_list *result, >> + const struct index_state *istate) >> +{ >> + int i; >> + >> + for (i = 0; i < istate->cache_nr; i++) { >> + const struct cache_entry *ce = istate->cache[i]; >> + >> + if (!match_pathspec(&pathspec, ce->name, ce_namelen(ce), >> + 0, NULL, >> + S_ISDIR(ce->ce_mode) || >> + S_ISGITLINK(ce->ce_mode))) > > Because we won't tell the user "You gave me Mkaefile but that did > not match" when "git list-files Mkaefile" does not produce anything, > we do not need to pass seen[] down from here. We probably want that feature back. Not implemented yet though. >> + prefix = cmd_prefix; >> + if (prefix) >> + prefix_length = strlen(prefix); >> + >> + if (read_cache() < 0) >> + die(_("index file corrupt")); >> + >> + git_config(ls_config, NULL); >> + >> + argc = parse_options(argc, argv, prefix, ls_options, ls_usage, 0); >> + >> + parse_pathspec(&pathspec, 0, >> + PATHSPEC_PREFER_CWD | >> + PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP, >> + cmd_prefix, argv); >> + pathspec.max_depth = 0; >> + pathspec.recursive = 1; >> + >> + refresh_index(&the_index, REFRESH_QUIET | REFRESH_UNMERGED, >> + &pathspec, NULL, NULL); > > It would be better to do read-cache-preload, instead of read-cache, > if you are going to immediately refresh. That is what "git status" > does. parse_options(), or *_SLASH_CHEAP to be exact, needs the index being loaded (but not necesarily refreshed), so we can't simply move it closer to refresh_index() after we have got the pathspec. And doing read-cache-preload() without pathspec where read_cache() is seems a waste of lstat() because the default mode is only look at cwd and subdirs, not full worktree like git-status. I have a patch (not sent yet) that adds read-cache-preload back. But this 01/16 will likely stay simple and unoptimized. -- 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