diff --git a/Rewrite-unix-fork-reopen-to-be-compatible-with-ruby-.patch b/Rewrite-unix-fork-reopen-to-be-compatible-with-ruby-.patch new file mode 100644 index 0000000000000000000000000000000000000000..e3df35a7948a45cab00abeb3bed54adba3461361 --- /dev/null +++ b/Rewrite-unix-fork-reopen-to-be-compatible-with-ruby-.patch @@ -0,0 +1,52 @@ +From 975e87883a4f65966df59a5e757f03b66dd7e571 Mon Sep 17 00:00:00 2001 +From: Hans de Graaff +Date: Mon, 29 Apr 2019 18:41:35 +0200 +Subject: [PATCH] Rewrite unix fork reopen to be compatible with ruby 2.6 + +On ruby 2.6 the original code would fail specs: + +lib/childprocess/unix/fork_exec_process.rb:32:in `reopen': exclusive +access mode is not supported (ArgumentError) + +The documentation for reopen shows that it has two ways to call it: + + reopen(other_IO) -> ios + reopen(path, mode [,opt]) -> ios + +With ruby 2.4 and 2.5 calling reopen with a path and no mode seems to +work fine, but with ruby 2.6 this triggers the spec failure. + +This commit splits the calls based on stdout/stderr availability so +that both types of reopen calls can get the required parameters. This +fixes the 2.6 specs while being backward compatible with ruby 2.4 and +2.5. +--- + lib/childprocess/unix/fork_exec_process.rb | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +diff --git a/lib/childprocess/unix/fork_exec_process.rb b/lib/childprocess/unix/fork_exec_process.rb +index 5ed2a79..cc7a850 100644 +--- a/lib/childprocess/unix/fork_exec_process.rb ++++ b/lib/childprocess/unix/fork_exec_process.rb +@@ -29,8 +29,16 @@ module ChildProcess + exec_r.close + set_env + +- STDOUT.reopen(stdout || "/dev/null") +- STDERR.reopen(stderr || "/dev/null") ++ if stdout ++ STDOUT.reopen(stdout) ++ else ++ STDOUT.reopen("/dev/null", "a+") ++ end ++ if stderr ++ STDERR.reopen(stderr) ++ else ++ STDERR.reopen("/dev/null", "a+") ++ end + + if duplex? + STDIN.reopen(reader) +-- +2.33.0 + diff --git a/rubygem-childprocess.spec b/rubygem-childprocess.spec index ddfe090a1dff13f88ca960538964a116e5eded4e..cbd65f8a8d337954820914e1a4037ecee7da6839 100644 --- a/rubygem-childprocess.spec +++ b/rubygem-childprocess.spec @@ -2,11 +2,12 @@ Summary: A simple and reliable gem for controlling external programs Name: rubygem-%{gem_name} Version: 0.5.9 -Release: 1 +Release: 2 License: MIT URL: http://github.com/enkessler/childprocess Source0: http://rubygems.org/gems/%{gem_name}-%{version}.gem -BuildRequires: rubygems-devel rubygem(rspec) >= 3 +Patch1: Rewrite-unix-fork-reopen-to-be-compatible-with-ruby-.patch +BuildRequires: rubygems-devel rubygem(rspec) >= 3 rubygem(did_you_mean) BuildArch: noarch %description This gem aims at being a simple and reliable solution for controlling external @@ -20,11 +21,14 @@ BuildArch: noarch Documentation for %{name} %prep -%setup -q -c -T -%gem_install -n %{SOURCE0} - +%setup -q -n %{gem_name}-%{version} + +%patch1 -p1 + %build - +gem build ../%{gem_name}-%{version}.gemspec +%gem_install + %install mkdir -p %{buildroot}%{gem_dir} cp -a .%{gem_dir}/* %{buildroot}%{gem_dir}/ @@ -56,5 +60,8 @@ popd %doc %doc %{gem_docdir} %changelog +* Tue Feb 22 2022 chenchen - 0.5.9-2 +- fix build error caused by upgrading to ruby3 + * Tue Aug 18 2020 wanglin - 0.5.9-1 - package init