test-lib: bring $remove_trash out of retirement

There's no point in creating a repository or directory only to decide right afterwards that we're skipping all the tests. We can save ourselves the redundant "git init" or "mkdir" and "rm -rf" in this case. We carry around the "$remove_trash" variable because if the directory is unexpectedly gone at test_done time we'll still want to hit the "trash directory already removed" error, but not if we never created the trash directory. See df4c0d1a792 (test-lib: abort when can't remove trash directory, 2017-04-20) for the addition of that error. So let's partially revert 06478dab4c (test-lib: retire $remove_trash variable, 2017-04-23) and move the decision about whether to skip all tests earlier. Let's also fix a bug that was with us since abc5d372ec (Enable parallel tests, 2008-08-08): we would leak $remove_trash from the environment. We don't want this to error out, so let's reset it to the empty string first: remove_trash=t GIT_SKIP_TESTS=t0001 ./t0001-init.sh I tested this with --debug, see 4d0912a206 (test-lib.sh: do not barf under --debug at the end of the test, 2017-04-24) for a bug we don't want to re-introduce. While I'm at it, let's move the HOME assignment to just before test_create_repo, it could be lower, but it seems better to set it before calling anything in test-lib-functions.sh Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Ævar Arnfjörð Bjarmason committed May 10, 2021 at 16:19 UTC edc23840b0baad017d02037f0a833eaa600ee21d
1 file changed +18 -14
t/test-lib.sh
+18 -14
@@ -1167,7 +1167,7 @@ test_done () {
1167 esac
1168 fi
1169
1170 - if test -z "$debug"
1170 + if test -z "$debug" && test -n "$remove_trash"
1171 then
1172 test -d "$TRASH_DIRECTORY" ||
1173 error "Tests passed but trash directory already removed before test cleanup; aborting"
@@ -1332,6 +1332,22 @@ then
1332 exit 1
1333 fi
1334
1335 +# Are we running this test at all?
1336 +remove_trash=
1337 +this_test=${0##*/}
1338 +this_test=${this_test%%-*}
1339 +if match_pattern_list "$this_test" $GIT_SKIP_TESTS
1340 +then
1341 + say_color info >&3 "skipping test $this_test altogether"
1342 + skip_all="skip all tests in $this_test"
1343 + test_done
1344 +fi
1345 +
1346 +# Last-minute variable setup
1347 +HOME="$TRASH_DIRECTORY"
1348 +GNUPGHOME="$HOME/gnupg-home-not-used"
1349 +export HOME GNUPGHOME
1350 +
1351 # Test repository
1352 rm -fr "$TRASH_DIRECTORY" || {
1353 GIT_EXIT_OK=t
@@ -1339,10 +1355,7 @@ rm -fr "$TRASH_DIRECTORY" || {
1355 exit 1
1356 }
1357
1342 -HOME="$TRASH_DIRECTORY"
1343 -GNUPGHOME="$HOME/gnupg-home-not-used"
1344 -export HOME GNUPGHOME
1345 -
1358 +remove_trash=t
1359 if test -z "$TEST_NO_CREATE_REPO"
1360 then
1361 test_create_repo "$TRASH_DIRECTORY"
@@ -1354,15 +1367,6 @@ fi
1367 # in subprocesses like git equals our $PWD (for pathname comparisons).
1368 cd -P "$TRASH_DIRECTORY" || exit 1
1369
1357 -this_test=${0##*/}
1358 -this_test=${this_test%%-*}
1359 -if match_pattern_list "$this_test" $GIT_SKIP_TESTS
1360 -then
1361 - say_color info >&3 "skipping test $this_test altogether"
1362 - skip_all="skip all tests in $this_test"
1363 - test_done
1364 -fi
1365 -
1370 if test -n "$write_junit_xml"
1371 then
1372 junit_xml_dir="$TEST_OUTPUT_DIRECTORY/out"