grep -P: Fix matching ^ and $
authorMichał Kiedrowicz <michal.kiedrowicz@gmail.com>
Sat, 25 Feb 2012 09:24:28 +0000 (10:24 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 27 Feb 2012 00:34:03 +0000 (16:34 -0800)
commitfba4f1259db8e5dc47b1c8e6e344c61f7eb4a9df
tree29d7fee27130fd8acf264055f850ff4641e9a150
parentf0c5793b37a53992611968ab4a1d62a0e3edc2dd
grep -P: Fix matching ^ and $

When "git grep" is run with -P/--perl-regexp, it doesn't match ^ and $ at
the beginning/end of the line.  This is because PCRE normally matches ^
and $ at the beginning/end of the whole text, not for each line, and "git
grep" passes a large chunk of text (possibly containing many lines) to
pcre_exec() and then splits the text into lines.

This makes "git grep -P" behave differently from "git grep -E" and also
from "grep -P" and "pcregrep":

$ cat file
a
 b
$ git grep --no-index -P '^ ' file
$ git grep --no-index -E '^ ' file
file: b
$ grep -c -P '^ ' file
 b
$ pcregrep -c '^ ' file
 b

Reported-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Signed-off-by: Michał Kiedrowicz <michal.kiedrowicz@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
grep.c