From: Junio C Hamano <gitster@pobox.com>
To: Jacob Abel <jacobabel@nullpo.dev>
Cc: git@vger.kernel.org, Phillip Wood <phillip.wood123@gmail.com>
Subject: Re: [PATCH v3 3/3] t2400: rewrite regex to avoid unintentional PCRE
Date: Fri, 21 Jul 2023 08:16:11 -0700 [thread overview]
Message-ID: <xmqqv8edwb0k.fsf@gitster.g> (raw)
In-Reply-To: <20230721044012.24360-4-jacobabel@nullpo.dev> (Jacob Abel's message of "Fri, 21 Jul 2023 04:40:56 +0000")
Jacob Abel <jacobabel@nullpo.dev> writes:
> Replace all cases of `\s` with ` ` as it is not part of POSIX BRE or ERE
> and therefore not all versions of grep handle it without PCRE support.
Good point. But the patch replaces them with "[ ]" instead, which
probably is not a good idea for readability.
Technically speaking, there is no regular expression library that
supports PCRE per-se; treating \S, \s, \d and the like the same way
as PCRE is a GNU extension in the glibc land, and a simlar "enhanced
mode" can be requested by passing REG_ENHANCED bit to regcomp(3) at
runtime in the BSD land including macOS. I would suggest just
dropping "without PCRE support" for brevity, as "not all versions of
grep handle it" is sufficient here.
> For the same reason all cases of `\S` are replaced with `[^ ]`.
> It's not an exact replacement but it is close enough for this
> use case.
Good.
> Signed-off-by: Jacob Abel <jacobabel@nullpo.dev>
> ---
> t/t2400-worktree-add.sh | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/t/t2400-worktree-add.sh b/t/t2400-worktree-add.sh
> index e106540c6d..eafecdf7ce 100755
> --- a/t/t2400-worktree-add.sh
> +++ b/t/t2400-worktree-add.sh
> @@ -417,9 +417,9 @@ test_wt_add_orphan_hint () {
> grep "hint: If you meant to create a worktree containing a new orphan branch" actual &&
> if [ $use_branch -eq 1 ]
> then
> - grep -E "^hint:\s+git worktree add --orphan -b \S+ \S+\s*$" actual
> + grep -E "^hint:[ ]+git worktree add --orphan -b [^ ]+ [^ ]+$" actual
> else
> - grep -E "^hint:\s+git worktree add --orphan \S+\s*$" actual
> + grep -E "^hint:[ ]+git worktree add --orphan [^ ]+$" actual
> fi
Just a single space would be fine without [bracket]. I think older
tests use (literally) HT and SP inside [], many of them may still
survive.
> @@ -709,7 +709,7 @@ test_dwim_orphan () {
> local info_text="No possible source branch, inferring '--orphan'" &&
> local fetch_error_text="fatal: No local or remote refs exist despite at least one remote" &&
> local orphan_hint="hint: If you meant to create a worktree containing a new orphan branch" &&
> - local invalid_ref_regex="^fatal: invalid reference:\s\+.*" &&
> + local invalid_ref_regex="^fatal: invalid reference: .*" &&
Feeding "<something>\+" to BRE (this pattern is later used with
'grep' but not with 'egrep' or 'grep -E') and expecting it to mean 1
or more is a GNU extension, and in this case "there must be a SP
after colon" is much easier to see, which is what the updated one
uses. Good.
By the way, you can drop the ".*" at the end of the pattern, because
the match is not anchored at the tail end.
> local bad_combo_regex="^fatal: '[a-z-]\+' and '[a-z-]\+' cannot be used together" &&
This should also be corrected, I think.
"fatal: '[a-z-]\{1,\}' and '[a-z-]\{1,\}' cannot be used together"
or even simpler,
"fatal: '[a-z-]*' and '[a-z-]*' cannot be used together"
to avoid \+ in BRE (see above). "[-a-z]" (to show '-' at the
beginning) may make it easier to read by letting the hyphen-minus
stand out more, as we know we are giving two command line option
names and in a command line option name, the first letter is always
hyphen-minus. But that is more of personal taste, not correctness.
> @@ -998,8 +998,8 @@ test_dwim_orphan () {
> headpath=$(git $dashc_args rev-parse --path-format=absolute --git-path HEAD) &&
> headcontents=$(cat "$headpath") &&
> grep "HEAD points to an invalid (or orphaned) reference" actual &&
> - grep "HEAD path:\s*.$headpath." actual &&
> - grep "HEAD contents:\s*.$headcontents." actual &&
> + grep "HEAD path: .$headpath." actual &&
> + grep "HEAD contents: .$headcontents." actual &&
> grep "$orphan_hint" actual &&
> ! grep "$info_text" actual
> fi &&
Thanks.
next prev parent reply other threads:[~2023-07-21 15:16 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-15 2:55 [PATCH] t2400: Fix test failures when using grep 2.5 Jacob Abel
2023-07-15 8:59 ` Phillip Wood
2023-07-15 23:15 ` Jacob Abel
2023-07-16 1:08 ` Junio C Hamano
2023-07-16 2:55 ` Jacob Abel
2023-07-16 15:34 ` Phillip Wood
2023-07-17 2:38 ` Junio C Hamano
2023-07-18 0:44 ` Jacob Abel
2023-07-18 13:36 ` Phillip Wood
2023-07-21 4:35 ` Jacob Abel
2023-07-15 23:36 ` Jacob Abel
2023-07-16 3:38 ` [PATCH v2] " Jacob Abel
2023-07-21 4:40 ` [PATCH v3 0/3] " Jacob Abel
2023-07-21 4:40 ` [PATCH v3 1/3] t2400: drop no-op `--sq` from rev-parse call Jacob Abel
2023-07-21 4:40 ` [PATCH v3 2/3] builtin/worktree.c: convert tab in advice to space Jacob Abel
2023-07-21 4:40 ` [PATCH v3 3/3] t2400: rewrite regex to avoid unintentional PCRE Jacob Abel
2023-07-21 15:16 ` Junio C Hamano [this message]
2023-07-21 15:49 ` Junio C Hamano
2023-07-22 2:36 ` Jacob Abel
2023-07-26 21:42 ` [PATCH v4 0/3] t2400: Fix test failures when using grep 2.5 Jacob Abel
2023-07-26 21:42 ` [PATCH v4 1/3] t2400: drop no-op `--sq` from rev-parse call Jacob Abel
2023-07-26 21:42 ` [PATCH v4 2/3] builtin/worktree.c: convert tab in advice to space Jacob Abel
2023-07-26 21:42 ` [PATCH v4 3/3] t2400: rewrite regex to avoid unintentional PCRE Jacob Abel
2023-07-26 22:09 ` [PATCH v4 0/3] t2400: Fix test failures when using grep 2.5 Junio C Hamano
2023-07-28 13:09 ` Phillip Wood
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=xmqqv8edwb0k.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=jacobabel@nullpo.dev \
--cc=phillip.wood123@gmail.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.