diff --git a/lib/Module.pm b/lib/Module.pm index 589b86e..b8f09a4 100755 --- a/lib/Module.pm +++ b/lib/Module.pm @@ -7,6 +7,7 @@ use Storable; use IPC::Run qw/run/; no warnings 'experimental'; use Carp qw/croak carp cluck confess/; +use TestCpanInc; has 'name' => (is => 'ro'); has 'dist' => (is => 'ro', @@ -99,17 +100,13 @@ sub get_deps { print "Getting deps for $module\n"; my $out; - my $ret; + my $exitcode; for my $tries (1..3) { - my @cmd = (qw|cpanm --quiet --showdeps|, $module); - - $SIG{TERM}="ignore"; - $ret = run \@cmd, '>&', \$out; - - warn "Failed to get deps for $module: $?" unless $ret; - last if ($ret); + ($exitcode, $out) = TestCpanInc::run_cpanm(1, 30, qw/--quiet --showdeps/, $module); + warn "Failed to get deps for $module: $exitcode" if $exitcode; + last unless ($exitcode); } - die "FATAL: no deps for $module: $out" unless $ret; + die "FATAL: no deps for $module: $out" if $exitcode; my $deps = [map {Module->new_module($_)} grep {!_is_core($_)} grep {defined $_ && $_ !~ /^\s*$/} split($/, $out)]; diff --git a/lib/TestCpanInc.pm b/lib/TestCpanInc.pm index b6f416c..d2b18b5 100644 --- a/lib/TestCpanInc.pm +++ b/lib/TestCpanInc.pm @@ -52,16 +52,16 @@ sub dep_order { } sub run_cpanm { - my ($module, $incstatus) = @_; + my ($incstatus, $timeout, @arguments) = @_; $ENV{PERL_USE_UNSAFE_INC} = !!$incstatus; - my @cmd = (qw/perlbrew exec --with/, $perlbrew_env, qw|cpanm --reinstall --verbose |, $module); + my @cmd = (qw/perlbrew exec --with/, $perlbrew_env, 'cpanm', @arguments); my $out; my $in=''; $|++; - my $timeout = 10*60; + $timeout = $timeout > 0? $timeout : 600; # default to 10 min, even if you passed 0. my $h = harness \@cmd, '<', \$in, '>&', \$out, timeout($timeout); # timeout after 10 minutes eval { @@ -88,17 +88,28 @@ sub run_cpanm { return ($exitcode, $out); } +sub test_install { + my ($module, $incstatus) = @_; + + $ENV{PERL_USE_UNSAFE_INC} = !!$incstatus; + my @cmd = (qw/perlbrew exec --with/, $perlbrew_env, qw|cpanm --reinstall --verbose |, $module); + + my ($exitcode, $out) = run_cpanm($incstatus, 600, qw/--reinstall --verbose/, $module); + + return ($exitcode, $out); +} + sub test_module { my $module = shift; return "banned module" if (Module::_is_banned($module)); remove_imc(); - my ($ret, $noincout) = run_cpanm($module, 0); + my ($ret, $noincout) = test_install($module, 0); if ($ret) { remove_imc(); - my ($ret2, $incout) = run_cpanm($module, 1); + my ($ret2, $incout) = test_install($module, 1); if (!$ret2) { print ">>>>Module $module failed to build without UNSAFE INC\n"; diff --git a/modcache.stor b/modcache.stor index a32e178..807ed32 100644 Binary files a/modcache.stor and b/modcache.stor differ