Avoid creating testtablespace directories where not wanted.
authorTom Lane
Wed, 19 May 2021 18:04:01 +0000 (14:04 -0400)
committerTom Lane
Wed, 19 May 2021 18:04:01 +0000 (14:04 -0400)
Recently we refactored things so that pg_regress makes the
"testtablespace" subdirectory used by the core regression tests,
instead of doing that in the makefiles.  That had the undesirable
side effect of making such a subdirectory in every directory that
has "input" or "output" test files.  Since these subdirectories
remain empty, git doesn't complain about them, but nonetheless
they're clutter.

To fix, invent an explicit --make-testtablespace-dir switch,
so that pg_regress only makes the subdirectory when explicitly
told to.

Discussion: https://postgr.es/m/2854388.1621284789@sss.pgh.pa.us

src/test/regress/GNUmakefile
src/test/regress/pg_regress.c
src/tools/msvc/vcregress.pl

index 5dc4bbcb001ee17de7795e9cf42190ddc05789c0..fe6e0c98aa2e03b6b6adebdc257176467ff9c963 100644 (file)
@@ -119,7 +119,8 @@ submake-contrib-spi: | submake-libpgport submake-generated-headers
 ## Run tests
 ##
 
-REGRESS_OPTS = --dlpath=. --max-concurrent-tests=20 $(EXTRA_REGRESS_OPTS)
+REGRESS_OPTS = --dlpath=. --max-concurrent-tests=20 --make-testtablespace-dir \
+   $(EXTRA_REGRESS_OPTS)
 
 check: all
    $(pg_regress_check) $(REGRESS_OPTS) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) $(EXTRA_TESTS)
index b7d80bd9bb3d212304a746d34cc1211a14015265..e04d365258d9e85cec2e7cd4d87c98898809fdac 100644 (file)
@@ -504,25 +504,9 @@ convert_sourcefiles_in(const char *source_subdir, const char *dest_dir, const ch
    if (!directory_exists(outdir_sub))
        make_directory(outdir_sub);
 
+   /* We might need to replace @testtablespace@ */
    snprintf(testtablespace, MAXPGPATH, "%s/testtablespace", outputdir);
 
-   /*
-    * Clean out the test tablespace dir, or create it if it doesn't exist. On
-    * Windows, doing this cleanup here makes possible to run the regression
-    * tests as a Windows administrative user account with the restricted
-    * token obtained when starting pg_regress.
-    */
-   if (directory_exists(testtablespace))
-   {
-       if (!rmtree(testtablespace, true))
-       {
-           fprintf(stderr, _("\n%s: could not remove test tablespace \"%s\"\n"),
-                   progname, testtablespace);
-           exit(2);
-       }
-   }
-   make_directory(testtablespace);
-
    /* finally loop on each file and do the replacement */
    for (name = names; *name; name++)
    {
@@ -601,6 +585,32 @@ convert_sourcefiles(void)
    convert_sourcefiles_in("output", outputdir, "expected", "out");
 }
 
+/*
+ * Clean out the test tablespace dir, or create it if it doesn't exist.
+ *
+ * On Windows, doing this cleanup here makes it possible to run the
+ * regression tests under a Windows administrative user account with the
+ * restricted token obtained when starting pg_regress.
+ */
+static void
+prepare_testtablespace_dir(void)
+{
+   char        testtablespace[MAXPGPATH];
+
+   snprintf(testtablespace, MAXPGPATH, "%s/testtablespace", outputdir);
+
+   if (directory_exists(testtablespace))
+   {
+       if (!rmtree(testtablespace, true))
+       {
+           fprintf(stderr, _("\n%s: could not remove test tablespace \"%s\"\n"),
+                   progname, testtablespace);
+           exit(2);
+       }
+   }
+   make_directory(testtablespace);
+}
+
 /*
  * Scan resultmap file to find which platform-specific expected files to use.
  *
@@ -2058,6 +2068,7 @@ help(void)
    printf(_("      --launcher=CMD            use CMD as launcher of psql\n"));
    printf(_("      --load-extension=EXT      load the named extension before running the\n"));
    printf(_("                                tests; can appear multiple times\n"));
+   printf(_("      --make-testtablespace-dir create testtablespace directory\n"));
    printf(_("      --max-connections=N       maximum number of concurrent connections\n"));
    printf(_("                                (default is 0, meaning unlimited)\n"));
    printf(_("      --max-concurrent-tests=N  maximum number of concurrent tests in schedule\n"));
@@ -2116,10 +2127,12 @@ regression_main(int argc, char *argv[],
        {"load-extension", required_argument, NULL, 22},
        {"config-auth", required_argument, NULL, 24},
        {"max-concurrent-tests", required_argument, NULL, 25},
+       {"make-testtablespace-dir", no_argument, NULL, 26},
        {NULL, 0, NULL, 0}
    };
 
    bool        use_unix_sockets;
+   bool        make_testtablespace_dir = false;
    _stringlist *sl;
    int         c;
    int         i;
@@ -2245,6 +2258,9 @@ regression_main(int argc, char *argv[],
            case 25:
                max_concurrent_tests = atoi(optarg);
                break;
+           case 26:
+               make_testtablespace_dir = true;
+               break;
            default:
                /* getopt_long already emitted a complaint */
                fprintf(stderr, _("\nTry \"%s -h\" for more information.\n"),
@@ -2297,6 +2313,9 @@ regression_main(int argc, char *argv[],
    unlimit_core_size();
 #endif
 
+   if (make_testtablespace_dir)
+       prepare_testtablespace_dir();
+
    if (temp_instance)
    {
        FILE       *pg_conf;
index 1852c341091efe3fd0c8199e08d48a5538680203..35e8f67f013902a1e232a5c0959b583af605e7b1 100644 (file)
@@ -118,6 +118,7 @@ sub installcheck_internal
        "--bindir=../../../$Config/psql",
        "--schedule=${schedule}_schedule",
        "--max-concurrent-tests=20",
+       "--make-testtablespace-dir",
        "--encoding=SQL_ASCII",
        "--no-locale");
    push(@args, $maxconn) if $maxconn;
@@ -152,6 +153,7 @@ sub check
        "--bindir=",
        "--schedule=${schedule}_schedule",
        "--max-concurrent-tests=20",
+       "--make-testtablespace-dir",
        "--encoding=SQL_ASCII",
        "--no-locale",
        "--temp-instance=./tmp_check");