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

Re: [PATCH 9/9] Add git-check-ignores

From
Nguyen Thai Ngoc Duy <pclouds@gmail.com>
Date
Sep 3, 2012, 04:14 UTC
Message-ID
<CACsJy8BO9pOEK4GykTAR94TF7ff3Bkx4db8ifcYVP32FNigmRA@mail.gmail.com>
In-Reply-To
<CAOkDyE9wPUOwJpeKQ5wSCoufqyqE9zwRuBuNvDGEZ-z8452DwA@mail.gmail.com>
On Sun, Sep 2, 2012 at 9:50 PM, Adam Spiers <git@adamspiers.org> wrote:
Show 23 quoted lines
> I'm no expert on .gitattributes and check-attr, but AFAICS, all the
> opportunities to share code in the plumbing and front-end seem to be
> taken already, e.g. the directory traversal and path handling.  The
> CLI argument parsing is necessarily different because check-attr
> requires a list of attributes as well as a list of files, and of
> course the output routines have to be different too.
>
> The only opportunity for code reuse which I saw but /didn't/ take was
> around the --stdin line parsing code which is duplicated between:
>
>     check_attr_stdin_paths
>     check_ignore_stdin_paths
>     cmd_checkout_index
>     cmd_update_index
>     hash_stdin_paths
>
> I attempted to refactor these, but quickly realised that due to the
> lack of proper closures in C, the overheads and complexity incurred by
> performing such a refactoring probably outweighed the benefits, so I
> gave up on the idea.
>
> Having said that, I'm totally open to suggestions if you can spot
> other places where code could be reused :)

Yeah. That was my impression too. I just hoped a new set of eyes might discover something ;) At lease we could prepare the output format that can be reused (maybe with little changes) for check-attr debugging if it comes later. Or make this command part of check-attr..

Show 9 quoted lines
>> Also --quiet option, where check-ignore returns 0 if the given path is
>> ignored, 1 otherwise?
>
> I considered that, but couldn't think of appropriate behaviour when
> multiple paths are given, so in the end I decided to remain consistent
> with check-attr, which always returns 0.  But I'm happy to change it
> if you can think of a more useful behaviour.  For example we could
> have a --count option which produces no output but has an exit status
> corresponding to the number of ignored files.

We could take this opportunity to kill "add --ignore-missing", which is basically .gitignore checking and it accepts multiple paths, I think.

>>  - If many paths are given, then perhaps we could print ignored paths
>> (no extra info).
>
> How is this different to git ls-files -i -o ?

I think ls-files requires real files on working directory, but check-ignore can deal with just non-existing paths.

Show 9 quoted lines
>>  - For debugging, given one path, we print all the rules that are
>> applied to it, which may help understand how/why it goes wrong.
>
> That would be nice, but I'm not sure it's a tremendously common use
> case.  Could you think of a scenario in which it would be useful?  I
> guess it could be done by adding a new DIR_DEBUG_IGNORED flag to
> dir_struct which would make the exclude matcher functions collect all
> matching patterns, rather than just returning the first one.  This in
> turn would require another field for collecting all matched patterns.

Mixing include/exclude ignore rules multiple times could be hard to figure out what goes wrong. But as we haven't seen an actual use case yet, just leave it out.

Show 12 quoted lines
>> I don't think we really need NEED_WORK_TREE here. .gitignore can be
>> read from index only.
>
> I thought about that, but in the end I decided it probably didn't make
> sense, because none of the exclude matching routines match against the
> index - they all match against the working tree and core.excludesfile.
> This would also require changing the matching logic to honor the index,
> but I didn't see the benefit in doing that, since all operations which
> involve excludes (add, status, etc.) relate to a work tree.
>
> But as with all of the above, please don't hesitate to point out if
> I've missed something.  You guys are the experts, not me ;-)

Again I was thinking that check-ignore could work with imaginary paths and could be used by scripts. If a script just wants to check certain paths are excluded, it should not need to move to working directory (though it probably is in working directory most of the time).

-- 
Duy
Previous: Junio C HamanoNext: Junio C Hamano
Message 29 of 80 in “new git check-ignore sub-command”
  1. 0/9 new git check-ignore sub-commandAdam Spiers, Sep 2, 2012
  2. 1/9 Update directory listing API doc to match codeAdam Spiers, Sep 2, 2012
  3. 2/9 Improve documentation and comments regarding directory traversal APIAdam Spiers, Sep 2, 2012
  4. 3/9 Rename cryptic 'which' variable to more consistent nameAdam Spiers, Sep 2, 2012
  5. Junio C HamanoSep 2, 2012
  6. 4/9 Refactor excluded_from_listAdam Spiers, Sep 2, 2012
  7. Nguyen Thai Ngoc DuySep 4, 2012
  8. 5/9 Refactor excluded and path_excludedAdam Spiers, Sep 2, 2012
  9. Nguyen Thai Ngoc DuySep 4, 2012
  10. Junio C HamanoSep 4, 2012
  11. Nguyen Thai Ngoc DuySep 5, 2012
  12. Junio C HamanoSep 6, 2012
  13. Nguyen Thai Ngoc DuySep 6, 2012
  14. Thiago FarinaSep 6, 2012
  15. Nguyen Thai Ngoc DuySep 6, 2012
  16. Adam SpiersSep 6, 2012
  17. Junio C HamanoSep 6, 2012
  18. 6/9 For each exclude pattern, store information about where it came fromAdam Spiers, Sep 2, 2012
  19. Philip OakleySep 2, 2012
  20. Junio C HamanoSep 2, 2012
  21. Philip OakleySep 2, 2012
  22. Adam SpiersSep 6, 2012
  23. 7/9 Extract some useful pathspec handling code from builtin/add.c into a libraryAdam Spiers, Sep 2, 2012
  24. 8/9 Provide free_directory() for reclaiming dir_struct memoryAdam Spiers, Sep 2, 2012
  25. 9/9 Add git-check-ignoresAdam Spiers, Sep 2, 2012
  26. Nguyen Thai Ngoc DuySep 2, 2012
  27. Adam SpiersSep 2, 2012
  28. Junio C HamanoSep 2, 2012
  29. Nguyen Thai Ngoc DuySep 3, 2012
  30. Junio C HamanoSep 2, 2012
  31. Junio C HamanoSep 3, 2012
  32. 00/14 new git check-ignore sub-commandAdam Spiers, Sep 20, 2012
  33. 01/14 Update directory listing API doc to match codeAdam Spiers, Sep 20, 2012
  34. 02/14 Improve documentation and comments regarding directory traversal APIAdam Spiers, Sep 20, 2012
  35. 03/14 Rename cryptic 'which' variable to more consistent nameAdam Spiers, Sep 20, 2012
  36. 04/14 Rename path_excluded() to is_path_excluded()Adam Spiers, Sep 20, 2012
  37. 05/14 Rename excluded_from_list() to is_excluded_from_list()Adam Spiers, Sep 20, 2012
  38. 06/14 Rename excluded() to is_excluded()Adam Spiers, Sep 20, 2012
  39. 07/14 Refactor is_excluded_from_list()Adam Spiers, Sep 20, 2012
  40. 08/14 Refactor is_excluded()Adam Spiers, Sep 20, 2012
  41. 09/14 Refactor is_path_excluded()Adam Spiers, Sep 20, 2012
  42. 10/14 For each exclude pattern, store information about where it came fromAdam Spiers, Sep 20, 2012
  43. Junio C HamanoSep 20, 2012
  44. Adam SpiersDec 26, 2012
  45. 11/14 Refactor treat_gitlinks()Adam Spiers, Sep 20, 2012
  46. 12/14 Extract some useful pathspec handling code from builtin/add.c into a libraryAdam Spiers, Sep 20, 2012
  47. Michael HaggertySep 21, 2012
  48. 13/14 Provide free_directory() for reclaiming dir_struct memoryAdam Spiers, Sep 20, 2012
  49. Michael HaggertySep 21, 2012
  50. Junio C HamanoSep 21, 2012
  51. 14/14 Add git-check-ignore sub-commandAdam Spiers, Sep 20, 2012
  52. Johannes SixtSep 21, 2012
  53. Junio C HamanoSep 25, 2012
  54. Johannes SixtSep 26, 2012
  55. Junio C HamanoSep 26, 2012
  56. Michael HaggertySep 21, 2012
  57. Junio C HamanoSep 21, 2012
  58. Junio C HamanoSep 21, 2012
  59. Junio C HamanoSep 20, 2012
  60. Junio C HamanoSep 20, 2012
  61. Adam SpiersSep 20, 2012
  62. Junio C HamanoSep 21, 2012
  63. Adam SpiersDec 26, 2012
  64. Junio C HamanoSep 21, 2012
  65. compiler checksAdam Spiers, Dec 16, 2012
  66. Junio C HamanoSep 24, 2012
  67. Nguyen Thai Ngoc DuySep 4, 2012
  68. Junio C HamanoSep 4, 2012
  69. Nguyen Thai Ngoc DuySep 5, 2012
  70. Adam SpiersSep 10, 2012
  71. Adam SpiersSep 10, 2012
  72. Nguyen Thai Ngoc DuySep 10, 2012
  73. Junio C HamanoSep 10, 2012
  74. Junio C HamanoSep 2, 2012
  75. Adam SpiersSep 6, 2012
  76. Adam SpiersSep 7, 2012
  77. Junio C HamanoSep 7, 2012
  78. Document conventions on static initialization and else cuddlingAdam Spiers, Sep 19, 2012
  79. Junio C HamanoSep 19, 2012
  80. Adam SpiersSep 19, 2012

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.