t: refactor environment sanitization to not use Perl

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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
main
Patrick Steinhardt 2025-04-03 07:05:53 +02:00 committed by Junio C Hamano
parent 8afecde527
commit 7792d326f1
1 changed files with 14 additions and 18 deletions

View File

@ -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' \
-e 's/^\(GIT_[^=]*\)=.*/\1/p'
)
unset XDG_CACHE_HOME
unset XDG_CONFIG_HOME
unset GITPERLLIB