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

Re: [RFC/PATCH] Fix path prefixing in grep_object

From
Phil Hord <phil.hord@gmail.com>
Date
Aug 26, 2013, 17:45 UTC
Message-ID
<CABURp0r46C84pPptecDmLBHuO2Z+vXAm26JRA+HVcF9KvT_NyA@mail.gmail.com>
In-Reply-To
<xmqqbo4kicsm.fsf@gitster.dls.corp.google.com>
On Mon, Aug 26, 2013 at 1:26 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 24 quoted lines
> Phil Hord <phil.hord@gmail.com> writes:
>
>>> If your justification were "above says 'there may be a readon why
>>> the user wanted to ask it in that way', i.e. 'find in this tree
>>> object HEAD:some/path and report where hits appear', but the reason
>>> can only be from laziness and/or broken script and the user always
>>> wants the answer from within the top-level tree-ish", then that
>>> argument may make some sense. You need to justify why it is OK to
>>> lose information in the answer by rewriting the colon that separates
>>> the question ("in this tree object") and the answer ("at this path
>>> relative to the tree object given").
>>>
>>> Whether you rewrite the input or the output is not important; you
>>> are trying to give an answer to a different question, which is what
>>> I find questionable.
>>
>> Ok, so if I can summarize what I am inferring from your objection:
>>
>>  1. The (tree-path, found-path) pair is useful information to get back
>> from git-grep.
>
> At least that was the intent. I can be persuaded that your change
> will not break anybody if you successfully argue that it is not a
> useful information, though.

Anyone who is interested in the matched trees from the original command-line only needs to compare the matched paths' prefixes with the original args to see which one is responsible for each hit. But this is not convincing to me because they may not know the original args to the grep command.

I do not know if this a good reason to keep supporting this mode, though. I can just as easily see some script being confused by four colons in

    origin/master:some/:path/file.c:1:int main()

instead of only three that he is used to because someone passed in a longer tree-path than expected.

I don't know if I can make that argument.

I think I _can_ argue that the colon separator here is historically just a part of the filename because it is not affected by "--null".

Show 24 quoted lines
>>  2. A colon is used to delimit these pieces of information, just as a
>> colon is used to delimit the filename from the matched-line results.
>>
>>  3. The fact that the colon is also the separator used in object refs
>> is mere coincidence; the colon was _not_ chosen because it
>> conveniently turns the results list into valid object references.  A
>> comma could have been instead, or even a \t.
>
> Not necessarily.  If the user is asking the question in a more
> natural way (I want to see where in 'next' branch's tip commit hits
> appear, by the way, I know I am only interested in builtin/ so I'd
> give pathspec as well when I am asking this question), the output
> does give <commit> <colon> <path>, so it is more than coincidence.
>
> I do not think it is worth doing only for this particular use case,
> but it might be a good change to allow A:B:C to be parsed as a
> proper extended SHA-1 expression and make it yield
>
>         git rev-parse $(git rev-parse $(git rev-parse A):B):C
>
> Right now, "B:C" is used as a path inside tree-ish "A", but I think
> we can safely fall back, when path B:C does not appear in tree-ish
> A, to see if path B appears in it and is a tree, and then turn it
> into a look-up of path C in that tree A:B.

That would also solve this problem, usually. But I don't like it nearly as much as my patch, and I agree it seems extreme for this one corner-case.

Phil
Previous: Junio C HamanoNext: Junio C Hamano
Message 12 of 19 in “Fix path prefixing in grep_object”
  1. Fix path prefixing in grep_objectPhil Hord, Aug 25, 2013
  2. Phil HordAug 25, 2013
  3. Junio C HamanoAug 25, 2013
  4. Jonathan NiederAug 25, 2013
  5. Junio C HamanoAug 25, 2013
  6. Junio C HamanoAug 26, 2013
  7. Phil HordAug 26, 2013
  8. Junio C HamanoAug 26, 2013
  9. Phil HordAug 26, 2013
  10. Phil HordAug 26, 2013
  11. Junio C HamanoAug 26, 2013
  12. Phil HordAug 26, 2013
  13. Junio C HamanoAug 27, 2013
  14. Phil HordAug 27, 2013
  15. Junio C HamanoAug 26, 2013
  16. Phil HordAug 26, 2013
  17. Jeff KingAug 25, 2013
  18. Jonathan NiederAug 25, 2013
  19. Jeff KingAug 25, 2013

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.