* git grep -F (fixed string) requires matching parenthesis?
@ 2019-08-13 6:01 nanaya
2019-08-13 12:17 ` Jeff King
0 siblings, 1 reply; 3+ messages in thread
From: nanaya @ 2019-08-13 6:01 UTC (permalink / raw)
To: git
Hi,
I observed this today:
$ git grep -F '('
fatal: unmatched parenthesis
Which doesn't make sense and I believe shouldn't happen.
$ git --version
git version 2.22.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: git grep -F (fixed string) requires matching parenthesis?
2019-08-13 6:01 git grep -F (fixed string) requires matching parenthesis? nanaya
@ 2019-08-13 12:17 ` Jeff King
2019-08-13 12:33 ` nanaya
0 siblings, 1 reply; 3+ messages in thread
From: Jeff King @ 2019-08-13 12:17 UTC (permalink / raw)
To: nanaya; +Cc: git
On Tue, Aug 13, 2019 at 03:01:04PM +0900, nanaya wrote:
> I observed this today:
>
> $ git grep -F '('
> fatal: unmatched parenthesis
>
> Which doesn't make sense and I believe shouldn't happen.
At first glance this looks like we're feeding a fixed-string pattern to
the regex compiler, which would indeed be a bug.
But I think it's actually happening at a level above that. git-grep
supports multiple patterns, which can be joined with --and, --or, --not,
etc. And they can be grouped with parentheses.
What you're seeing is the argument parser thinking your '(' is part of
the construction of a boolean match formula, and complaining about the
lack of closing ')'. You can use "-e" to make it clear that it's a
pattern (just as you'd need to for a pattern that starts with "-"):
git grep -F -e '('
So I think everything is working as designed, though I admit the
implication was slightly surprising to me (and note that it only happens
with that _specific_ pattern; something like "(foo" would not be matched
by the option parser).
-Peff
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: git grep -F (fixed string) requires matching parenthesis?
2019-08-13 12:17 ` Jeff King
@ 2019-08-13 12:33 ` nanaya
0 siblings, 0 replies; 3+ messages in thread
From: nanaya @ 2019-08-13 12:33 UTC (permalink / raw)
To: Jeff King; +Cc: git
On Tue, Aug 13, 2019, at 21:17, Jeff King wrote:
> But I think it's actually happening at a level above that. git-grep
> supports multiple patterns, which can be joined with --and, --or, --not,
> etc. And they can be grouped with parentheses.
>
> What you're seeing is the argument parser thinking your '(' is part of
> the construction of a boolean match formula, and complaining about the
> lack of closing ')'. You can use "-e" to make it clear that it's a
> pattern (just as you'd need to for a pattern that starts with "-"):
>
> git grep -F -e '('
>
> So I think everything is working as designed, though I admit the
> implication was slightly surprising to me (and note that it only happens
> with that _specific_ pattern; something like "(foo" would not be matched
> by the option parser).
>
Thanks. That was confusing (and the error message didn't help). I've always assumed the grep is similar to posix grep so it was weird the same syntax work for fgrep but not git-grep -F.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2019-08-13 12:33 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-13 6:01 git grep -F (fixed string) requires matching parenthesis? nanaya
2019-08-13 12:17 ` Jeff King
2019-08-13 12:33 ` nanaya
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).