Here's another shot :-)
For an instructive example, apply it and run
git log -L:archiver:archive.h
in your git.git.
Last time around, apart from some minor issues, there was one main
point discussed: it should be possible to do the line-log in two
separate steps, one for filtering and one for the diffing.
That would have some really nice advantages, in particular it would
let us generate the diff within the usual diff chain. That way it
would work together with e.g. --word-diff automatically.
However, with the whole diff chain IMHO already being in some
disarray, that's such a far-off goal (and a good example of gsoc scope
creep!) that I can't see myself working on it in the near future
unless someone decides to pay me for working on Git. Meanwhile, this
seems to be the only blocker for the inclusion of a feature for which
all feedback has been "WANT!" since it worked for the first time.
So I'd rather settle for including this slightly hacky version, and
then improving on it incrementally.
There are more things that need to be done: my rewrite for readability
(see  again) lost the support for -C and -C -C, so it no longer is
any use with big code moves. The only thing that currently works is
-M, which will track the ranges across a file rename that can be
detected by the diff engine (i.e., it works by letting the diff engine
form a rename filepair).
Changes since v7 include:
- An all-new patch that allows for funcname matching: -L:pattern:file.
I find it makes calling line-log (or blame, for that matter) much
more natural. I'm not exactly married to the syntax; in particular
it feels weird in blame where you have to say 'git blame -L:foo file'.
If you have better ideas, please shout.
- Tests! Yay. Also fixes for bugs found by the tests ;-)
- Dropped the unnecessary patch "Export three functions from diff.c".
Bo Yang (2):
Export rewrite_parents() for 'log -L'
Thomas Rast (3):
blame: introduce $ as "end of file" in -L syntax
Implement line-history search (git log -L)
log -L: :pattern:file syntax to find by funcname
Documentation/blame-options.txt | 19 +-
Documentation/git-log.txt | 22 +
Documentation/line-range-format.txt | 31 +
Makefile | 2 +
builtin/blame.c | 99 +--
builtin/log.c | 31 +
line-log.c | 1433 +++++++++++++++++++++++++++++++++++
line-log.h | 80 ++
log-tree.c | 4 +
revision.c | 22 +-
revision.h | 16 +-
t/t4211-line-log.sh | 42 +
t/t4211/expect.beginning-of-file | 43 ++
t/t4211/expect.end-of-file | 62 ++
t/t4211/expect.move-support-f | 40 +
t/t4211/expect.simple-f | 59 ++
t/t4211/expect.simple-f-to-main | 100 +++
t/t4211/expect.simple-main | 68 ++
t/t4211/expect.simple-main-to-end | 70 ++
t/t4211/expect.two-ranges | 102 +++
t/t4211/expect.vanishes-early | 39 +
t/t4211/history.export | 330 ++++++++
t/t8003-blame-corner-cases.sh | 6 +
23 files changed, 2601 insertions(+), 119 deletions(-)
create mode 100644 Documentation/line-range-format.txt
create mode 100644 line-log.c
create mode 100644 line-log.h
create mode 100755 t/t4211-line-log.sh
create mode 100644 t/t4211/expect.beginning-of-file
create mode 100644 t/t4211/expect.end-of-file
create mode 100644 t/t4211/expect.move-support-f
create mode 100644 t/t4211/expect.simple-f
create mode 100644 t/t4211/expect.simple-f-to-main
create mode 100644 t/t4211/expect.simple-main
create mode 100644 t/t4211/expect.simple-main-to-end
create mode 100644 t/t4211/expect.two-ranges
create mode 100644 t/t4211/expect.vanishes-early
create mode 100644 t/t4211/history.export
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html