From: Andrew Dunstan Date: Mon, 19 Mar 2018 21:55:36 +0000 (+1030) Subject: Don't use an Msys virtual path to create a tablespace X-Git-Tag: REL_11_BETA1~563 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9ad21a6957ff2d8743e9a59ba062d3c009b24ec4;p=postgresql Don't use an Msys virtual path to create a tablespace 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. --- diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm index 7d017d49bd..b6862688d4 100644 --- a/src/test/perl/TestLib.pm +++ b/src/test/perl/TestLib.pm @@ -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"); diff --git a/src/test/recovery/t/014_unlogged_reinit.pl b/src/test/recovery/t/014_unlogged_reinit.pl index 5d07a663a0..446144a783 100644 --- a/src/test/recovery/t/014_unlogged_reinit.pl +++ b/src/test/recovery/t/014_unlogged_reinit.pl @@ -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');