[perl-IPC-Run3] Add 0001-test-and-fix-for-RT-52317-Calling-run3-garbles-STDIN.patch (RHBZ#1062267).
corsepiu
corsepiu at fedoraproject.org
Tue Feb 11 06:26:44 UTC 2014
commit ed48fc691927c710dcff24bd2bfc890c9617151d
Author: Ralf Corsépius <corsepiu at fedoraproject.org>
Date: Tue Feb 11 07:27:11 2014 +0100
Add 0001-test-and-fix-for-RT-52317-Calling-run3-garbles-STDIN.patch (RHBZ#1062267).
- Spec-file cosmetics.
...x-for-RT-52317-Calling-run3-garbles-STDIN.patch | 134 ++++++++++++++++++++
perl-IPC-Run3.spec | 20 +++-
2 files changed, 151 insertions(+), 3 deletions(-)
---
diff --git a/0001-test-and-fix-for-RT-52317-Calling-run3-garbles-STDIN.patch b/0001-test-and-fix-for-RT-52317-Calling-run3-garbles-STDIN.patch
new file mode 100644
index 0000000..fedc11d
--- /dev/null
+++ b/0001-test-and-fix-for-RT-52317-Calling-run3-garbles-STDIN.patch
@@ -0,0 +1,134 @@
+From 8ebe48760cfdc78fbf4fc46413dde9470121b99e Mon Sep 17 00:00:00 2001
+From: Roderich Schupp <roderich.schupp at gmail.com>
+Date: Sun, 29 Sep 2013 18:12:03 +0200
+Subject: [PATCH 5/5] test and fix for RT #52317: Calling run3 garbles STDIN
+
+---
+ lib/IPC/Run3.pm | 26 ++++++-------------------
+ t/preserve_stdin.t | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 63 insertions(+), 20 deletions(-)
+ create mode 100644 t/preserve_stdin.t
+
+diff --git a/lib/IPC/Run3.pm b/lib/IPC/Run3.pm
+index 12c9d8a..777e290 100644
+--- a/lib/IPC/Run3.pm
++++ b/lib/IPC/Run3.pm
+@@ -363,14 +363,12 @@ sub run3 {
+ $options if defined $stderr;
+
+ # this should make perl close these on exceptions
+-# local *STDIN_SAVE;
++ local *STDIN_SAVE;
+ local *STDOUT_SAVE;
+ local *STDERR_SAVE;
+
+- my $saved_fd0 = dup( 0 ) if defined $in_fh;
+-
+-# open STDIN_SAVE, "<&STDIN"# or croak "run3(): $! saving STDIN"
+-# if defined $in_fh;
++ open STDIN_SAVE, "<&STDIN" or croak "run3(): $! saving STDIN"
++ if defined $in_fh;
+ open STDOUT_SAVE, ">&STDOUT" or croak "run3(): $! saving STDOUT"
+ if defined $out_fh;
+ open STDERR_SAVE, ">&STDERR" or croak "run3(): $! saving STDERR"
+@@ -378,17 +376,10 @@ sub run3 {
+
+ my $errno;
+ my $ok = eval {
+- # The open() call here seems to not force fd 0 in some cases;
+- # I ran in to trouble when using this in VCP, not sure why.
+- # the dup2() seems to work.
+- dup2( fileno $in_fh, 0 )
+-# open STDIN, "<&=" . fileno $in_fh
++ open STDIN, "<&=" . fileno $in_fh
+ or croak "run3(): $! redirecting STDIN"
+ if defined $in_fh;
+
+-# close $in_fh or croak "$! closing STDIN temp file"
+-# if ref $stdin;
+-
+ open STDOUT, ">&" . fileno $out_fh
+ or croak "run3(): $! redirecting STDOUT"
+ if defined $out_fh;
+@@ -428,13 +419,8 @@ sub run3 {
+
+ my @errs;
+
+- if ( defined $saved_fd0 ) {
+- dup2( $saved_fd0, 0 );
+- POSIX::close( $saved_fd0 );
+- }
+-
+-# open STDIN, "<&STDIN_SAVE"# or push @errs, "run3(): $! restoring STDIN"
+-# if defined $in_fh;
++ open STDIN, "<&STDIN_SAVE" or push @errs, "run3(): $! restoring STDIN"
++ if defined $in_fh;
+ open STDOUT, ">&STDOUT_SAVE" or push @errs, "run3(): $! restoring STDOUT"
+ if defined $out_fh;
+ open STDERR, ">&STDERR_SAVE" or push @errs, "run3(): $! restoring STDERR"
+diff --git a/t/preserve_stdin.t b/t/preserve_stdin.t
+new file mode 100644
+index 0000000..8e090ee
+--- /dev/null
++++ b/t/preserve_stdin.t
+@@ -0,0 +1,57 @@
++#!perl -w
++
++## test whether reading from STDIN is preserved when
++## run3 is called in between reads
++
++use Test::More;
++use IPC::Run3;
++use File::Temp qw(tempfile);
++use strict;
++
++# call run3 at different lines (problems might manifest itself
++# on different lines, probably due to different buffering of input)
++my @check_at = (5, 10, 50, 100, 200, 500);
++plan tests => @check_at * 3;
++
++# create a test file for input containing 1000 lines
++my $nlines = 1000;
++my @exp_lines;
++my ($fh, $file) = tempfile(UNLINK => 1);
++for (my $i = 1; $i <= $nlines; $i++)
++{
++ my $line = "this is line $i";
++ push @exp_lines, $line;
++ print $fh $line, "\n";
++}
++close $fh;
++
++
++my ( $in, $out, $err );
++
++foreach my $n (@check_at)
++{
++ my $nread = 0;
++ my $unexpected;
++ open STDIN, "<", $file or die "can't open file $file: $!";
++ while (<STDIN>)
++ {
++ chomp;
++ $unexpected = qq[line $nread: expected "$exp_lines[$nread]", got "$_"\n]
++ unless $exp_lines[$nread] eq $_ || $unexpected;
++ $nread++;
++
++ if ($nread == $n)
++ {
++ $in = "checking at line $n";
++ run3 [ $^X, '-e', 'print uc $_ while <>' ], \$in, \$out, \$err;
++ die "command failed" unless $? == 0;
++ is($out, uc $in);
++ }
++ }
++ close STDIN;
++
++ is($nread, $nlines, "STDIN was read completely");
++ ok(!$unexpected, "STDIN as expected") or diag($unexpected);
++}
++
++
+--
+1.8.5.3
+
diff --git a/perl-IPC-Run3.spec b/perl-IPC-Run3.spec
index 5b2d261..766190d 100644
--- a/perl-IPC-Run3.spec
+++ b/perl-IPC-Run3.spec
@@ -1,26 +1,35 @@
Name: perl-IPC-Run3
Version: 0.046
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Run a subprocess in batch mode
License: GPL+ or Artistic or BSD
Group: Development/Libraries
URL: http://search.cpan.org/dist/IPC-Run3/
Source0: http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/IPC-Run3-%{version}.tar.gz
BuildArch: noarch
+
BuildRequires: perl(Carp)
-BuildRequires: perl(constant)
BuildRequires: perl(Exporter)
BuildRequires: perl(ExtUtils::MakeMaker)
BuildRequires: perl(File::Temp)
BuildRequires: perl(Getopt::Long)
+BuildRequires: perl(POSIX)
BuildRequires: perl(Test)
BuildRequires: perl(Test::More) >= 0.31
BuildRequires: perl(Time::HiRes)
+BuildRequires: perl(constant)
+BuildRequires: perl(strict)
+
# For improved tests
BuildRequires: perl(Test::Pod::Coverage)
BuildRequires: perl(Test::Pod)
Requires: perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version))
+# RHBZ #1062267 / https://rt.cpan.org/Public/Bug/Display.html?id=52317
+# Patch from
+# https://github.com/rschupp/IPC-Run3/commit/8ebe48760cfdc78fbf4fc46413dde9470121b99e
+Patch0: 0001-test-and-fix-for-RT-52317-Calling-run3-garbles-STDIN.patch
+
%description
This module allows you to run a subprocess and redirect stdin, stdout,
and/or stderr to files and perl data structures. It aims to satisfy 99% of
@@ -29,6 +38,8 @@ API and none of the bloat and rarely used features of IPC::Run.
%prep
%setup -q -n IPC-Run3-%{version}
+%patch0 -p1
+
# Perms in tarballs are broken
find -type f -exec chmod -x {} \;
@@ -45,12 +56,15 @@ find $RPM_BUILD_ROOT -type f -name .packlist -exec rm -f {} \;
make test
%files
-%defattr(-,root,root,-)
%doc Changes LICENSE README
%{perl_vendorlib}/*
%{_mandir}/man3/*
%changelog
+* Tue Feb 11 2014 Ralf Corsépius <corsepiu at fedoraproject.org> - 0.046-4
+- Add 0001-test-and-fix-for-RT-52317-Calling-run3-garbles-STDIN.patch (RHBZ#1062267).
+- Spec-file cosmetics.
+
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.046-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
More information about the scm-commits
mailing list