This is a re-roll of [1] which teaches git-blame to accept multiple -L ranges. It is built atop [6] (es/blame-L-more in 'pu').
The series is longer than expected since it includes a few more cleanup patches beyond those already posted separately [2], [3], [4], [5], [6]; and because it implements relative /RE/ searches requested by Junio [7], and brings git-log's multiple -L behavior in line with git-blame's. Despite the length of the series, the patches are mostly small and simple.
Changes since v1:
* Make /RE/ searches relative to end of previous -L, if any [7]. Ditto for :RE searches.
* Introduce ^/RE/ and ^:RE to search from start of file.
* Add (lots of) tests.
* Update documentation.
* Collect ranges via 'struct range_set' rather than (ab)using blame.c:coalesce() and add_blame_range().
Quick overview of patches:
1-2: More cleanups akin to [2], [3], [4], [5], [6].
3-7: Implement git-blame multiple -L support; add tests; update documentation.
8-14: Make /RE/ and :RE searches relative; introduce ^/RE/ and ^:RE to search from start of file; add tests; update documentation.
15-16: Reject bogus -L inputs for line numbers less than 1. This comes late in the series because this case becomes much easier to detect following patch 8.
[1]: http://thread.gmane.org/gmane.comp.version-control.git/229755 [2]: http://thread.gmane.org/gmane.comp.version-control.git/229917 [3]: http://thread.gmane.org/gmane.comp.version-control.git/230532 [4]: http://git.661346.n2.nabble.com/PATCH-0-6-fix-blame-L-regression-add-tests-tp7592174.html [5]: http://thread.gmane.org/gmane.comp.version-control.git/231035 [6]: http://thread.gmane.org/gmane.comp.version-control.git/231412 [7]: http://article.gmane.org/gmane.comp.version-control.git/229966
Eric Sunshine (16): git-log.txt: place each -L option variation on its own line line-range-format.txt: clarify -L:regex usage form range-set: publish API for re-use by git-blame -L blame: inline one-line function into its lone caller blame: accept multiple -L ranges t8001/t8002: blame: add tests of multiple -L options blame: document multiple -L support line-range: teach -L/RE/ to search relative to anchor point blame: teach -L/RE/ to search from end of previous -L range log: teach -L/RE/ to search from end of previous -L range line-range-format.txt: document -L/RE/ relative search line-range: teach -L^/RE/ to search from start of file line-range: teach -L:RE to search from end of previous -L range line-range: teach -L^:RE to search from start of file t8001/t8002: blame: add tests of -L line numbers less than 1 line-range: reject -L line numbers less than 1
Documentation/blame-options.txt | 10 +-- Documentation/git-blame.txt | 10 ++- Documentation/git-log.txt | 5 +- Documentation/line-range-format.txt | 16 +++-- builtin/blame.c | 93 ++++++++++++++------------ line-log.c | 25 ++++--- line-log.h | 12 ++++ line-range.c | 62 +++++++++++++---- line-range.h | 5 +- t/annotate-tests.sh | 130 ++++++++++++++++++++++++++++++++++-- t/t4211-line-log.sh | 2 +- 11 files changed, 282 insertions(+), 88 deletions(-)
-- 1.8.4.rc1.409.gbd48715