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

Re: [PATCH] rev-list/log: document logic with several limiting options

From
Michael J Gruber <git@drmicha.warpmail.net>
Date
Sep 14, 2012, 07:46 UTC
Message-ID
<5052E0D8.3040500@drmicha.warpmail.net>
In-Reply-To
<7vvcfh62l3.fsf@alter.siamese.dyndns.org>
Junio C Hamano venit, vidit, dixit 13.09.2012 23:21:
Show 24 quoted lines
> Michael J Gruber <git@drmicha.warpmail.net> writes:
> 
>> Thanks for "this" ;)
> 
> Here is a replacement to "this", that adds the "--debug" option to
> "git grep" and an equivalent "--debug-grep" to "git log" family.
> 
> -- >8 --
> Subject: [PATCH] grep: teach --debug option to dump the parse tree
> 
> Our "grep" allows complex boolean expressions to be formed to match
> each individual line with operators like --and, '(', ')' and --not.
> Introduce the "--debug" option to show the parse tree to help people
> who want to debug and enhance it.
> 
> Also "log" learns "--debug-grep" option to do the same.  The command
> line parser to the log family is a lot more limited than the general
> "git grep" parser, but it has special handling for header matching
> (e.g. "--author"), and a parse tree is valuable when working on it.
> 
> Note that "--all-match" is *not* any individual node in the parse
> tree.  It is an instruction to the evaluator to check all the nodes
> in the top-level backbone have matched and reject a document as
> non-matching otherwise.

I haven't read all your responses yet, but the/my main confusion comes from all-match. My understanding is:

--all-match == turn all top-level ORs into ANDs

(unless it's all --author at the top-level; and I'm referring to user supplied ORs, not those added by the implementation)

Seing (OR foo true) being evaluated to false when foo is false and all-match is in effect is terribly confusing, me thinks (debug output).

In fact, I think the behavior described above (if it's correct) is a product of the evolution of grep.c and the current implementation (turning former unions into intersections in some cases, inserting that TRUE node), but not necessarily the intended or preferrable outcome in all corner cases.

We AND different types of limit options in any case (this used to be affected by --all-match[?]), and we OR --author options in any case. So having --all-match turn "--grep=foo --grep=bar" from OR into AND would make the most sense at least to me (and I mean: independent of the presence of an --author option).

Michael
Previous: Junio C HamanoNext: Junio C Hamano
Message 41 of 43 in “rev-list/log: document logic with several limiting options”
  1. rev-list/log: document logic with several limiting optionsMichael J Gruber, Sep 11, 2012
  2. Junio C HamanoSep 11, 2012
  3. Michael J GruberSep 12, 2012
  4. Junio C HamanoSep 12, 2012
  5. Junio C HamanoSep 12, 2012
  6. 0/6 rev-list/log: document logic with several limiting optionsMichael J Gruber, Sep 13, 2012
  7. Junio C HamanoSep 13, 2012
  8. 1/6 t7810-grep: bring log --grep tests in common formMichael J Gruber, Sep 13, 2012
  9. 2/6 t7810-grep: test multiple --grep with and without --all-matchMichael J Gruber, Sep 13, 2012
  10. 3/6 t7810-grep: test multiple --author with --all-matchMichael J Gruber, Sep 13, 2012
  11. Junio C HamanoSep 13, 2012
  12. Junio C HamanoSep 13, 2012
  13. Michael J GruberSep 14, 2012
  14. Junio C HamanoSep 14, 2012
  15. 4/6 t7810-grep: test interaction of multiple --grep and --author optionsMichael J Gruber, Sep 13, 2012
  16. 5/6 t7810-grep: test --all-match with multiple --grep and --author optionsMichael J Gruber, Sep 13, 2012
  17. 6/6 rev-list/log: document logic with several limiting optionsMichael J Gruber, Sep 13, 2012
  18. Junio C HamanoSep 13, 2012
  19. Junio C HamanoSep 14, 2012
  20. Junio C HamanoSep 14, 2012
  21. 00/11 rev-list/log: document logic with several limiting optionsMichael J Gruber, Sep 14, 2012
  22. Junio C HamanoSep 14, 2012
  23. 01/11 grep: teach --debug option to dump the parse treeMichael J Gruber, Sep 14, 2012
  24. Junio C HamanoSep 14, 2012
  25. 02/11 log: name --debug-grep option like in the commit messageMichael J Gruber, Sep 14, 2012
  26. 03/11 grep: show --debug output only onceMichael J Gruber, Sep 14, 2012
  27. Junio C HamanoSep 14, 2012
  28. 04/11 log --grep/--author: honor --all-match honored for multiple --grep patternsMichael J Gruber, Sep 14, 2012
  29. 05/11 log: document use of multiple commit limiting optionsMichael J Gruber, Sep 14, 2012
  30. 06/11 fixup! log: document use of multiple commit limiting optionsMichael J Gruber, Sep 14, 2012
  31. Junio C HamanoSep 14, 2012
  32. 07/11 t7810-grep: bring log --grep tests in common formMichael J Gruber, Sep 14, 2012
  33. 08/11 t7810-grep: test multiple --grep with and without --all-matchMichael J Gruber, Sep 14, 2012
  34. 09/11 t7810-grep: test multiple --author with --all-matchMichael J Gruber, Sep 14, 2012
  35. Junio C HamanoSep 14, 2012
  36. 10/11 t7810-grep: test interaction of multiple --grep and --author optionsMichael J Gruber, Sep 14, 2012
  37. 11/11 t7810-grep: test --all-match with multiple --grep and --author optionsMichael J Gruber, Sep 14, 2012
  38. Junio C HamanoSep 14, 2012
  39. Michael J GruberSep 13, 2012
  40. Junio C HamanoSep 13, 2012
  41. Michael J GruberSep 14, 2012
  42. Junio C HamanoSep 14, 2012
  43. Michael J GruberSep 14, 2012

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.