Add 0001-test-and-fix-for-RT-52317-Calling-run3-garbles-STDIN.patch (RHBZ#1062267).
- Spec-file cosmetics.
This commit is contained in:
parent
b43f9cf8b6
commit
ed48fc6919
134
0001-test-and-fix-for-RT-52317-Calling-run3-garbles-STDIN.patch
Normal file
134
0001-test-and-fix-for-RT-52317-Calling-run3-garbles-STDIN.patch
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
From 8ebe48760cfdc78fbf4fc46413dde9470121b99e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Roderich Schupp <roderich.schupp@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
|
||||||
|
|
@ -1,26 +1,35 @@
|
|||||||
Name: perl-IPC-Run3
|
Name: perl-IPC-Run3
|
||||||
Version: 0.046
|
Version: 0.046
|
||||||
Release: 3%{?dist}
|
Release: 4%{?dist}
|
||||||
Summary: Run a subprocess in batch mode
|
Summary: Run a subprocess in batch mode
|
||||||
License: GPL+ or Artistic or BSD
|
License: GPL+ or Artistic or BSD
|
||||||
Group: Development/Libraries
|
Group: Development/Libraries
|
||||||
URL: http://search.cpan.org/dist/IPC-Run3/
|
URL: http://search.cpan.org/dist/IPC-Run3/
|
||||||
Source0: http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/IPC-Run3-%{version}.tar.gz
|
Source0: http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/IPC-Run3-%{version}.tar.gz
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
|
|
||||||
BuildRequires: perl(Carp)
|
BuildRequires: perl(Carp)
|
||||||
BuildRequires: perl(constant)
|
|
||||||
BuildRequires: perl(Exporter)
|
BuildRequires: perl(Exporter)
|
||||||
BuildRequires: perl(ExtUtils::MakeMaker)
|
BuildRequires: perl(ExtUtils::MakeMaker)
|
||||||
BuildRequires: perl(File::Temp)
|
BuildRequires: perl(File::Temp)
|
||||||
BuildRequires: perl(Getopt::Long)
|
BuildRequires: perl(Getopt::Long)
|
||||||
|
BuildRequires: perl(POSIX)
|
||||||
BuildRequires: perl(Test)
|
BuildRequires: perl(Test)
|
||||||
BuildRequires: perl(Test::More) >= 0.31
|
BuildRequires: perl(Test::More) >= 0.31
|
||||||
BuildRequires: perl(Time::HiRes)
|
BuildRequires: perl(Time::HiRes)
|
||||||
|
BuildRequires: perl(constant)
|
||||||
|
BuildRequires: perl(strict)
|
||||||
|
|
||||||
# For improved tests
|
# For improved tests
|
||||||
BuildRequires: perl(Test::Pod::Coverage)
|
BuildRequires: perl(Test::Pod::Coverage)
|
||||||
BuildRequires: perl(Test::Pod)
|
BuildRequires: perl(Test::Pod)
|
||||||
Requires: perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version))
|
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
|
%description
|
||||||
This module allows you to run a subprocess and redirect stdin, stdout,
|
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
|
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
|
%prep
|
||||||
%setup -q -n IPC-Run3-%{version}
|
%setup -q -n IPC-Run3-%{version}
|
||||||
|
%patch0 -p1
|
||||||
|
|
||||||
# Perms in tarballs are broken
|
# Perms in tarballs are broken
|
||||||
find -type f -exec chmod -x {} \;
|
find -type f -exec chmod -x {} \;
|
||||||
|
|
||||||
@ -45,12 +56,15 @@ find $RPM_BUILD_ROOT -type f -name .packlist -exec rm -f {} \;
|
|||||||
make test
|
make test
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%defattr(-,root,root,-)
|
|
||||||
%doc Changes LICENSE README
|
%doc Changes LICENSE README
|
||||||
%{perl_vendorlib}/*
|
%{perl_vendorlib}/*
|
||||||
%{_mandir}/man3/*
|
%{_mandir}/man3/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Feb 11 2014 Ralf Corsépius <corsepiu@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@lists.fedoraproject.org> - 0.046-3
|
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.046-3
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user