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

Re: [PATCH v3 05/13] parse the -L options

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 19, 2010, 18:44 UTC
Message-ID
<7vwrsrnwg0.fsf@alter.siamese.dyndns.org>
In-Reply-To
<AANLkTimNAyKZNdIIc6R5ylHuOVJho7UF0fnYC8jiaF9i@mail.gmail.com>
Bo Yang <struggleyb.nku@gmail.com> writes:
> The point is that, the syntax we support is:
>
> -L n1,m1 -L n2,m2 pathspec1  -L n3,m3 pathspec2

That itself smells like a bad design, unless done very carefully and documented clearly.

For example, what does this mean?
    $ git log -L n1,m1 master

As -L wants to see at least one path before running out of the command line argument, we take "master" as the filename. Hence, the command line does not have any revision specified and defaults to HEAD. I.e. "traverse from the current HEAD and show only commits that touch the line region n1,m1 that appears in the version of path 'master' in HEAD".

What about this?
    $ git log -L n1,m1 master..next one two

Clearly the user wants to traverse revision range between master and next. The -L option wants to see one path so slurps "one". The traversal however is further limited by a pathspec "two". Should the use of "one" as an argument to -L automatically add it also to the pathspec? I.e. "traverse from 'next' down to 'master', checking commits that touch either path 'one' or 'two', and show only commits that touch the line region n1,m1 that appears in the version of path 'one' in 'next'"?

Or perhaps master..next is the name of the file the user is interested in? I.e. "Starting from branches 'one' and 'two', show only commits that touch the line region n1,m1 that appears in file 'master..next'"? But that is a broken interpretation, as "-L range path" cannto possibly make sense if you have more than one starting point, and this interpretation gives you two (i.e. 'one' and 'two').

How would you disambiguate -Lpaths, revisions and pathspecs? How does -Lpath interact with pathspecs?

What if the name of the file the user wants to annotate begins with a "-"? For pathspec limiter, the users have already learned that "--" can be used to say "everything that comes after this token is pathspec", but that knowledge cannot be reused with this syntax.

It almost feels as if you want to have something more like
    -L <begin>,<end>[,<path>]

where <path> is mandatory for the first use of -L (i.e. missing ,<path> means the same path from the previous -L that has one) to make it clear that this is completely different from the normal pathspec.

Previous: Bo YangNext: Thomas Rast
Message 13 of 39 in “parse-options: stop when encounter a non-option”
  1. 01/13 parse-options: stop when encounter a non-optionBo Yang, Jul 11, 2010
  2. 02/13 parse-options: add two helper functionsBo Yang, Jul 11, 2010
  3. Junio C HamanoJul 12, 2010
  4. 03/13 add the basic data structure for line level historyBo Yang, Jul 11, 2010
  5. Bo YangJul 12, 2010
  6. Junio C HamanoJul 12, 2010
  7. Bo YangJul 18, 2010
  8. 04/13 refactor parse_locBo Yang, Jul 11, 2010
  9. Junio C HamanoJul 12, 2010
  10. 05/13 parse the -L optionsBo Yang, Jul 11, 2010
  11. Junio C HamanoJul 13, 2010
  12. Bo YangJul 18, 2010
  13. Junio C HamanoJul 19, 2010
  14. Thomas RastJul 19, 2010
  15. Junio C HamanoJul 19, 2010
  16. Thomas RastJul 20, 2010
  17. Junio C HamanoJul 20, 2010
  18. Thomas RastJul 22, 2010
  19. Junio C HamanoJul 23, 2010
  20. Bo YangJul 20, 2010
  21. Bo YangJul 20, 2010
  22. 06/13 export three functions from diff.cBo Yang, Jul 11, 2010
  23. 07/13 add range clone functionsBo Yang, Jul 11, 2010
  24. Junio C HamanoJul 12, 2010
  25. 08/13 map/take range to parentBo Yang, Jul 11, 2010
  26. Junio C HamanoJul 12, 2010
  27. 09/13 print the line logBo Yang, Jul 11, 2010
  28. Junio C HamanoJul 12, 2010
  29. 10/13 map/print ranges along traversing the history topologicallyBo Yang, Jul 11, 2010
  30. Junio C HamanoJul 12, 2010
  31. 11/13 add --always-print optionBo Yang, Jul 11, 2010
  32. Junio C HamanoJul 13, 2010
  33. 12/13 add two test casesBo Yang, Jul 11, 2010
  34. 13/13 some document updateBo Yang, Jul 11, 2010
  35. Jakub NarebskiJul 11, 2010
  36. Bo YangJul 12, 2010
  37. Junio C HamanoJul 12, 2010
  38. Bo YangJul 18, 2010
  39. Junio C HamanoJul 12, 2010

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.