From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Jeff King <peff@peff.net>
Cc: "René Scharfe" <l.s.r@web.de>,
"Marco Nenciarini" <marco.nenciarini@enterprisedb.com>,
git@vger.kernel.org, "Junio C Hamano" <gitster@pobox.com>
Subject: Re: BUG: git grep behave oddly with alternatives
Date: Fri, 13 Jan 2023 09:28:59 +0100 [thread overview]
Message-ID: <230113.86ilhazved.gmgdl@evledraar.gmail.com> (raw)
In-Reply-To: <Y8CBrtmL45tA/N8z@coredump.intra.peff.net>
On Thu, Jan 12 2023, Jeff King wrote:
> On Thu, Jan 12, 2023 at 06:13:13PM +0100, René Scharfe wrote:
>
>> > I'm not quite sure what you mean here by "non-greedy repetitions".
>> > Something like:
>> >
>> > # prefer "foo bar" to "foo bar bar"; only matters for colorizing or
>> > # --only-matching
>> > git grep -E 'foo.*?bar'
>> >
>> > ? If so, then yeah, that changes the meaning of a bare "?" and people
>> > might be surprised by it.
>>
>> Right. To be fair, question mark is a special character and you'd
>> probably need to quote it anyway if you want to match a literal
>> question mark. Otherwise I get:
>>
>> $ git grep -E 'foo.*?bar'
>> fatal: command line, 'foo.*?bar': repetition-operator operand invalid
>
> This is on macOS, I assume? With glibc it seems to be quietly ignored:
>
> $ git grep -E -o 'foo.*?ba' .clang-format
> .clang-format:foo, bar, ba
>
> So it is not treated literally (as it would be without -E). But nor does
> it make the match non-greedy (otherwise it would have output "foo, ba",
> as "git grep -P" does).
>
> So it does seem like all bets are off for what people can and should
> expect here. Which isn't to say we should make things worse. I mostly
> wondered if REG_ENHANCED might take us closer to what glibc was doing by
> default, but it doesn't seem like it.
There's a couple of ways out of this that I don't see in this thread:
- Declare it not a problem: We have -G, -E and -P to map to BRE, ERE and
PCRE. One view is to say the first two must match POSIX, another is
tha whatever the platform thinks they should do is how they should
act.
Of course that makes git regex invocations "unportable", but it might
be acceptable. People can always use PCRE if they want "portability".
- Just mandate PCRE for Mac OS, then map -E to -P. We could do this with
the pcre2convert() API and PCRE2_CONVERT_POSIX_EXTENDED flag,
i.e. PCRE's own "translate this to ERE".
But Perl/PCRE syntax is already a superset of ERE syntax, minus things
like (*VERB), (?: etc., which people are unlikely to write without
intending to get the PCRE semantics.
next prev parent reply other threads:[~2023-01-13 8:34 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-03 9:53 BUG: git grep behave oddly with alternatives Marco Nenciarini
2023-01-03 16:29 ` René Scharfe
2023-01-03 18:13 ` Marco Nenciarini
2023-01-03 20:52 ` René Scharfe
2023-01-04 6:13 ` Junio C Hamano
2023-01-04 7:46 ` Jeff King
2023-01-04 16:36 ` René Scharfe
2023-01-06 9:09 ` Jeff King
2023-01-08 0:42 ` René Scharfe
2023-01-08 1:27 ` Junio C Hamano
2023-01-11 18:56 ` Jeff King
2023-01-12 17:13 ` René Scharfe
2023-01-12 17:52 ` Ævar Arnfjörð Bjarmason
2023-01-12 21:54 ` Jeff King
2023-01-13 8:28 ` Ævar Arnfjörð Bjarmason [this message]
2023-01-13 17:19 ` Junio C Hamano
2023-01-14 6:44 ` René Scharfe
2023-01-14 8:31 ` René Scharfe
2023-01-14 12:45 ` Diomidis Spinellis
2023-01-14 16:08 ` Junio C Hamano
2023-01-13 17:24 ` René Scharfe
2023-01-13 23:03 ` René Scharfe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=230113.86ilhazved.gmgdl@evledraar.gmail.com \
--to=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=l.s.r@web.de \
--cc=marco.nenciarini@enterprisedb.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.