From 186113b049c50a608b575e2597209e9eda99d83c Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Fri, 21 Jun 2019 20:34:23 -0700 Subject: [PATCH] Consolidate methods for translating a Perl path to a Windows path. This fixes some TAP suites when using msys Perl and a builddir located in an msys mount point other than "/". For example, builddir=/c/pg exhibited the problem, since /c/pg falls in mount point "/c". Back-patch to 9.6, where tests first started to perform such translations. In back branches, offer both new and old APIs. Reviewed by Andrew Dunstan. Discussion: https://postgr.es/m/20190610045838.GA238501@rfd.leadboat.com --- src/test/perl/PostgresNode.pm | 7 +++---- src/test/perl/TestLib.pm | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/test/perl/PostgresNode.pm b/src/test/perl/PostgresNode.pm index 3daf396dbe4..ec5985623bc 100644 --- a/src/test/perl/PostgresNode.pm +++ b/src/test/perl/PostgresNode.pm @@ -102,8 +102,7 @@ our @EXPORT = qw( our ($use_tcp, $test_localhost, $test_pghost, $last_host_assigned, $last_port_assigned, @all_nodes); -# Windows path to virtual file system root - +# For backward compatibility only. our $vfs_path = ''; if ($Config{osname} eq 'msys') { @@ -844,7 +843,7 @@ standby_mode=on sub enable_restoring { my ($self, $root_node) = @_; - my $path = $vfs_path . $root_node->archive_dir; + my $path = TestLib::perl2host($root_node->archive_dir); my $name = $self->name; print "### Enabling WAL restore for node \"$name\"\n"; @@ -872,7 +871,7 @@ standby_mode = on sub enable_archiving { my ($self) = @_; - my $path = $vfs_path. $self->archive_dir; + my $path = TestLib::perl2host($self->archive_dir); my $name = $self->name; print "### Enabling WAL archiving for node \"$name\"\n"; diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm index 649fd821733..713a1214e71 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; @@ -145,6 +146,33 @@ sub tempdir_short return File::Temp::tempdir(CLEANUP => 1); } +# Translate a Perl file name to a host file name. Currently, this is a no-op +# except for the case of Perl=msys and host=mingw32. The subject need not +# exist, but its parent directory must exist. +sub perl2host +{ + my ($subject) = @_; + return $subject unless $Config{osname} eq 'msys'; + my $here = cwd; + my $leaf; + if (chdir $subject) + { + $leaf = ''; + } + else + { + $leaf = '/' . basename $subject; + my $parent = dirname $subject; + chdir $parent or die "could not chdir \"$parent\": $!"; + } + + # this odd way of calling 'pwd -W' is the only way that seems to work. + my $dir = qx{sh -c "pwd -W"}; + chomp $dir; + chdir $here; + return $dir . $leaf; +} + sub system_log { print("# Running: " . join(" ", @_) . "\n");