3 # die " Deadly, don't use yet. We must implement date verification as well, at least ";
5 # Have eliminated 10 lines: Dancer2-Logger-Radis-0.001(=>0.002) Yote-0.1022(=>2.02) DBD-SQLAnywhere-2.08(=>2.13) Template-Mustache-1.0.0_0(=>1.1.0) Data-Rmap-0.64(=>0.65) Pcore-PDF-v0.1.0(=>v0.4.4) IO-Socket-Socks-0.71(=>0.74) Data-Sah-Resolve-0.003(=>0.007) Git-PurePerl-0.51(=>0.53) Archive-Zip-1.57(=>1_11)
26 my @opt = <<'=back' =~ /B<--(\S+)>/g;
40 Visits fastapi for each command line argument. Arguments can either be
41 vdistro (Test-Pockito-0.02) or pretty_id style
42 (JWIED/HTML-EP-0.2011.tar.gz) or pretty_id without filename suffix
43 (FVULTO/HTML-Toc-1.12)
49 use lib
"$FindBin::Bin/../lib";
55 use Hash
::Util
qw(lock_keys);
57 use Time
::HiRes
qw(sleep);
61 lock_keys
%Opt, map { /([^=|!]+)/ } @opt;
71 use CPAN
::DistnameInfo
;
72 use List
::AllUtils
qw(reduce);
75 my $ua = LWP
::UserAgent
->new();
76 $ua->default_header("Accept-Encoding", "gzip");
77 my $jsonxs = JSON
::XS
->new->indent(0);
79 ARG
: for my $i (0..$#ARGV) {
80 my($maybedistv) = $ARGV[$i];
82 if ($maybedistv =~ m{/}) {
83 unless ($maybedistv =~ m{/.*\.(tar\.gz|zip|tar.bz2)}) {
84 $maybedistv .= ".tar.gz";
86 $CDA = substr($maybedistv,0,1) . '/' . substr($maybedistv,0,2) . '/' . $maybedistv;
88 $CDA = "A/AA/AAA/$maybedistv.tar.gz";
90 my $d = CPAN
::DistnameInfo
->new($CDA) or die "no d for argument $CDA";
91 my $distv = $d->distvname or die "no distv for $CDA";
92 my %w = ( distv
=> $distv ); # work
93 $w{version
} = $d->version;
94 warn "distv => $distv\n" if $Opt{debug
};
95 warn " version => $w{version}\n" if $Opt{debug
};
96 my $query = sprintf "http://fastapi.metacpan.org/v1/release/_search?q=distribution:%s&fields=name,date,status,version,author&size=400&_source=tests", $d->dist;
97 my $resp = $ua->get($query);
98 unless ($resp->is_success) {
99 warn sprintf "No success visiting '%s': %s; sleeping %.3f\n",
104 my $jsontxt = $resp->decoded_content;
105 my $j = eval { $jsonxs->decode($jsontxt); };
107 my $err = $@
|| "unknown error";
108 die "Error while decoding '$jsontxt': $err";
110 my $hits = $j->{hits
}{hits
};
111 my($matchingrelease) = grep { $_->{fields
}{name
} eq $distv } @
$hits;
112 unless ($matchingrelease) {
113 warn "Did not find release for $distv\n";
116 my($releasedate) = $matchingrelease->{fields
}{date
};
117 warn " releasedate => $releasedate\n" if $Opt{debug
};
118 my($author) = $matchingrelease->{fields
}{author
};
119 warn " author => $author\n" if $Opt{debug
};
120 $w{cpanversion
} = reduce
{
121 CPAN
::Version
->vgt($a,$b) ?
$a : $b
122 } map { $_->{fields
}{version
} } grep { $_->{fields
}{date
} ge $releasedate } @
$hits;
123 if (CPAN
::Version
->vgt($w{cpanversion
},$w{version
})) {
124 warn " newercpanversion => $w{cpanversion}\n" if $Opt{debug
};
125 my($highest_distro) = grep { $_->{fields
}{version
} eq $w{cpanversion
} } @
$hits;
126 warn " newerreleasedate => $highest_distro->{fields}{date}\n" if $Opt{debug
};
127 if ($highest_distro->{fields
}{author
} ne $author) {
128 warn " newerauthor => $highest_distro->{fields}{author}\n" if $Opt{debug
};
135 # cperl-indent-level: 4