Re: pgsql: Move tablespace path re-creation from the makefiles to pg_regres

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: pgsql: Move tablespace path re-creation from the makefiles to pg_regres
Дата
Msg-id 2917892.1621288314@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: pgsql: Move tablespace path re-creation from the makefiles to pg_regres  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: pgsql: Move tablespace path re-creation from the makefiles to pg_regres
Список pgsql-committers
I wrote:
> I think what we want to do is have this code invoked only in
> test directories that explicitly ask for it, say with a new
> "--make-testtablespace" switch for pg_regress.

Say, as attached.  (Windows part is untested.)

            regards, tom lane

diff --git a/src/test/regress/GNUmakefile b/src/test/regress/GNUmakefile
index 5dc4bbcb00..fe6e0c98aa 100644
--- a/src/test/regress/GNUmakefile
+++ b/src/test/regress/GNUmakefile
@@ -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)
diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c
index b7d80bd9bb..5918e8b412 100644
--- a/src/test/regress/pg_regress.c
+++ b/src/test/regress/pg_regress.c
@@ -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.
  *
@@ -2062,6 +2072,7 @@ help(void)
     printf(_("                                (default is 0, meaning unlimited)\n"));
     printf(_("      --max-concurrent-tests=N  maximum number of concurrent tests in schedule\n"));
     printf(_("                                (default is 0, meaning unlimited)\n"));
+    printf(_("      --make-testtablespace-dir create testtablespace directory\n"));
     printf(_("      --outputdir=DIR           place output files in DIR (default \".\")\n"));
     printf(_("      --schedule=FILE           use test ordering schedule from FILE\n"));
     printf(_("                                (can be used multiple times to concatenate)\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;
diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl
index 1852c34109..35e8f67f01 100644
--- a/src/tools/msvc/vcregress.pl
+++ b/src/tools/msvc/vcregress.pl
@@ -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");

В списке pgsql-committers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: pgsql: Move tablespace path re-creation from the makefiles to pg_regres
Следующее
От: David Rowley
Дата:
Сообщение: pgsql: Fix typo and outdated information in README.barrier