Subject: Re: [PATCH v2 1/3] test-lib: allow selecting tests by substring/regex with --run

From: Jeff King <[email-masked]>
Date: Wed, 14 Oct 2020 14:09:59 -0400

On Wed, Oct 14, 2020 at 10:50:03AM -0700, Elijah Newren wrote:

> > > @@ -819,9 +821,8 @@ match_test_selector_list () {
> > >                       *)
> > >                               if expr "z$selector" : "z[0-9]*[^0-9]" >/dev/null
> > >                               then
> > > -                                     echo "error: $title: invalid non-numeric in test" \
> > > -                                             "selector: '$orig_selector'" >&2
> > > -                                     exit 1
> > > +                                     echo "$title" | grep -q "$selector" && return
> > > +                                     continue
> > >                               fi
> >
> > I like that you allow regexes. It's unfortunate that the skip-check
> > costs us a process in every test. It may not be that big a deal since we
> > only pay it if you use a non-numeric selector. But I wonder if there's
> > any reason not to use "expr" here, as well.
> 
> I originally used [[ $title =~ "$selector" ]] in order to avoid the
> sub-shell...but that was bash-specific.  I briefly looked to see if
> there was a shell portable way to handle regexes, wasn't having much
> luck, and decided that this is only likely to arise when people are
> passing --run and thus only running a single script and they avoid all
> the subprocesses that would have been invoked inside the test, so it's
> still a big net win overall.  Does expr handle regexes, portably?  Or
> are you suggesting dropping the regex handling and limit it to
> substring matching?  In either case, does using expr save us anything
> (isn't expr a shell command)?

There's an expr command doing a regex match in the diff context quoted
above. :)

I was wrong that it would save us a process, though. I thought it was a
builtin in modern shells, but it doesn't appear to be in either dash or
bash. So there's little reason to prefer it over grep here (switching to
globs could be done with case and would save a process).

-Peff