Parse-Distname
view release on metacpan or search on metacpan
xt/walk_through.t view on Meta::CPAN
use strict;
use warnings;
use Test::More;
use File::Find;
use Parse::Distname;
my $cpan_mirror;
BEGIN {
$cpan_mirror = $ENV{TEST_CPAN_MIRROR}
or plan skip_all => "requires \$ENV{TEST_CPAN_MIRROR} to test";
-d "$cpan_mirror/authors/id/"
or plan skip_all => "\$ENV{TEST_CPAN_MIRROR} seems not a CPAN mirror";
eval "use CPAN::DistnameInfo 0.12; 1"
or plan skip_all => "requires CPAN::DistnameInfo to compare";
}
my %KnownDiff;
{
local $/ = "";
while(<DATA>) {
s/(?:\015\012|\015|\012)/\n/sg;
s/\A#[^\n]*\n//sg;
my ($file, $diff) = split "\n", $_, 2;
chomp $file; chomp $diff;
$file =~ s/\s*\(.+$//; # remove year info
$KnownDiff{$file} = $diff;
}
}
find({
wanted => sub {
my $file = $File::Find::name;
return unless -f $file;
return unless $file =~ /$Parse::Distname::SUFFRE/i;
my $cpan_path = $file;
$cpan_path =~ s|^.+authors/id/||;
my %cd = CPAN::DistnameInfo->new($cpan_path)->properties;
my %pd = Parse::Distname->new($cpan_path)->properties;
# ignore spammers
return if $pd{cpanid} =~ /^(?:DOCRIVERS|FULLHQ|ULTRAHD)$/;
my $ok = 1;
my $diff = '';
for my $key (sort keys %cd) {
if (defined $cd{$key}) {
if (defined $pd{$key}) {
if ($cd{$key} eq $pd{$key}) {
# OK
$diff .= <<"DIFF";
"$key": "$cd{$key}",
DIFF
} else {
$diff .= <<"DIFF";
- "$key": "$cd{$key}",
+ "$key": "$pd{$key}",
DIFF
$ok = 0;
}
} else {
$diff .= <<"DIFF";
- "$key": "$cd{$key}",
+ "$key": null,
DIFF
$ok = 0;
}
}
elsif (defined $pd{$key}) {
$diff .= <<"DIFF";
- "$key": null,
+ "$key": "$pd{$key}",
DIFF
$ok = 0;
}
else {
# both are undef; OK
$diff .= <<"DIFF";
"$key": null,
( run in 1.962 second using v1.01-cache-2.11-cpan-800906f7e73 )