Bug: git log -L manpage claims regexes are supported, but they are not
- From
- Daniel <daniel@heath.cc>
- Date
- Dec 4, 2020, 02:47 UTC
- Message-ID
- <147444de-7653-d067-596a-9448ae6b8cac@heath.cc>
Context:
$ git version git version 2.25.1
$ git log -L ^/bootstrap-sass/,+2 Gemfile fatal: -L argument not 'start,end:file' or ':funcname:file': ^/bootstrap-sass/,+2
I expected the above to work, based on the contents of `git help log`, which describes the regex format.
This regex format works correctly in `git blame -L`, and it appears the manpage was copied across but not the implementation.
$ git help log
-L <start>,<end>:<file>, -L :<funcname>:<file> Trace the evolution of the line range given by "<start>,<end>" (or the function name regex <funcname>) within the <file>. You may not give any pathspec limiters. This is currently limited to a walk starting from a single revision, i.e., you may only give zero or one positive revision arguments, and <start> and <end> (or <funcname>) must exist in the starting revision. You can specify this option more than once. Implies --patch. Patch output can be suppressed using --no-patch, but other diff formats (namely --raw, --numstat, --shortstat, --dirstat, --summary, --name-only, --name-status, --check) are not currently implemented.
<start> and <end> can take one of these forms:
• number
If <start> or <end> is a number, it specifies an absolute line number (lines count from 1).
• /regex/
This form will use the first line matching the given POSIX regex. If <start> is a regex, it will search from the end of the previous -L range, if any, otherwise from the start of file. If <start> is “^/regex/”, it will search from the start of file. If <end> is a regex, it will search starting at the line given by <start>.
• +offset or -offset
This is only valid for <end> and will specify a number of lines before or after the line given by <start>.
If “:<funcname>” is given in place of <start> and <end>, it is a regular expression that denotes the range from the first funcname line that matches <funcname>, up to the next funcname line. “:<funcname>” searches from the end of the previous -L range, if any, otherwise from the start of file. “^:<funcname>” searches from the start of file.