git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: git grep with leading inverted bracket expression

From
MWMatthew Wilcox <willy@infradead.org>
Date
Jun 7, 2018, 19:22 UTC
Message-ID
<20180607192213.GB24370@bombadil.infradead.org>
In-Reply-To
<87602uza56.fsf@evledraar.gmail.com>
On Thu, Jun 07, 2018 at 09:09:25PM +0200, Ævar Arnfjörð Bjarmason wrote:
Show 10 quoted lines
> On Thu, Jun 07 2018, Matthew Wilcox wrote:
> > If the first atom of a regex is a bracket expression with an inverted range,
> > git grep is very slow.
> 
> I have some WIP patches to fix all of this, which I'll hopefully submit
> before 2.19 is out the door.
> 
> What you've discovered here is how shitty your libc regex engine is,
> because unless you provide -P and compile with a reasonably up-to-date
> libpcre (preferably v2) with JIT that's what you'll get.
I'm using Debian's build, and it is linked against a recent libpcre2:
$ ldd /usr/lib/git-core/git
	libpcre2-8.so.0 => /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f59ad5f2000)
$ dpkg --status libpcre2-8-0
Version: 10.31-3
But I wasn't using -P.  If I do, then I see the performance numbers you do:

$ time git grep -P '[^t]truct_size' >/dev/null real 0m0.354s user 0m0.340s sys 0m0.639s $ time git grep -P 'struct_size' >/dev/null real 0m0.336s user 0m0.552s sys 0m0.457s $ time git grep 'struct_size' >/dev/null real 0m0.335s user 0m0.535s sys 0m0.474s

> So you need to just use an up-to-date libpcre2 & -P and performance
> won't suck.

I don't tend to use terribly advanced regexps, so I'll just set grep.patternType to 'perl' and then it'll automatically be fast for me without your patches ;-)

> My WIP patches will make us use PCRE for all grep modes, using an API it
> has to convert basic & extended regexp syntax to its own syntax, so
> we'll be able to do that transparently.
That's clearly the right answer.  Thanks!
Previous: Ævar Arnfjörð BjarmasonNext: Ævar Arnfjörð Bjarmason
Message 3 of 4 in “git grep with leading inverted bracket expression”
  1. Matthew WilcoxJun 7, 2018
  2. Ævar Arnfjörð BjarmasonJun 7, 2018
  3. Matthew WilcoxJun 7, 2018
  4. Ævar Arnfjörð BjarmasonJun 7, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.