Re: [PATCH 02/20] t: refactor environment sanitization to not use Perl
- From
Karthik Nayak <karthik.188@gmail.com>
- Date
- Mar 21, 2025, 09:52 UTC
- Message-ID
- <CAOLa=ZR3V9e33oU5ard+eZLCUQgMybGwcj9PLMr7hy+4wNgM_Q@mail.gmail.com>
- In-Reply-To
- <20250320-b4-pks-t-perlless-v1-2-b1eefe27ac55@pks.im>
Patrick Steinhardt <ps@pks.im> writes:
Show 57 quoted lines
> Before executing tests we first sanitize the environment. Part of the
> sanitization is to unset a couple of environment variables that we know
> will change the behaviour of Git. This is done with a small Perl script,
> which has the consequence that having a Perl interpreter available is a
> strict requirement for running our unit tests.
>
> The logic itself isn't particularly involved: we simply unset every
> environment variable whose key starts with 'GIT_', but then explicitly
> allow a subset of these.
>
> Refactor the logic to instead use sed(1) so that it becomes possible to
> execute our tests without Perl.
>
> Based-on-patch-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
> t/test-lib.sh | 32 ++++++++++++++------------------
> 1 file changed, 14 insertions(+), 18 deletions(-)
>
> diff --git a/t/test-lib.sh b/t/test-lib.sh
> index 1ce3b32fcac..a62699d6c79 100644
> --- a/t/test-lib.sh
> +++ b/t/test-lib.sh
> @@ -499,24 +499,20 @@ EDITOR=:
> # /usr/xpg4/bin/sh and /bin/ksh to bail out. So keep the unsets
> # deriving from the command substitution clustered with the other
> # ones.
> -unset VISUAL EMAIL LANGUAGE $("$PERL_PATH" -e '
> - my @env = keys %ENV;
> - my $ok = join("|", qw(
> - TRACE
> - DEBUG
> - TEST
> - .*_TEST
> - PROVE
> - VALGRIND
> - UNZIP
> - PERF_
> - CURL_VERBOSE
> - TRACE_CURL
> - BUILD_DIR
> - ));
> - my @vars = grep(/^GIT_/ && !/^GIT_($ok)/o, @env);
> - print join("\n", @vars);
> -')
> +unset VISUAL EMAIL LANGUAGE $(env | sed -n \
> + -e '/^GIT_TRACE/d' \
> + -e '/^GIT_DEBUG/d' \
> + -e '/^GIT_TEST/d' \
> + -e '/^GIT_.*_TEST/d' \
> + -e '/^GIT_PROVE/d' \
> + -e '/^GIT_VALGRIND/d' \
> + -e '/^GIT_UNZIP/d' \
> + -e '/^GIT_PERF_/d' \
> + -e '/^GIT_CURL_VERBOSE/d' \
> + -e '/^GIT_TRACE_CURL/d' \
> + -e '/^GIT_BUILD_DIR/d' \So we delete all of the following from the stream of env.
> + -e 's/^\(GIT_[^=]*\)=.*/\1/p'
But any other `GIT_*` env variable is printed to be `unset`. Ok makes sense. This is much more readable than the perl version!
Show 7 quoted lines
> +) > unset XDG_CACHE_HOME > unset XDG_CONFIG_HOME > unset GITPERLLIB > > -- > 2.49.0.472.ge94155a9ec.dirty