Skip to content

Instantly share code, notes, and snippets.

@dagolden
Created June 8, 2010 02:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dagolden/429506 to your computer and use it in GitHub Desktop.
Save dagolden/429506 to your computer and use it in GitHub Desktop.
#!/usr/bin/env perl
use 5.010;
use strict;
use warnings;
use autodie;
use Path::Class;
use CPAN::Meta;
use Parallel::Iterator qw/iterate_as_array/;
use List::Util qw/sum/;
my %results;
my %count;
my @files = grep { /\.(?:ya?ml|json)/ }
grep { ! $_->is_dir } dir('metafiles')->children;
my @results = iterate_as_array(
{ workers => 4, batch => 100, adaptive => 1.5 },
sub {
my ($i,$f) = @_;
my $meta;
if ( $meta = eval {CPAN::Meta->load_file($f, { lazy_validation => 0 } )} ) {
return "passed $f";
}
elsif ( $meta = eval {CPAN::Meta->load_file($f)} ) {
return "fixed $f";
}
elsif( $@ =~ m{^(?:Parse::CPAN::Meta)}ms ) {
return "parser $f";
}
elsif( $@ =~ m{^Missing mandatory field, 'name'}ms ) {
return "mandatory $f";
}
elsif( $@ =~ m{^Missing mandatory field, 'version'}ms ) {
return "mandatory $f";
}
elsif( $@ =~ m{for 'version' is not a valid version. \(version\)}ms ) {
return "mandatory $f";
}
else {
return "failed $f ERROR in '$f':\n$@\n\n";
}
},
\@files
);
for my $r ( @results ) {
my ($grade, $f) = $r =~ m{^(\S+)\s*(\S+)};
$results{$f} = $grade;
$count{$grade}++;
if ( $grade eq 'failed' ) {
print $r;
}
}
open my $fh, ">", "torture_out.txt";
for my $k ( sort keys %results ) {
say $fh "$k $results{$k}";
}
my $total = sum values %count;
say sprintf("%s: %s (%0.2f%%)", $_, $count{$_}, $count{$_}/$total*100) for sort keys %count;
say "total: $total";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment