]> git.ipfire.org Git - thirdparty/git.git/commit - grep.c
grep.c: teach 'git grep --only-matching'
authorTaylor Blau <me@ttaylorr.com>
Mon, 9 Jul 2018 20:33:47 +0000 (15:33 -0500)
committerJunio C Hamano <gitster@pobox.com>
Mon, 9 Jul 2018 21:15:28 +0000 (14:15 -0700)
commit9d8db06eb4a5d5577db559a0059a377914c1ce5a
treea0ef841c1f6cd361d25b5c9f0e25337eb4a1c38d
parentc707ded332375a5b51c1acf9b7ce1c29cbd4536d
grep.c: teach 'git grep --only-matching'

Teach 'git grep --only-matching', a new option to only print the
matching part(s) of a line.

For instance, a line containing the following (taken from README.md:27):

  (`man gitcvs-migration` or `git help cvs-migration` if git is

Is printed as follows:

  $ git grep --line-number --column --only-matching -e git -- \
    README.md | grep ":27"
  README.md:27:7:git
  README.md:27:16:git
  README.md:27:38:git

The patch works mostly as one would expect, with the exception of a few
considerations that are worth mentioning here.

Like GNU grep, this patch ignores --only-matching when --invert (-v) is
given. There is a sensible answer here, but parity with the behavior of
other tools is preferred.

Because a line might contain more than one match, there are special
considerations pertaining to when to print line headers, newlines, and
how to increment the match column offset. The line header and newlines
are handled as a special case within the main loop to avoid polluting
the surrounding code with conditionals that have large blocks.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-grep.txt
builtin/grep.c
grep.c
grep.h
t/t7810-grep.sh