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 )