Update CPAN-Meta to CPAN version 2.133380
authorChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Wed, 4 Dec 2013 08:46:07 +0000 (08:46 +0000)
committerChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Wed, 4 Dec 2013 08:46:07 +0000 (08:46 +0000)
  [DELTA]

2.133380  2013-12-03 23:01:07 America/New_York

  [FIXED]

  - Improved bad version handling during META conversion

  - When downgrading multiple licenses to version 1.x META formats, if all
    the licenses are open source, the downgraded license will be
    "open_source", not "unknown"

12 files changed:
META.json
META.yml
Porting/Maintainers.pl
cpan/CPAN-Meta/lib/CPAN/Meta.pm
cpan/CPAN-Meta/lib/CPAN/Meta/Converter.pm
cpan/CPAN-Meta/lib/CPAN/Meta/Feature.pm
cpan/CPAN-Meta/lib/CPAN/Meta/History.pm
cpan/CPAN-Meta/lib/CPAN/Meta/Prereqs.pm
cpan/CPAN-Meta/lib/CPAN/Meta/Spec.pm
cpan/CPAN-Meta/lib/CPAN/Meta/Validator.pm
cpan/CPAN-Meta/t/converter.t
cpan/CPAN-Meta/t/data-test/META-2.json

index c5559de..91f378d 100644 (file)
--- a/META.json
+++ b/META.json
@@ -4,7 +4,7 @@
       "perl5-porters@perl.org"
    ],
    "dynamic_config" : 1,
-   "generated_by" : "CPAN::Meta version 2.132830",
+   "generated_by" : "CPAN::Meta version 2.133380",
    "license" : [
       "perl_5"
    ],
index 1a1fc6a..3130f01 100644 (file)
--- a/META.yml
+++ b/META.yml
@@ -4,7 +4,7 @@ author:
   - perl5-porters@perl.org
 build_requires: {}
 dynamic_config: 1
-generated_by: 'CPAN::Meta version 2.132830, CPAN::Meta::Converter version 2.132830'
+generated_by: 'CPAN::Meta version 2.133380, CPAN::Meta::Converter version 2.133380'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
index 06ec362..2e13c08 100755 (executable)
@@ -302,7 +302,7 @@ use File::Glob qw(:case);
     # Note: When updating CPAN-Meta the META.* files will need to be regenerated
     # perl -Icpan/CPAN-Meta/lib Porting/makemeta
     'CPAN::Meta' => {
-        'DISTRIBUTION' => 'DAGOLDEN/CPAN-Meta-2.132830.tar.gz',
+        'DISTRIBUTION' => 'DAGOLDEN/CPAN-Meta-2.133380.tar.gz',
         'FILES'        => q[cpan/CPAN-Meta],
         'EXCLUDED'     => [
             qw(t/00-compile.t),
index 25a4d1a..87bbfa2 100644 (file)
@@ -2,7 +2,7 @@ use 5.006;
 use strict;
 use warnings;
 package CPAN::Meta;
-our $VERSION = '2.132830'; # VERSION
+our $VERSION = '2.133380'; # VERSION
 
 
 use Carp qw(carp croak);
@@ -340,7 +340,7 @@ __END__
 
 =pod
 
-=encoding utf-8
+=encoding UTF-8
 
 =head1 NAME
 
@@ -348,7 +348,7 @@ CPAN::Meta - the distribution metadata for a CPAN dist
 
 =head1 VERSION
 
-version 2.132830
+version 2.133380
 
 =head1 SYNOPSIS
 
index 2825eb2..aa8749b 100644 (file)
@@ -2,13 +2,14 @@ use 5.006;
 use strict;
 use warnings;
 package CPAN::Meta::Converter;
-our $VERSION = '2.132830'; # VERSION
+our $VERSION = '2.133380'; # VERSION
 
 
 use CPAN::Meta::Validator;
 use CPAN::Meta::Requirements;
 use version 0.88 ();
 use Parse::CPAN::Meta 1.4400 ();
+use List::Util 1.33 qw/all/;
 
 sub _dclone {
   my $ref = shift;
@@ -94,7 +95,7 @@ sub _change_meta_spec {
   };
 }
 
-my @valid_licenses_1 = (
+my @open_source = (
   'perl',
   'gpl',
   'apache',
@@ -106,6 +107,12 @@ my @valid_licenses_1 = (
   'mit',
   'mozilla',
   'open_source',
+);
+
+my %is_open_source = map {; $_ => 1 } @open_source;
+
+my @valid_licenses_1 = (
+  @open_source,
   'unrestricted',
   'restrictive',
   'unknown',
@@ -122,7 +129,9 @@ sub _license_1 {
   if ( $license_map_1{lc $element} ) {
     return $license_map_1{lc $element};
   }
-  return 'unknown';
+  else {
+    return 'unknown';
+  }
 }
 
 my @valid_licenses_2 = qw(
@@ -220,12 +229,20 @@ sub _downgrade_license {
     return "unknown";
   }
   elsif( ref $element eq 'ARRAY' ) {
-    if ( @$element == 1 ) {
-      return $license_downgrade_map{$element->[0]} || "unknown";
+    if ( @$element > 1) {
+      if ( all { $is_open_source{ $license_downgrade_map{lc $_} || 'unknown' } } @$element ) {
+        return 'open_source';
+      }
+      else {
+        return 'unknown';
+      }
+    }
+    elsif ( @$element == 1 ) {
+      return $license_downgrade_map{lc $element->[0]} || "unknown";
     }
   }
   elsif ( ! ref $element ) {
-    return $license_downgrade_map{$element} || "unknown";
+    return $license_downgrade_map{lc $element} || "unknown";
   }
   return "unknown";
 }
@@ -349,7 +366,7 @@ sub _version_map {
     # XXX turn this into CPAN::Meta::Requirements with bad version hook
     # and then turn it back into a hash
     my $new_map = CPAN::Meta::Requirements->new(
-      { bad_version_hook => sub { version->new(0) } } # punt
+      { bad_version_hook => \&_bad_version_hook } # punt
     );
     while ( my ($k,$v) = each %$element ) {
       next unless _is_module_name($k);
@@ -1293,7 +1310,7 @@ __END__
 
 =pod
 
-=encoding utf-8
+=encoding UTF-8
 
 =head1 NAME
 
@@ -1301,7 +1318,7 @@ CPAN::Meta::Converter - Convert CPAN distribution metadata structures
 
 =head1 VERSION
 
-version 2.132830
+version 2.133380
 
 =head1 SYNOPSIS
 
index 978aa3d..6631586 100644 (file)
@@ -2,7 +2,7 @@ use 5.006;
 use strict;
 use warnings;
 package CPAN::Meta::Feature;
-our $VERSION = '2.132830'; # VERSION
+our $VERSION = '2.133380'; # VERSION
 
 use CPAN::Meta::Prereqs;
 
@@ -36,7 +36,7 @@ __END__
 
 =pod
 
-=encoding utf-8
+=encoding UTF-8
 
 =head1 NAME
 
@@ -44,7 +44,7 @@ CPAN::Meta::Feature - an optional feature provided by a CPAN distribution
 
 =head1 VERSION
 
-version 2.132830
+version 2.133380
 
 =head1 DESCRIPTION
 
index d52e8c7..30bbb06 100644 (file)
@@ -3,7 +3,7 @@ use 5.006;
 use strict;
 use warnings;
 package CPAN::Meta::History;
-our $VERSION = '2.132830'; # VERSION
+our $VERSION = '2.133380'; # VERSION
 
 1;
 
@@ -13,7 +13,7 @@ __END__
 
 =pod
 
-=encoding utf-8
+=encoding UTF-8
 
 =head1 NAME
 
@@ -21,7 +21,7 @@ CPAN::Meta::History - history of CPAN Meta Spec changes
 
 =head1 VERSION
 
-version 2.132830
+version 2.133380
 
 =head1 DESCRIPTION
 
index 169b28e..a4e6057 100644 (file)
@@ -2,7 +2,7 @@ use 5.006;
 use strict;
 use warnings;
 package CPAN::Meta::Prereqs;
-our $VERSION = '2.132830'; # VERSION
+our $VERSION = '2.133380'; # VERSION
 
 
 use Carp qw(confess);
@@ -174,7 +174,7 @@ __END__
 
 =pod
 
-=encoding utf-8
+=encoding UTF-8
 
 =head1 NAME
 
@@ -182,7 +182,7 @@ CPAN::Meta::Prereqs - a set of distribution prerequisites by phase and type
 
 =head1 VERSION
 
-version 2.132830
+version 2.133380
 
 =head1 DESCRIPTION
 
index cbc0ff9..bc745f9 100644 (file)
@@ -7,7 +7,7 @@ use 5.006;
 use strict;
 use warnings;
 package CPAN::Meta::Spec;
-our $VERSION = '2.132830'; # VERSION
+our $VERSION = '2.133380'; # VERSION
 
 1;
 
@@ -20,7 +20,7 @@ __END__
 
 =pod
 
-=encoding utf-8
+=encoding UTF-8
 
 =head1 NAME
 
@@ -28,7 +28,7 @@ CPAN::Meta::Spec - specification for CPAN distribution metadata
 
 =head1 VERSION
 
-version 2.132830
+version 2.133380
 
 =head1 SYNOPSIS
 
@@ -315,7 +315,7 @@ Example:
 
   license => [ 'perl_5' ]
 
-  license => [ 'apache_2', 'mozilla_1_0' ]
+  license => [ 'apache_2_0', 'mozilla_1_0' ]
 
 (Spec 2) [required] {List of one or more License Strings}
 
index 8fabd4b..e094b8f 100644 (file)
@@ -2,7 +2,7 @@ use 5.006;
 use strict;
 use warnings;
 package CPAN::Meta::Validator;
-our $VERSION = '2.132830'; # VERSION
+our $VERSION = '2.133380'; # VERSION
 
 
 #--------------------------------------------------------------------------#
@@ -815,7 +815,7 @@ __END__
 
 =pod
 
-=encoding utf-8
+=encoding UTF-8
 
 =head1 NAME
 
@@ -823,7 +823,7 @@ CPAN::Meta::Validator - validate CPAN distribution metadata structures
 
 =head1 VERSION
 
-version 2.132830
+version 2.133380
 
 =head1 SYNOPSIS
 
index e963168..0811828 100644 (file)
@@ -274,4 +274,25 @@ sub _normalize_reqs {
   }
 }
 
+# specific test for multiple licenses
+{
+  my $path = File::Spec->catfile('t','data-test','META-2.json');
+  my $original = Parse::CPAN::Meta->load_file( $path  );
+  ok( $original, "loaded META-2.json" );
+  my $cmc = CPAN::Meta::Converter->new( $original );
+  my $cleaned_up = $cmc->convert( version => "2" );
+  is_deeply(
+      $cleaned_up->{license},
+      [ 'perl_5', 'bsd' ],
+      "multiple license preserved (v2)"
+  );
+
+  $cleaned_up = $cmc->convert( version => "1.4" );
+  is(
+      $cleaned_up->{license},
+      'open_source',
+      "multiple license converted to open_source (v1.4)"
+  );
+}
+
 done_testing;
index d737fef..e0c7e32 100644 (file)
@@ -22,7 +22,8 @@
    ],
    "release_status" : "stable",
    "license" : [
-      "perl_5"
+      "perl_5",
+      "bsd"
    ],
    "description" : "Module::Build is a system for building, testing, and installing Perl modules.  It is meant to be an alternative to ExtUtils::MakeMaker... blah blah blah",
    "keywords" : [