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

Re: Fwd: Possibly nicer pathspec syntax?

From
Linus Torvalds <torvalds@linux-foundation.org>
Date
Feb 8, 2017, 03:02 UTC
Message-ID
<CA+55aFwPLtuPciN1o_03CwkKqFWgZd_br9Q14qyr7a7N7mxTeA@mail.gmail.com>
In-Reply-To
<xmqqefz9xv0x.fsf@gitster.mtv.corp.google.com>
On Tue, Feb 7, 2017 at 6:42 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 9 quoted lines
>
>  1. I think some commands limit their operands to cwd and some work
>     on the whole tree when given no pathspec. I think the "no
>     positive?  then let's give you everything except these you
>     excluded" should base the definition of "everything" to that.
>     IOW, "cd t && git grep -e foo" shows everything in t/ directory,
>     so the default you would add would be "." for "grep"; "cd t &&
>     git diff HEAD~100 HEAD" would show everything, so you would give
>     ":(top)." for "diff".

No. The thing is, "git diff" is relative too - for path specifications. And the negative entries are pathspecs - and they act as relative ones.

IOW, that whole
  cd drivers
  git diff A..B -- net/

will actually show the diff for drivers/net - so the pathspec very much acts as relative to the cwd.

So no, absolute (ie ":(top)" or ":/") doesn't actually make sense for "diff" either, even though diff by default is absolute when not given a pathname at all.

But if you do
  cd drivers
  git diff A..B -- :^/arch

then suddenly an absolute positive root _does_ make sense,. because now the negative pathspec was absolute..

Odd? Yes it is. But the positive pathspec rules are what they are, and they are actually what I suspect everybody really wants. The existing negative ones match the rules for the positive ones.

So I suspect that the best thing is if the "implicit positive rule when there are no explicit ones" ends up matching the same semantics as the (explicit) negative entries have..

>  2. I am not sure what ctype.c change is about.  Care to elaborate?

I didn't see the need for it either until I made the rest of the patch, and it didn't work at all.

The pathspec.c code uses "if (is_pathspec_magic(..))" to test whether a character is a short magiic pathspec character. But '^' wasn't in that set, because it was already marked as being (only) in the regex set.

Does that whole is_pathspec_magic() thing make any sense when we have an array that specifies the special characters we react to? No it does not.

But it is what the code does, and I just made that code work.
>  3. I think our recent trend is to wean ourselves away from "an
>     empty element in pathspec means all paths match", and I think we
>     even have accepted a patch to emit a warning.  Doesn't the
>     warning trigger for the new code below?

It didn't trigger for me in my testing, I suspect the warning is at an earlier level when it walks through the argv[] array and fills in the pathspec arrays. But I didn't actually look for it.

                   Linus
Previous: Junio C HamanoNext: Junio C Hamano
Message 5 of 17 in “Fwd: Possibly nicer pathspec syntax?”
  1. Linus TorvaldsFeb 7, 2017
  2. Junio C HamanoFeb 8, 2017
  3. Linus TorvaldsFeb 8, 2017
  4. Junio C HamanoFeb 8, 2017
  5. Linus TorvaldsFeb 8, 2017
  6. Junio C HamanoFeb 8, 2017
  7. Linus TorvaldsFeb 8, 2017
  8. Junio C HamanoFeb 8, 2017
  9. Linus TorvaldsFeb 8, 2017
  10. Duy NguyenFeb 8, 2017
  11. Junio C HamanoFeb 8, 2017
  12. Junio C HamanoFeb 8, 2017
  13. Duy NguyenFeb 9, 2017
  14. Duy NguyenFeb 9, 2017
  15. Mike HommeyFeb 8, 2017
  16. Linus TorvaldsFeb 8, 2017
  17. Mike HommeyFeb 8, 2017

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.