Code

grep: don't call regexec() for fixed strings
authorRené Scharfe <rene.scharfe@lsrfire.ath.cx>
Fri, 9 Jan 2009 23:18:34 +0000 (00:18 +0100)
committerJunio C Hamano <gitster@pobox.com>
Sat, 10 Jan 2009 05:35:56 +0000 (21:35 -0800)
commitc822255cfc1ac83daeeeee1647e3c775450c830c
treeae2027aed5ead1df39b4da3067300bd80e6cd1bc
parentfb62eb7fab97cea880ea7fe4f341a4dfad14ab48
grep: don't call regexec() for fixed strings

Add the new flag "fixed" to struct grep_pat and set it if the pattern
is doesn't contain any regex control characters in addition to if the
flag -F/--fixed-strings was specified.

This gives a nice speed up on msysgit, where regexec() seems to be
extra slow.  Before (best of five runs):

$ time git grep grep v1.6.1 >/dev/null

real    0m0.552s
user    0m0.000s
sys     0m0.000s

$ time git grep -F grep v1.6.1 >/dev/null

real    0m0.170s
user    0m0.000s
sys     0m0.015s

With the patch:

$ time git grep grep v1.6.1 >/dev/null

real    0m0.173s
user    0m0.000s
sys     0m0.000s

The difference is much smaller on Linux, but still measurable.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
grep.c
grep.h