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

Re: Relative ls-files

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 23, 2011, 15:42 UTC
Message-ID
<7voc51g7xo.fsf@alter.siamese.dyndns.org>
In-Reply-To
<4D89DCBE.3060400@drmicha.warpmail.net>
Michael J Gruber <git@drmicha.warpmail.net> writes:
Show 6 quoted lines
>>> What's wrong with --relative  or something?
>
> ??
>
> ls-files already lists files relative to cwd. What you need is a way to
> specify that you want all files, not just those beneath cwd.
Exactly.
Show 6 quoted lines
>>> I've never liked magical strange notations.  ":" already has a meaning.
>> 
>> +1
>
> I think you've both been missing out on the discussions about
> --full-tree and refspec notation for that...

I like this answer. Don't pay any much attention +1/-1 from people who are clueless to the topic, but do pay attention to them as persons by showing that there are things for them to read and learn if they want to discuss the topic. A URL or two to the recent thread may have been nicer.

> Of course ":" has a meaning. "git show HEAD:" lists all files at the
> top-level of the tree at HEAD. That is exactly why ":" has been
> suggested to denote the top-level for pathspecs also. Note that this is
> much more general than just an option for ls-files.

Talking about the "pathspec magic", I think in addition to "this is relative to root", we at least would need "this is literal, don't apply globbing" magic. I am afraid that using ':' as the sole "magic for from-root" as you advocate may turn out to be too short-sighted and would hurt us in the future.

It may be more extensible if we used a common "magic introducer" at the beginning, an character unlikely to collide with any pathspec existing scripts and people use, and then have additional "what magic I want" signature immediately following that introducer letter in these magic filespecs.

Off the to of my head, "/" may be a perfect choice for "here is a magic" introducer, as we never give absolute paths on the fiesystem from the root to git [*1*].

Then, even when you are in a subdirectory somewhere, this:
    $ git ls-tree pu -- '/:*.h' "/!$path"

would list paths in the pu branch, limiting its output to any "*.h" header file, and a path that matches exactly with whatever is in $path variable without globbing within the current level. The above uses ':' as "this is relative to root" (your favorite, whose rationale being that HEAD:Makefile names Makefile at the top) and '!' (randombly chosen without any rationale other than being "NOT" and without any association with "glob", which make it a bad choice of the letter) as "this is NOT a glob".

If we use ':' as the magic introducer, '::*.h" may be more logical if you follow your "HEAD:Makefile names Makefile at the top" analogy; ':/' breaks the analogy (the first colon is a general introducer and does not talk anything about what kind of magic; the second letter should be what magic it is about, and should use ':' from HEAD:Makefile analogy).

I personally think "//*.h" looks a lot more natural than either ':*.h' or ':/*.h' that have been suggested on the command line, so I am tempted to suggest using '/' (the first slash in the example) as the magic introducer and using '/' (the second) as the 'from-root' magic signature.

[Footnote]

*1* I am ignoring "--no-index" variants that are not strictly part of git here, but I suspect this might also affect "git add /path/from/root" which I think we should deal with somehow.

Previous: Junio C HamanoNext: Michael J Gruber
Message 26 of 28 in “Relative ls-files”
  1. John TapsellMar 23, 2011
  2. Michael J GruberMar 23, 2011
  3. John TapsellMar 23, 2011
  4. demerphqMar 23, 2011
  5. Michael J GruberMar 23, 2011
  6. Martin LanghoffMar 23, 2011
  7. Junio C HamanoMar 23, 2011
  8. Nguyen Thai Ngoc DuyMar 23, 2011
  9. Junio C HamanoMar 23, 2011
  10. Nguyen Thai Ngoc DuyMar 23, 2011
  11. Junio C HamanoMar 23, 2011
  12. Nguyen Thai Ngoc DuyMar 24, 2011
  13. 1/2 Reimplement read_tree_recursive() using tree_entry_interesting()Nguyễn Thái Ngọc Duy, Mar 24, 2011
  14. 2/2 Convert read_tree{,_recursive} to support struct pathspecNguyễn Thái Ngọc Duy, Mar 24, 2011
  15. Nguyen Thai Ngoc DuyMar 24, 2011
  16. Junio C HamanoMar 24, 2011
  17. Junio C HamanoMar 24, 2011
  18. Junio C HamanoMar 24, 2011
  19. 1/3 Reimplement read_tree_recursive() using tree_entry_interesting()Nguyễn Thái Ngọc Duy, Mar 25, 2011
  20. 2/3 Convert read_tree{,_recursive} to support struct pathspecNguyễn Thái Ngọc Duy, Mar 25, 2011
  21. 3/3 Improve tree_entry_interesting() handling codeNguyễn Thái Ngọc Duy, Mar 25, 2011
  22. Junio C HamanoMar 24, 2011
  23. Martin LanghoffMar 23, 2011
  24. Junio C HamanoMar 23, 2011
  25. Junio C HamanoMar 23, 2011
  26. Junio C HamanoMar 23, 2011
  27. Michael J GruberMar 23, 2011
  28. Nguyen Thai Ngoc DuyMar 23, 2011

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.