All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/16] nd/list-files redesign
@ 2015-03-09 10:18 Nguyễn Thái Ngọc Duy
  2015-03-09 10:18 ` [PATCH 01/16] list-files: command skeleton Nguyễn Thái Ngọc Duy
                   ` (15 more replies)
  0 siblings, 16 replies; 30+ messages in thread
From: Nguyễn Thái Ngọc Duy @ 2015-03-09 10:18 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, git, Nguyễn Thái Ngọc Duy

On Tue, Feb 24, 2015 at 2:00 AM, Junio C Hamano <gitster@pobox.com> wrote:
> Michael J Gruber <git@drmicha.warpmail.net> writes:
>
>> status, status -s and the like are in an ordinary user's tool box.
>> ls-files isn't, at least not with "-t", which we even mark as deprecated.
>>
>> That makes me wonder, though, how difficult it would be to
>> wt_status_collect_unchanged() and to leverage the status machinery
>> rather than ls-files.
>
> Good point.  wt-status feels like a much better infrastructure to
> build on than "ls-files -t", which should die ;-).  Especially if
> the command is interested in showing the state of the working tree
> files relative to the tree of HEAD, as "ls-files" is purely between
> the index and the working tree.

So here it is. Except the first 4 patches identical with
'nd/list-files' in 'pu' and not reposted here, the rest is rewritten
using wt-status.c as the base.  Documentation and tests are missing.
Probably bugs lurking too. I just want to check if the UI makes sense.
Full series is available at

    https://github.com/pclouds/git/commits/ls

if you want to pull and try out quickly. With this we got:

usage: git list-files [options] [<pathspec>...]

Filter options
    -c, --cached          show cached files (default)
    -o, --others          show untracked files
    -i, --ignored         show ignored files
    -u, --unmerged        show unmerged files
    -a, --added           show added files compared to HEAD
    -d, --deleted         show deleted files compared to HEAD
    -m, --modified        show modified files compared to HEAD
    -A, --wt-added        show added files in worktree
    -D, --wt-deleted      show deleted files in worktree
    -M, --wt-modified     show modified files on worktree

Other
    -C, --column[=<style>]
                          show files in columns
    -1                    shortcut for --no-column
    --max-depth <depth>   descend at most <depth> levels
    -R, --recursive       shortcut for --max-depth=-1
    --color[=<when>]      show color
    -F, --classify        append indicator (one of */=>@|) to entries

Any filter option can be combined with others. Status code is the same
with 'git status --porcelain'. In fact options -[iouadmADM] are
basically the 'git status --porcelain' with bells and whistles.
-- 
2.3.0.rc1.137.g477eb31

^ permalink raw reply	[flat|nested] 30+ messages in thread
* Re: [PATCH 01/16] list-files: command skeleton
@ 2015-03-14 11:13 Duy Nguyen
  0 siblings, 0 replies; 30+ messages in thread
From: Duy Nguyen @ 2015-03-14 11:13 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Git Mailing List, Michael J Gruber

On Fri, Mar 13, 2015 at 4:02 AM, Junio C Hamano <gitster@pobox.com> wrote:
> Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> 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

^ permalink raw reply	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2015-03-15 23:41 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-03-09 10:18 [PATCH 00/16] nd/list-files redesign Nguyễn Thái Ngọc Duy
2015-03-09 10:18 ` [PATCH 01/16] list-files: command skeleton Nguyễn Thái Ngọc Duy
2015-03-12 21:02   ` Junio C Hamano
2015-03-09 10:18 ` [PATCH 02/16] list-files: make :(glob) pathspec default Nguyễn Thái Ngọc Duy
2015-03-12 21:10   ` Junio C Hamano
2015-03-14 11:21     ` Duy Nguyen
2015-03-09 10:18 ` [PATCH 03/16] list-files: show paths relative to cwd Nguyễn Thái Ngọc Duy
2015-03-12 21:20   ` Junio C Hamano
2015-03-12 21:28     ` Junio C Hamano
2015-03-14 11:25       ` Duy Nguyen
2015-03-15 21:16         ` Junio C Hamano
2015-03-15 23:41           ` Duy Nguyen
2015-03-09 10:18 ` [PATCH 04/16] list-files: add tag to each entry, filter duplicate tags Nguyễn Thái Ngọc Duy
2015-03-12 21:48   ` Junio C Hamano
2015-03-09 10:18 ` [PATCH 05/16] list-files: add --[no-]column, -C and -1 Nguyễn Thái Ngọc Duy
2015-03-09 10:18 ` [PATCH 06/16] list-files: add --max-depth and -R Nguyễn Thái Ngọc Duy
2015-03-09 10:18 ` [PATCH 07/16] list-files: show directories as well as files Nguyễn Thái Ngọc Duy
2015-03-10  6:23   ` Eric Sunshine
2015-03-10  6:39     ` Duy Nguyen
2015-03-09 10:18 ` [PATCH 08/16] list-files: add --color Nguyễn Thái Ngọc Duy
2015-03-09 10:18 ` [PATCH 09/16] list-files: add -F/--classify Nguyễn Thái Ngọc Duy
2015-03-09 10:18 ` [PATCH 10/16] list-files: new indicator '&' for submodules when -F is used Nguyễn Thái Ngọc Duy
2015-03-09 10:18 ` [PATCH 11/16] list-files: add --cached and --others Nguyễn Thái Ngọc Duy
2015-03-09 10:18 ` [PATCH 12/16] list-files: add --ignored Nguyễn Thái Ngọc Duy
2015-03-09 10:18 ` [PATCH 13/16] list-files: add --unmerged Nguyễn Thái Ngọc Duy
2015-03-09 10:18 ` [PATCH 14/16] list-files: add file modification options -[admADM] Nguyễn Thái Ngọc Duy
2015-03-09 10:18 ` [PATCH 15/16] list-files: delete redundant cached entries Nguyễn Thái Ngọc Duy
2015-03-10  6:28   ` Eric Sunshine
2015-03-09 10:18 ` [PATCH 16/16] list-files: make alias 'ls' default to 'list-files' Nguyễn Thái Ngọc Duy
  -- strict thread matches above, loose matches on Subject: below --
2015-03-14 11:13 [PATCH 01/16] list-files: command skeleton Duy Nguyen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.