This speeds things up a lot, but as shown in the patches & tests changed modifies the behavior where we have \0 in *patterns* (only possible with 'grep -f <file>'). I'd like to go down this route because it makes dropping kwset a lot easier, and I don't think bending over backwards to support these \0 patterns is worth it. But maybe others disagree, so I wanted to send what I had before I tried tackling the pickaxe code. There I figured I'd just make -G's ERE be a PCRE if we had the PCRE v2 backend, since unlike "grep"'s default BRE the ERE syntax is mostly a subset of PCRE, but again others might thing that's too aggressive and would prefer to keep the distinction, only using PCRE there in place of our current use of kwset. Ævar Arnfjörð Bjarmason (7): grep: inline the return value of a function call used only once grep tests: move "grep binary" alongside the rest grep tests: move binary pattern tests into their own file grep: make the behavior for \0 in patterns sane grep: drop support for \0 in --fixed-strings <pattern> grep: remove the kwset optimization grep: use PCRE v2 for optimized fixed-string search Documentation/git-grep.txt | 17 +++ grep.c | 103 ++++++-------- grep.h | 2 - ...a1.sh => t7008-filter-branch-null-sha1.sh} | 0 ...08-grep-binary.sh => t7815-grep-binary.sh} | 101 -------------- t/t7816-grep-binary-pattern.sh | 127 ++++++++++++++++++ 6 files changed, 183 insertions(+), 167 deletions(-) rename t/{t7009-filter-branch-null-sha1.sh => t7008-filter-branch-null-sha1.sh} (100%) rename t/{t7008-grep-binary.sh => t7815-grep-binary.sh} (55%) create mode 100755 t/t7816-grep-binary-pattern.sh -- 2.22.0.455.g172b71a6c5