Re: [PATCH 01/16] list-files: command skeleton

From: Duy Nguyen <hidden>
Date: 2016-06-15 23:04:09

On Fri, Mar 13, 2015 at 4:02 AM, Junio C Hamano [off-list ref] wrote:
Nguyễn Thái Ngọc Duy  [off-list ref] writes:
quoted
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.
quoted
+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.
quoted
+     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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help