public inbox for git@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox