]> granicus.if.org Git - postgresql/commitdiff
Don't use an Msys virtual path to create a tablespace
authorAndrew Dunstan <andrew@dunslane.net>
Mon, 19 Mar 2018 21:55:36 +0000 (08:25 +1030)
committerAndrew Dunstan <andrew@dunslane.net>
Mon, 19 Mar 2018 21:55:36 +0000 (08:25 +1030)
The new unlogged_reinit recovery tests create a new tablespace using
TestLib.pm's tempdir. However, on msys that function returns a virtual
path that isn't understood by Postgres. Here we add a new function to
TestLib.pm to turn such a path into a real path on the underlying file
system, and use it in the new test to create the tablespace. The new
function is essentially a NOOP everywhere but msys.

src/test/perl/TestLib.pm
src/test/recovery/t/014_unlogged_reinit.pl

index 7d017d49bd01b221fd5918de08339460d4fdfe28..b6862688d4fd44f19d82eb1e522cb826273271e9 100644 (file)
@@ -11,6 +11,7 @@ use strict;
 use warnings;
 
 use Config;
+use Cwd;
 use Exporter 'import';
 use File::Basename;
 use File::Spec;
@@ -158,6 +159,23 @@ sub tempdir_short
        return File::Temp::tempdir(CLEANUP => 1);
 }
 
+# Return the real directory for a virtual path directory under msys.
+# The directory  must exist. If it's not an existing directory or we're
+# not under msys, return the input argument unchanged.
+sub real_dir
+{
+    my $dir = "$_[0]";
+    return $dir unless -d $dir;
+    return $dir unless $Config{osname} eq 'msys';
+    my $here = cwd;
+    chdir $dir;
+       # this odd way of calling 'pwd -W' is the only way that seems to work.
+    $dir = qx{sh -c "pwd -W"};
+    chomp $dir;
+    chdir $here;
+    return $dir;
+}
+
 sub system_log
 {
        print("# Running: " . join(" ", @_) . "\n");
index 5d07a663a02d636fa17b58410cc9b03cc50d4895..446144a78364ea0d316850c720621b3c1097d617 100644 (file)
@@ -30,8 +30,10 @@ ok(-f "$pgdata/$baseUnloggedPath",        'main fork in base exists');
 
 my $tablespaceDir = TestLib::tempdir;
 
+my $realTSDir = TestLib::real_dir($tablespaceDir);
+
 $node->safe_psql('postgres',
-       "CREATE TABLESPACE ts1 LOCATION '$tablespaceDir'");
+       "CREATE TABLESPACE ts1 LOCATION '$realTSDir'");
 $node->safe_psql('postgres',
        'CREATE UNLOGGED TABLE ts1_unlogged (id int) TABLESPACE ts1');