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

Re: [PATCH 6/6] blame: enable funcname blaming with userdiff driver

From
Junio C Hamano <gitster@pobox.com>
Date
Oct 29, 2020, 20:40 UTC
Message-ID
<xmqqy2jo6a0z.fsf@gitster.c.googlers.com>
In-Reply-To
<a1e1c977d0978424fb07c97be0479f43a325cbea.1603889270.git.gitgitgadget@gmail.com>
"Philippe Blain via GitGitGadget" <gitgitgadget@gmail.com> writes:
Show 23 quoted lines
> From: Philippe Blain <levraiphilippeblain@gmail.com>
>
> In blame.c::cmd_blame, we send the 'path' field of the 'sb' 'struct
> blame_scoreboard' as the 'path' argument to
> 'line-range.c::parse_range_arg', but 'sb.path' is not set yet; it's set
> to the local variable 'path' a few lines later at line 1137.
>
> This 'path' argument is only used in 'parse_range_arg' if we are blaming
> a funcname, i.e. `git blame -L :<funcname> <path>`, and in that case it
> is sent to 'parse_range_funcname', where it is used to determine if a
> userdiff driver should be used for said <path> to match the given
> funcname.
>
> Since 'path' is yet unset, the userdiff driver is never used, so we fall
> back to the default funcname regex, which is usually not appropriate for
> paths that are set to use a specific userdiff driver, and thus either we
> match some unrelated lines, or we die with
>
>     fatal: -L parameter '<funcname>' starting at line 1: no match
>
> This has been the case ever since `git blame` learned to blame a
> funcname in 13b8f68c1f (log -L: :pattern:file syntax to find by
> funcname, 2013-03-28).
Good find.
> Enable funcname blaming for paths using specific userdiff drivers by
> sending the local variable 'path' to 'parse_range_arg' instead of the
> yet unset 'sb.path'.

Hmph. The reason why sb.path is not set to path at this point but later gets set is? I am wondering if this is leaving an unneeded room for sb.path and path to diverge by mistake. IOW, I wonder if it is better to set sb.path as early as we figure out which path we are interested in, forget we have local variable "path" and use sb.path consistently throughout the code.

But that is merely a potential future clean-up. The local variable path is still used one more time in the error message given when this parse_range_arg() fails, so at least this change makes the use of path more consistent. I like the simplicity of this fix.

> Add a regression test in 'annotate-tests.sh', which is sourced in
> t8001-annotate.sh and t8002-blame.sh, leveraging an existing file used
> to test the userdiff patterns in t4018-diff-funcname.
Thanks, that change also makes sense.
Previous: Philippe Blain via GitGitGadgetNext: Philippe Blain
Message 6 of 30 in “blame: enable funcname blaming with userdiff driver”
  1. 0/6 blame: enable funcname blaming with userdiff driverPhilippe Blain via GitGitGadget, Oct 28, 2020
  2. 3/6 blame-options.txt: also mention 'funcname' in '-L' descriptionPhilippe Blain via GitGitGadget, Oct 28, 2020
  3. Junio C HamanoOct 29, 2020
  4. Philippe BlainOct 31, 2020
  5. 6/6 blame: enable funcname blaming with userdiff driverPhilippe Blain via GitGitGadget, Oct 28, 2020
  6. Junio C HamanoOct 29, 2020
  7. Philippe BlainOct 31, 2020
  8. Junio C HamanoOct 31, 2020
  9. 4/6 doc: add more pointers to gitattributes(5) for userdiffPhilippe Blain via GitGitGadget, Oct 28, 2020
  10. Eric SunshineOct 28, 2020
  11. 5/6 line-log: mention both modes in 'blame' and 'log' short helpPhilippe Blain via GitGitGadget, Oct 28, 2020
  12. Eric SunshineOct 28, 2020
  13. Philippe BlainOct 29, 2020
  14. 2/6 doc: line-range: improve formattingPhilippe Blain via GitGitGadget, Oct 28, 2020
  15. Eric SunshineOct 28, 2020
  16. Junio C HamanoOct 29, 2020
  17. Philippe BlainOct 31, 2020
  18. 1/6 doc: log, gitk: move '-L' description to 'line-range-options.txt'Philippe Blain via GitGitGadget, Oct 28, 2020
  19. Junio C HamanoOct 29, 2020
  20. Philippe BlainOct 31, 2020
  21. Junio C HamanoOct 31, 2020
  22. 0/8 blame: enable funcname blaming with userdiff driverPhilippe Blain via GitGitGadget, Nov 1, 2020
  23. 1/8 doc: log, gitk: move '-L' description to 'line-range-options.txt'Philippe Blain via GitGitGadget, Nov 1, 2020
  24. 3/8 blame-options.txt: also mention 'funcname' in '-L' descriptionPhilippe Blain via GitGitGadget, Nov 1, 2020
  25. 4/8 doc: add more pointers to gitattributes(5) for userdiffPhilippe Blain via GitGitGadget, Nov 1, 2020
  26. 5/8 line-log: mention both modes in 'blame' and 'log' short helpPhilippe Blain via GitGitGadget, Nov 1, 2020
  27. 2/8 doc: line-range: improve formattingPhilippe Blain via GitGitGadget, Nov 1, 2020
  28. 6/8 blame: enable funcname blaming with userdiff driverPhilippe Blain via GitGitGadget, Nov 1, 2020
  29. 8/8 blame: simplify 'setup_blame_bloom_data' interfacePhilippe Blain via GitGitGadget, Nov 1, 2020
  30. 7/8 blame: simplify 'setup_scoreboard' interfacePhilippe Blain via GitGitGadget, Nov 1, 2020

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.