postgres.git / summary / log / commit / refs
commit 877cfeb4fb11da0ad8fed6fccb41953a37ed2084
Author: Noah Misch <noah@leadboat.com>
Date: Thu Nov 17 15:35:06 2022 +0000
First released in: 16.0, 11.19, 12.14, 13.10, 14.7, 15.2
Account for IPC::Run::result() Windows behavior change.
This restores compatibility with the not-yet-released successor of
version 20220807.0. Back-patch to 9.4, which introduced this code.
Reviewed by Andrew Dunstan.
Discussion: https://postgr.es/m/20221117061805.GA4020280@rfd.leadboat.com
src/test/perl/TestLib.pm | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm
index 6dbf3e6fc3b..76c727b9b1a 100644
--- a/src/test/perl/TestLib.pm
+++ b/src/test/perl/TestLib.pm
@@ -365,15 +365,13 @@ sub command_exit_is
my $h = start $cmd;
$h->finish();
- # On Windows, the exit status of the process is returned directly as the
- # process's exit code, while on Unix, it's returned in the high bits
- # of the exit code (see WEXITSTATUS macro in the standard <sys/wait.h>
- # header file). IPC::Run's result function always returns exit code >> 8,
- # assuming the Unix convention, which will always return 0 on Windows as
- # long as the process was not terminated by an exception. To work around
- # that, use $h->full_result on Windows instead.
- my $result = ($Config{osname} eq "MSWin32") ?
- ($h->full_results)[0] : $h->result(0);
+ # Normally, if the child called exit(N), IPC::Run::result() returns N. On
+ # Windows, with IPC::Run v20220807.0 and earlier, full_results() is the
+ # method that returns N (https://github.com/toddr/IPC-Run/issues/161).
+ my $result =
+ ($Config{osname} eq "MSWin32" && $IPC::Run::VERSION <= 20220807.0)
+ ? ($h->full_results)[0]
+ : $h->result(0);
is($result, $expected, $test_name);
}
[parent: 40064e103b11]