git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 17/21] list-files: show directories as well as files

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Jan 25, 2015, 19:16 UTC
Message-ID
<CAPig+cTwcAWUiJGViYDjeRifd2ERojQR+f+cpSB806RwYHoCCw@mail.gmail.com>
In-Reply-To
<1422189476-7518-18-git-send-email-pclouds@gmail.com>
On Sun, Jan 25, 2015 at 7:37 AM, Nguyễn Thái Ngọc Duy <pclouds@gmail.com> wrote:
Show 34 quoted lines
> The index does not store directories explicitly (except submodules) so
> we have to figure them out from file list when output lis depth-limited.
>
> The function show_as_directory() deliberately generates duplicate
> directories and expects the previous patch to remove duplicates.
>
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
> ---
> diff --git a/builtin/ls-files.c b/builtin/ls-files.c
> index 1a1c9c8..29b5c2e 100644
> --- a/builtin/ls-files.c
> +++ b/builtin/ls-files.c
> @@ -179,6 +181,35 @@ static void show_killed_files(struct dir_struct *dir)
>         }
>  }
>
> +static int show_as_directory(const struct cache_entry *ce)
> +{
> +       struct strbuf sb = STRBUF_INIT;
> +       const char *p;
> +
> +       strbuf_add(&sb, ce->name, ce_namelen(ce));
> +       while (sb.len && (p = strrchr(sb.buf, '/')) != NULL) {
> +               struct strbuf sb2 = STRBUF_INIT;
> +               strbuf_setlen(&sb, p - sb.buf);
> +               if (!match_pathspec(&pathspec, sb.buf, sb.len,
> +                                   max_prefix_len, NULL, 1))
> +                       continue;
> +               write_name(&sb2, sb.buf);
> +               if (want_color(use_color)) {
> +                       struct strbuf sb3 = STRBUF_INIT;
> +                       color_filename(&sb3, ce->name, sb2.buf, S_IFDIR, 1);
> +                       strbuf_release(&sb2);
> +                       sb2 = sb3;

Although more expensive, would it be a bit more idiomatic and obvious to phrase this as

    strbuf_swap(&sb2, &sb3);
    strbuf_release(&sb3);
or is it not worth it?
> +               }
> +               if (show_tag)
> +                       strbuf_insert(&sb2, 0, tag_cached, strlen(tag_cached));
> +               strbuf_fputs(&sb2, strbuf_detach(&sb, NULL), NULL);

The detached strbuf content gets assigned to the 'util' field of the 'struct string_list output' item and is eventually leaked, however, the program exits soon after. Okay.

Show 10 quoted lines
> +               strbuf_release(&sb2);
> +               return 1;
> +       }
> +       strbuf_release(&sb);
> +       return 0;
> +}
> +
>  static void write_ce_name(struct strbuf *sb, const struct cache_entry *ce)
>  {
>         struct strbuf quoted = STRBUF_INIT;
Previous: Nguyễn Thái Ngọc DuyNext: Junio C Hamano
Message 20 of 30 in “nd/list-files updates”
  1. 00/21 nd/list-files updatesNguyễn Thái Ngọc Duy, Jan 25, 2015
  2. 01/21 ls_colors.c: add $LS_COLORS parsing codeNguyễn Thái Ngọc Duy, Jan 25, 2015
  3. 02/21 ls_colors.c: parse color.ls.* from config fileNguyễn Thái Ngọc Duy, Jan 25, 2015
  4. 03/21 ls_colors.c: add a function to color a file nameNguyễn Thái Ngọc Duy, Jan 25, 2015
  5. 04/21 ls_colors.c: highlight submodules like directoriesNguyễn Thái Ngọc Duy, Jan 25, 2015
  6. 05/21 ls-files: buffer full item in strbuf before printingNguyễn Thái Ngọc Duy, Jan 25, 2015
  7. 06/21 ls-files: add --color to highlight file namesNguyễn Thái Ngọc Duy, Jan 25, 2015
  8. 07/21 ls-files: add --columnNguyễn Thái Ngọc Duy, Jan 25, 2015
  9. 08/21 ls-files: support --max-depthNguyễn Thái Ngọc Duy, Jan 25, 2015
  10. 09/21 list-files: a user friendly version of ls-files and moreNguyễn Thái Ngọc Duy, Jan 25, 2015
  11. Junio C HamanoJan 27, 2015
  12. 10/21 list-files: make alias 'ls' default to 'list-files'Nguyễn Thái Ngọc Duy, Jan 25, 2015
  13. 11/21 list-files: -u does not imply showing stagesNguyễn Thái Ngọc Duy, Jan 25, 2015
  14. 12/21 list-files: add -R/--recursive short for --max-depth=-1Nguyễn Thái Ngọc Duy, Jan 25, 2015
  15. 13/21 list-files: add -1 short for --no-columnNguyễn Thái Ngọc Duy, Jan 25, 2015
  16. 14/21 list-files: add -t backNguyễn Thái Ngọc Duy, Jan 25, 2015
  17. 15/21 list-files: sort output and remove duplicatesNguyễn Thái Ngọc Duy, Jan 25, 2015
  18. 16/21 list-files: do not show duplicate cached entriesNguyễn Thái Ngọc Duy, Jan 25, 2015
  19. 17/21 list-files: show directories as well as filesNguyễn Thái Ngọc Duy, Jan 25, 2015
  20. Eric SunshineJan 25, 2015
  21. Junio C HamanoJan 27, 2015
  22. 18/21 list-files: add -F/--classifyNguyễn Thái Ngọc Duy, Jan 25, 2015
  23. 19/21 list-files -F: show submodules with the new indicator '&'Nguyễn Thái Ngọc Duy, Jan 25, 2015
  24. 20/21 list-files: -M aka diff-cachedNguyễn Thái Ngọc Duy, Jan 25, 2015
  25. 21/21 t3080: tests for git-list-filesNguyễn Thái Ngọc Duy, Jan 25, 2015
  26. Eric SunshineJan 25, 2015
  27. Michael BlumeJan 28, 2015
  28. Duy NguyenJan 28, 2015
  29. Michael BlumeJan 28, 2015
  30. Junio C HamanoJan 28, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.