From: Junio C Hamano <gitster@pobox.com>
To: "René Scharfe" <l.s.r@web.de>
Cc: Mario Grgic <mario_grgic@hotmail.com>,
demerphq <demerphq@gmail.com>,
git@vger.kernel.org
Subject: Re: git bug: Perl compatible regular expressions do not work as expected
Date: Mon, 27 Mar 2023 14:33:06 -0700 [thread overview]
Message-ID: <xmqqjzz1nalp.fsf@gitster.g> (raw)
In-Reply-To: <03fd7ddb-8241-1a0a-3e82-d8083e4ce0f7@web.de> ("René Scharfe"'s message of "Mon, 27 Mar 2023 19:23:35 +0200")
René Scharfe <l.s.r@web.de> writes:
> 54463d32ef only affects basic regular expressions (BRE), but -G and -S
> use extended ones (ERE). macOS allows both to be "enhanced".
>
> I have a hard time finding a readable reference to the documentation to
> brings us all onto the same page regarding what REG_ENHANCED actually
> does. [1] is in raw troff format, [2] isn't very pretty and shows ads.
Wow, [2] is also misleading in that it loses the distinction between
'+' and '\+'; in [1] at least you can see the differences between \&+
and \e+ ;-)
> Anyway, the rather lengthy section "ENHANCED FEATURES" explains it.
I suspect that 54463d32ef was done in a conservative way to avoid
unintended side effects to make ERE "enhanced". I am not 100%
certain, but after reading the documentation you pointed at, I do
not see a valid expression without ENHANCED flag starting to mean
totally different thing with it (well, an extra '?' turning a
pattern from greedy to minimal may count as such a change in
semantics, but I do not see anybody sensible adding an extra '?'
in a pattern in the first place).
Perhaps it is safe to go ahead and loosen what 54463d32ef did, with
something like this (this is not even compile tested, of course)?
Makefile | 9 +++++++++
compat/regcomp_enhanced.c | 2 ++
git-compat-util.h | 2 +-
3 files changed, 12 insertions(+), 1 deletion(-)
diff --git c/Makefile w/Makefile
index 50ee51fde3..1fe0eb399e 100644
--- c/Makefile
+++ w/Makefile
@@ -293,6 +293,10 @@ include shared.mak
# the flag REG_ENHANCED and you'd like to use it to enable enhanced basic
# regular expressions.
#
+# Define USE_ENHANCED_REGULAR_EXPRESSIONS if your C library provides
+# the flag REG_ENHANCED and you'd like to use it to enable enhanced
+# regular expressions for both BRE and ERE.
+#
# Define HAVE_DEV_TTY if your system can open /dev/tty to interact with the
# user.
#
@@ -2041,11 +2045,16 @@ ifdef NO_REGEX
COMPAT_CFLAGS += -Icompat/regex
COMPAT_OBJS += compat/regex/regex.o
else
+ifdef USE_ENHANCED_REGULAR_EXPRESSIONS
+ COMPAT_CFLAGS += -DUSE_ENHANCED_REGULAR_EXPRESSIONS
+ COMPAT_OBJS += compat/regcomp_enhanced.o
+else
ifdef USE_ENHANCED_BASIC_REGULAR_EXPRESSIONS
COMPAT_CFLAGS += -DUSE_ENHANCED_BASIC_REGULAR_EXPRESSIONS
COMPAT_OBJS += compat/regcomp_enhanced.o
endif
endif
+endif
ifdef NATIVE_CRLF
BASIC_CFLAGS += -DNATIVE_CRLF
endif
diff --git c/compat/regcomp_enhanced.c w/compat/regcomp_enhanced.c
index 84193ce53b..aadbbac6d3 100644
--- c/compat/regcomp_enhanced.c
+++ w/compat/regcomp_enhanced.c
@@ -3,7 +3,9 @@
int git_regcomp(regex_t *preg, const char *pattern, int cflags)
{
+#ifndef USE_ENHANCED_REGULAR_EXPRESSIONS
if (!(cflags & REG_EXTENDED))
+#endif
cflags |= REG_ENHANCED;
return regcomp(preg, pattern, cflags);
}
diff --git c/git-compat-util.h w/git-compat-util.h
index 1e6592624d..95d9b75a15 100644
--- c/git-compat-util.h
+++ w/git-compat-util.h
@@ -1377,7 +1377,7 @@ static inline int regexec_buf(const regex_t *preg, const char *buf, size_t size,
return regexec(preg, buf, nmatch, pmatch, eflags | REG_STARTEND);
}
-#ifdef USE_ENHANCED_BASIC_REGULAR_EXPRESSIONS
+#if defined(USE_ENHANCED_BASIC_REGULAR_EXPRESSIONS) || defined(USE_ENHANCED_REGULAR_EXPRESSIONS)
int git_regcomp(regex_t *preg, const char *pattern, int cflags);
#define regcomp git_regcomp
#endif
next prev parent reply other threads:[~2023-03-27 21:33 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-25 12:31 git bug: Perl compatible regular expressions do not work as expected Mario Grgic
2023-03-25 12:42 ` Kristoffer Haugsbakk
2023-03-25 12:59 ` Mario Grgic
2023-03-25 13:04 ` demerphq
2023-03-25 13:09 ` Mario Grgic
2023-03-25 13:24 ` demerphq
2023-03-25 18:09 ` René Scharfe
2023-03-27 16:29 ` Junio C Hamano
2023-03-27 17:23 ` René Scharfe
2023-03-27 21:33 ` Junio C Hamano [this message]
2023-03-28 13:47 ` Junio C Hamano
2023-03-28 17:56 ` René Scharfe
2023-03-25 14:16 ` Mario Grgic
2023-03-25 15:39 ` Mario Grgic
2023-03-27 16:30 ` Junio C Hamano
2023-03-27 17:22 ` Mario Grgic
2023-03-27 21:11 ` Junio C Hamano
2023-03-28 0:03 ` Mario Grgic
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=xmqqjzz1nalp.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=demerphq@gmail.com \
--cc=git@vger.kernel.org \
--cc=l.s.r@web.de \
--cc=mario_grgic@hotmail.com \
/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.