X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=cpan-stable-smolder;h=74405683c021ac9a8cfb1e5795b49c5f1a01abfd;hb=42e12f75dbeae1a123d377477b63578f5644cb1f;hp=9da5416988ac5052e5619c7537dee6d6e577cf2c;hpb=81b7b4067ae49c6d6df5bc5f2c544829e9637c87;p=gitmo%2Fmoose-dev-utils.git diff --git a/cpan-stable-smolder b/cpan-stable-smolder index 9da5416..7440568 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,111 +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 - ] -); +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 { - foreach my $project (grep {$_ eq 'Fey::ORM'}@_) { + 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"; + } } } @@ -158,28 +99,44 @@ 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; + + run3 [ qw( prove -b ) ], undef, \$output, \$output; + + my $passed = $output =~ /Result: PASS/; + my $warned = $output =~ /at .+ line \d+/; + + return ( $passed, $warned, $output ); } -1;