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

Re: Relative ls-files

From
Michael J Gruber <git@drmicha.warpmail.net>
Date
Mar 23, 2011, 15:57 UTC
Message-ID
<4D8A1883.1030606@drmicha.warpmail.net>
In-Reply-To
<7voc51g7xo.fsf@alter.siamese.dyndns.org>
Junio C Hamano venit, vidit, dixit 23.03.2011 16:42:
Show 33 quoted lines
> Michael J Gruber <git@drmicha.warpmail.net> writes:
> 
>>>> 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.
> 
>>>> 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.

I admit I haven't thought much about globbing. Does my current POC patch affect globbing in the way you want to avoid?

Show 28 quoted lines
> 
> 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).

Mainly I want "few characters" (up to 2) and "good analogy". "/" and "//" have obvious good analogies to file system usage.

> 
> I personally think "//*.h" looks a lot more natural than either ':*.h' or
With current git:
(cd Documentation && git show :Makefile)

Which Makefile do you get? That is why I call the ":" proposal natural. I know, "git show Makefile" does not give the local one, but

git show :./Makefile
does. Given this, I would find ":/Makefile" very natural as well.
> ':/*.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.

I'm afraid (but not sure) that leading "/" would create problems for Git on Win! ":/" is fine according to the experts.

Michael
Previous: Junio C HamanoNext: Nguyen Thai Ngoc Duy
Message 27 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.