Make PG_TEST_NOCLEAN work for temporary directories in TAP tests
authorMichael Paquier <michael@paquier.xyz>
Mon, 3 Jul 2023 01:06:04 +0000 (10:06 +0900)
committerMichael Paquier <michael@paquier.xyz>
Mon, 3 Jul 2023 01:06:04 +0000 (10:06 +0900)
When set, this environment variable was only effective for data
directories but not for all the other temporary files created by
PostgreSQL::Test::Utils.  Keeping the temporary files after a successful
run can be useful for debugging purposes.

The documentation is updated to reflect the new behavior, with contents
available in doc/ since v16 and in src/test/perl/README since v15.

Author: Jacob Champion
Reviewed-by: Daniel Gustafsson
Discussion: https://postgr.es/m/CAAWbhmgHtDH1SGZ+Fw05CsXtE0mzTmjbuUxLB9mY9iPKgM6cUw@mail.gmail.com
Discussion: https://postgr.es/m/YyPd9unV14SX2bLF@paquier.xyz
Backpatch-through: 11

doc/src/sgml/regress.sgml
src/test/perl/PostgreSQL/Test/Utils.pm
src/test/perl/README

index 88a43b8961b5ec3dd8badc2c872621299cf046f4..675db86e4d79e8c1a969d099cc04ec9e5ccee1d5 100644 (file)
@@ -818,6 +818,8 @@ make check PROVE_TESTS='t/001_test1.pl t/003_test3.pl'
 <programlisting>
 PG_TEST_NOCLEAN=1 make -C src/bin/pg_dump check
 </programlisting>
+    This environment variable also prevents the test's temporary directories
+    from being removed.
    </para>
 
    <para>
index a27fac83d2616144eadd93008681a494b40255af..220cab303c7321ac7009c2612ae9730c1af328cb 100644 (file)
@@ -272,7 +272,7 @@ sub all_tests_passing
 
 Securely create a temporary directory inside C<$tmp_check>, like C<mkdtemp>,
 and return its name.  The directory will be removed automatically at the
-end of the tests.
+end of the tests, unless the environment variable PG_TEST_NOCLEAN is provided.
 
 If C<prefix> is given, the new directory is templated as C<${prefix}_XXXX>.
 Otherwise the template is C<tmp_test_XXXX>.
@@ -286,7 +286,7 @@ sub tempdir
    return File::Temp::tempdir(
        $prefix . '_XXXX',
        DIR => $tmp_check,
-       CLEANUP => 1);
+       CLEANUP => not defined $ENV{'PG_TEST_NOCLEAN'});
 }
 
 =pod
@@ -301,7 +301,8 @@ name, to avoid path length issues.
 sub tempdir_short
 {
 
-   return File::Temp::tempdir(CLEANUP => 1);
+   return File::Temp::tempdir(
+       CLEANUP => not defined $ENV{'PG_TEST_NOCLEAN'});
 }
 
 =pod
index 6ddee42a1053cb5ca0c2f278864a422714f70e01..8fb44184b91560630cf7bd7700bc8660e894bbff 100644 (file)
@@ -31,8 +31,9 @@ some lesser number of seconds.
 
 Data directories will also be left behind for analysis when a test fails;
 they are named according to the test filename.  But if the environment
-variable PG_TEST_NOCLEAN is set, data directories will be retained
-regardless of test status.
+variable PG_TEST_NOCLEAN is set, the data directories will be retained
+regardless of test status.  This environment variable also prevents the
+test's temporary directories from being removed.
 
 
 Writing tests