X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=cpan-stable-smolder;h=26ddd1c17db117e0036fd472fd4cbd5b3d6c6a1e;hb=344e1f1a9fb0170288ccaec23566aada0207843d;hp=1bcfd836914bde4e6f1fe4579daaac9ec4ddec91;hpb=2873d0068ba89c7928ebc0540d9cfbcba6d723fc;p=gitmo%2Fmoose-dev-utils.git diff --git a/cpan-stable-smolder b/cpan-stable-smolder index 1bcfd83..26ddd1c 100755 --- a/cpan-stable-smolder +++ b/cpan-stable-smolder @@ -1,11 +1,11 @@ -#!/usr/bin/perl +#!/usr/bin/env perl use strict; use warnings; use CPAN; use Cwd; use File::chdir; -use File::Path qw( rmtree ); +use IPC::Run3 qw( run3 ); CPAN::HandleConfig->load(); @@ -24,112 +24,52 @@ if ( -f $LOGFILE ) { open my $log, '>', $LOGFILE || die "Could not open $LOGFILE because $!"; -test_all_modules( - qw[ - Moose::Autobox - MooseX::Accessors::ReadWritePrivate - MooseX::App::Cmd - MooseX::Async - MooseX::Attribute::ENV - MooseX::AttributeHelpers - MooseX::Attribute::Prototype - MooseX::Attributes::Curried - MooseX::Blessed::Reconstruct - MooseX::ClassAttribute - MooseX::Clone - MooseX::ConfigFromFile - MooseX::Constructor::AllErrors - MooseX::Contract - MooseX::Control - MooseX::CurriedHandles - MooseX::Daemonize - MooseX::Declare - MooseX::DeepAccessors - MooseX::DOM - MooseX::Emulate::Class::Accessor::Fast - MooseX::FollowPBP - MooseX::Getopt - MooseX::GlobRef::Object - MooseX::InsideOut - MooseX::Iterator - MooseX::KeyedMutex - MooseX::LazyLogDispatch - MooseX::LogDispatch - MooseX::Log::Log4perl - MooseX::MakeImmutable - MooseX::Meta::TypeConstraint::ForceCoercion - MooseX::MetaDescription - MooseX::MethodAttributes - MooseX::Method::Signatures - MooseX::MultiInitArg - MooseX::MultiMethods - MooseX::MutatorAttributes - MooseX::NaturalKey - MooseX::NonMoose - MooseX::Object::Pluggable - MooseX::Param - MooseX::Params::Validate - MooseX::Plaggerize - MooseX::POE - MooseX::Policy::SemiAffordanceAccessor - MooseX::Q4MLog - MooseX::Role::Cmd - MooseX::Role::Matcher - MooseX::Role::Parameterized - MooseX::Role::TraitConstructor - MooseX::Role::XMLRPC::Client - MooseX::Scaffold - MooseX::SemiAffordanceAccessor - MooseX::SimpleConfig - MooseX::Singleton - MooseX::Storage - MooseX::Storage::Format::XML::Simple - MooseX::StrictConstructor - MooseX::Struct - MooseX::Templated - MooseX::Timestamp - MooseX::Traits - MooseX::Traits::Attribute::CascadeClear - MooseX::Types - MooseX::Types::Authen::Passphrase - MooseX::Types::Common - MooseX::Types::Data::GUID - MooseX::Types::DateTime - MooseX::Types::IO - MooseX::Types::Path::Class - MooseX::Types::Set::Object - MooseX::Types::Structured - MooseX::Types::URI - MooseX::Types::UUID - MooseX::Types::VariantTable - MooseX::WithCache - MooseX::Workers - MooseX::YAML - Fey::ORM - KiokuDB - Catalyst - ] -); +my $MODULE_LIST_FILE = ( cwd . '/cpan-stable-modules' ); + +my @modules; +{ + open my $fh, $MODULE_LIST_FILE or die "Can't open $MODULE_LIST_FILE: $!"; + @modules = map { chomp; $_ } <$fh>; +} + +test_all_modules(@modules); close $log; exit; sub test_all_modules { + my @statuses; + my @details; + foreach my $project (@_) { my $dist = get_distro_from_cpan($project); unless ($dist) { - print $log "UNKNOWN : $project (not on CPAN?)\n"; + print {$log} "UNKNOWN : $project (not on CPAN?)\n"; next; } - my $passed = test_module( $dist->dir() ); + my ( $passed, $warned, $output ) = test_module( $dist->dir() ); + + my $status = $passed && $warned ? 'WARN' : $passed ? 'PASS' : 'FAIL'; - my $msg = $passed ? 'SUCCESS' : 'FAIL'; + my $summary = "$status: $project - " . $dist->base_id(); + print {$log} "$summary\n"; - print $log sprintf( '%7s : %s - %s', $msg, $project, $dist->base_id() ); - print $log "\n"; + push @details, [ $project, $output ] + if $warned || ! $passed; + } + + if (@details) { + print {$log} "\n\n"; + + for my $detail (@details) { + print {$log} q{-} x 50; + print {$log} "\n"; + print {$log} "$detail->[0]\n\n"; + print {$log} "$detail->[1]\n\n"; + } } } @@ -159,28 +99,49 @@ sub test_module { local $ENV{PERL_AUTOINSTALL} = '--defaultdeps'; if ( -f "Build.PL" ) { - _run_commands( + return + unless _run_commands( [ $^X, 'Build.PL' ], ['./Build'], - [qw( ./Build test )], - ); + ); } else { - _run_commands( + return + unless _run_commands( [ $^X, 'Makefile.PL' ], ['make'], - [qw( make test )], - ); + ); } + + return _run_tests(); } sub _run_commands { for my $cmd (@_) { - if ( system( @{$cmd} ) ) { + my $output; + + unless ( run3 $cmd, \undef, \$output, \$output ) { warn "Failed to run @{$cmd}\n"; - return; + return ( 0, $output ); } } + + return 1; +} + +sub _run_tests { + my $output; + + if ( -f "Build.PL" ) { + run3 [ qw( ./Build test ) ], undef, \$output, \$output; + } + else { + run3 [ qw( make test ) ], undef, \$output, \$output; + } + + my $passed = $output =~ /Result: PASS/; + my $warned = $output =~ /at .+ line \d+/; + + return ( $passed, $warned, $output ); } -1;