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
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')
{
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";
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";
use warnings;
use Config;
+use Cwd;
use Exporter 'import';
use File::Basename;
use File::Spec;
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");