#!/usr/bin/perl use strict; use warnings; use Module::CPANTS::ProcessCPAN; use Module::CPANTS::DB; use Module::CoreList; use Parse::CPAN::Authors; use Getopt::Long; my %opts; GetOptions(\%opts,qw(cpan=s)); my $p=Module::CPANTS::ProcessCPAN->new($opts{cpan}); my $k=Module::CPANTS::Kwalitee->new; my $available_kw=$k->available_kwalitee; my @ind=$k->get_indicators; my $dbh=$p->db->storage->dbh; # build list of module->dist my %modules; { my $sth=$dbh->prepare("select module,dist from modules"); $sth->execute; while (my ($module,$dist)=$sth->fetchrow_array) { $modules{$module}=$dist; } } # prereq_matches_use { print "prereq_matches_use\n"; my %uses; my %prereq; my $sth_uses=$dbh->prepare("select distinct dist,in_dist from uses where in_dist>0 AND in_code>0"); $sth_uses->execute; print "uses\n"; while (my ($dist,$in)=$sth_uses->fetchrow_array) { $uses{$dist}->{$in}=1; } print "prereq\n"; my $sth_prereq=$dbh->prepare("select distinct dist,in_dist from prereq where in_dist>0 AND (is_prereq=1 OR is_optional_prereq=1)"); $sth_prereq->execute; while (my ($dist,$in)=$sth_prereq->fetchrow_array) { $prereq{$dist}->{$in}=1; } foreach my $dist (keys %uses) { my $used=$uses{$dist}; my $prereq=$prereq{$dist}; next unless $prereq; my @missing; foreach my $use (keys %$used) { push(@missing,$use) unless $prereq->{$use}; } if (@missing) { print "missing in $dist: ".join(', ',@missing),"\n"; } else { print "ok $dist\n"; } } }