Hello community,

here is the log from the commit of package perl-CPAN-Meta for openSUSE:Factory 
checked in at 2014-09-17 17:25:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-CPAN-Meta (Old)
 and      /work/SRC/openSUSE:Factory/.perl-CPAN-Meta.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-CPAN-Meta"

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-CPAN-Meta/perl-CPAN-Meta.changes    
2014-05-26 14:41:24.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.perl-CPAN-Meta.new/perl-CPAN-Meta.changes       
2014-09-17 17:26:13.000000000 +0200
@@ -1,0 +2,17 @@
+Mon Sep 15 15:44:38 UTC 2014 - [email protected]
+
+- updated to 2.142060
+ 
+   [ADDED]
+ 
+   - CPAN::Meta::Merge is a new class for merging two possibly overlapping
+     instances of metadata. It will accept both CPAN::Meta objects and
+     (possibly incomplete) hashrefs of metadata.
+ 
+ 2.141520  2014-05-31 23:41:13-04:00 America/New_York
+ 
+   [DOCUMENTED]
+ 
+   - Clarified use of 'file' for the 'provides' field in the Spec
+
+-------------------------------------------------------------------

Old:
----
  CPAN-Meta-2.141170.tar.gz

New:
----
  CPAN-Meta-2.142060.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-CPAN-Meta.spec ++++++
--- /var/tmp/diff_new_pack.axIlh8/_old  2014-09-17 17:26:14.000000000 +0200
+++ /var/tmp/diff_new_pack.axIlh8/_new  2014-09-17 17:26:14.000000000 +0200
@@ -17,14 +17,14 @@
 
 
 Name:           perl-CPAN-Meta
-Version:        2.141170
+Version:        2.142060
 Release:        0
 %define cpan_name CPAN-Meta
 Summary:        Distribution metadata for a CPAN dist
 License:        Artistic-1.0 or GPL-1.0+
 Group:          Development/Libraries/Perl
 Url:            http://search.cpan.org/dist/CPAN-Meta/
-Source:         CPAN-Meta-2.141170.tar.gz
+Source:         
http://www.cpan.org/authors/id/D/DA/DAGOLDEN/%{cpan_name}-%{version}.tar.gz
 BuildArch:      noarch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  perl
@@ -36,17 +36,6 @@
 BuildRequires:  perl(Parse::CPAN::Meta) >= 1.4414
 BuildRequires:  perl(Test::More) >= 0.88
 BuildRequires:  perl(version) >= 0.88
-#BuildRequires: perl(CPAN::Meta)
-#BuildRequires: perl(CPAN::Meta::Converter)
-#BuildRequires: perl(CPAN::Meta::Feature)
-#BuildRequires: perl(CPAN::Meta::Prereqs)
-#BuildRequires: perl(CPAN::Meta::Validator)
-#BuildRequires: perl(Pod::Coverage::TrustPod)
-#BuildRequires: perl(Pod::Wordlist)
-#BuildRequires: perl(Test::CPAN::Meta)
-#BuildRequires: perl(Test::Pod) >= 1.41
-#BuildRequires: perl(Test::Pod::Coverage) >= 1.08
-#BuildRequires: perl(Test::Spelling) >= 0.12
 Requires:       perl(CPAN::Meta::Requirements) >= 2.121
 Requires:       perl(CPAN::Meta::YAML) >= 0.008
 Requires:       perl(JSON::PP) >= 2.27200

++++++ CPAN-Meta-2.141170.tar.gz -> CPAN-Meta-2.142060.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/Changes 
new/CPAN-Meta-2.142060/Changes
--- old/CPAN-Meta-2.141170/Changes      2014-04-27 19:03:49.000000000 +0200
+++ new/CPAN-Meta-2.142060/Changes      2014-07-25 19:30:29.000000000 +0200
@@ -1,5 +1,19 @@
 Revision history for CPAN-Meta
 
+2.142060  2014-07-25 13:30:06-04:00 America/New_York
+
+  [ADDED]
+
+  - CPAN::Meta::Merge is a new class for merging two possibly overlapping
+    instances of metadata. It will accept both CPAN::Meta objects and
+    (possibly incomplete) hashrefs of metadata.
+
+2.141520  2014-05-31 23:41:13-04:00 America/New_York
+
+  [DOCUMENTED]
+
+  - Clarified use of 'file' for the 'provides' field in the Spec
+
 2.141170  2014-04-27 13:03:37-04:00 America/New_York
 
   [ADDED]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/MANIFEST 
new/CPAN-Meta-2.142060/MANIFEST
--- old/CPAN-Meta-2.141170/MANIFEST     2014-04-27 19:03:49.000000000 +0200
+++ new/CPAN-Meta-2.142060/MANIFEST     2014-07-25 19:30:29.000000000 +0200
@@ -1,4 +1,4 @@
-# This file was automatically generated by Dist::Zilla::Plugin::Manifest 
v5.015.
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest 
v5.019.
 CONTRIBUTING
 Changes
 LICENSE
@@ -19,10 +19,12 @@
 lib/CPAN/Meta/Converter.pm
 lib/CPAN/Meta/Feature.pm
 lib/CPAN/Meta/History.pm
+lib/CPAN/Meta/Merge.pm
 lib/CPAN/Meta/Prereqs.pm
 lib/CPAN/Meta/Spec.pm
 lib/CPAN/Meta/Validator.pm
 perlcritic.rc
+t/00-report-prereqs.dd
 t/00-report-prereqs.t
 t/README-data.txt
 t/converter-bad.t
@@ -78,6 +80,7 @@
 t/data-valid/META-1_1.yml
 t/data-valid/scalar-meta-spec.yml
 t/load-bad.t
+t/merge.t
 t/meta-obj.t
 t/no-index.t
 t/prereqs-finalize.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/META.json 
new/CPAN-Meta-2.142060/META.json
--- old/CPAN-Meta-2.141170/META.json    2014-04-27 19:03:49.000000000 +0200
+++ new/CPAN-Meta-2.142060/META.json    2014-07-25 19:30:29.000000000 +0200
@@ -5,7 +5,7 @@
       "Ricardo Signes <[email protected]>"
    ],
    "dynamic_config" : 0,
-   "generated_by" : "Dist::Zilla version 5.015, CPAN::Meta::Converter version 
2.140640",
+   "generated_by" : "Dist::Zilla version 5.019, CPAN::Meta::Converter version 
2.141170",
    "license" : [
       "perl_5"
    ],
@@ -34,7 +34,7 @@
       },
       "develop" : {
          "requires" : {
-            "Dist::Zilla" : "5.015",
+            "Dist::Zilla" : "5",
             "Dist::Zilla::Plugin::AutoVersion" : "0",
             "Dist::Zilla::Plugin::MakeMaker" : "0",
             "Dist::Zilla::Plugin::MakeMaker::Highlander" : "0.003",
@@ -49,7 +49,8 @@
             "Test::CPAN::Meta" : "0",
             "Test::More" : "0",
             "Test::Pod" : "1.41",
-            "Test::Pod::Coverage" : "1.08"
+            "Test::Pod::Coverage" : "1.08",
+            "Test::Spelling" : "0.12"
          }
       },
       "runtime" : {
@@ -69,6 +70,7 @@
       "test" : {
          "recommends" : {
             "CPAN::Meta" : "0",
+            "CPAN::Meta::Prereqs" : "0",
             "CPAN::Meta::Requirements" : "2.120900"
          },
          "requires" : {
@@ -80,40 +82,46 @@
             "File::Temp" : "0.20",
             "IO::Dir" : "0",
             "List::Util" : "0",
+            "Scalar::Util" : "0",
             "Test::More" : "0.88",
             "overload" : "0",
-            "utf8" : "0"
+            "utf8" : "0",
+            "version" : "0.88"
          }
       }
    },
    "provides" : {
       "CPAN::Meta" : {
          "file" : "lib/CPAN/Meta.pm",
-         "version" : "2.141170"
+         "version" : "2.142060"
       },
       "CPAN::Meta::Converter" : {
          "file" : "lib/CPAN/Meta/Converter.pm",
-         "version" : "2.141170"
+         "version" : "2.142060"
       },
       "CPAN::Meta::Feature" : {
          "file" : "lib/CPAN/Meta/Feature.pm",
-         "version" : "2.141170"
+         "version" : "2.142060"
       },
       "CPAN::Meta::History" : {
          "file" : "lib/CPAN/Meta/History.pm",
-         "version" : "2.141170"
+         "version" : "2.142060"
+      },
+      "CPAN::Meta::Merge" : {
+         "file" : "lib/CPAN/Meta/Merge.pm",
+         "version" : "2.142060"
       },
       "CPAN::Meta::Prereqs" : {
          "file" : "lib/CPAN/Meta/Prereqs.pm",
-         "version" : "2.141170"
+         "version" : "2.142060"
       },
       "CPAN::Meta::Spec" : {
          "file" : "lib/CPAN/Meta/Spec.pm",
-         "version" : "2.141170"
+         "version" : "2.142060"
       },
       "CPAN::Meta::Validator" : {
          "file" : "lib/CPAN/Meta/Validator.pm",
-         "version" : "2.141170"
+         "version" : "2.142060"
       }
    },
    "release_status" : "stable",
@@ -128,7 +136,7 @@
          "web" : "https://github.com/Perl-Toolchain-Gang/CPAN-Meta";
       }
    },
-   "version" : "2.141170",
+   "version" : "2.142060",
    "x_authority" : "cpan:DAGOLDEN",
    "x_contributors" : [
       "Ansgar Burchardt <[email protected]>",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/META.yml 
new/CPAN-Meta-2.142060/META.yml
--- old/CPAN-Meta-2.141170/META.yml     2014-04-27 19:03:49.000000000 +0200
+++ new/CPAN-Meta-2.142060/META.yml     2014-07-25 19:30:29.000000000 +0200
@@ -12,13 +12,15 @@
   File::Temp: '0.20'
   IO::Dir: '0'
   List::Util: '0'
+  Scalar::Util: '0'
   Test::More: '0.88'
   overload: '0'
   utf8: '0'
+  version: '0.88'
 configure_requires:
   ExtUtils::MakeMaker: '6.17'
 dynamic_config: 0
-generated_by: 'Dist::Zilla version 5.015, CPAN::Meta::Converter version 
2.140640'
+generated_by: 'Dist::Zilla version 5.019, CPAN::Meta::Converter version 
2.141170'
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -36,25 +38,28 @@
 provides:
   CPAN::Meta:
     file: lib/CPAN/Meta.pm
-    version: '2.141170'
+    version: '2.142060'
   CPAN::Meta::Converter:
     file: lib/CPAN/Meta/Converter.pm
-    version: '2.141170'
+    version: '2.142060'
   CPAN::Meta::Feature:
     file: lib/CPAN/Meta/Feature.pm
-    version: '2.141170'
+    version: '2.142060'
   CPAN::Meta::History:
     file: lib/CPAN/Meta/History.pm
-    version: '2.141170'
+    version: '2.142060'
+  CPAN::Meta::Merge:
+    file: lib/CPAN/Meta/Merge.pm
+    version: '2.142060'
   CPAN::Meta::Prereqs:
     file: lib/CPAN/Meta/Prereqs.pm
-    version: '2.141170'
+    version: '2.142060'
   CPAN::Meta::Spec:
     file: lib/CPAN/Meta/Spec.pm
-    version: '2.141170'
+    version: '2.142060'
   CPAN::Meta::Validator:
     file: lib/CPAN/Meta/Validator.pm
-    version: '2.141170'
+    version: '2.142060'
 requires:
   CPAN::Meta::Requirements: '2.121'
   CPAN::Meta::YAML: '0.008'
@@ -70,7 +75,7 @@
   bugtracker: https://github.com/Perl-Toolchain-Gang/CPAN-Meta/issues
   homepage: https://github.com/Perl-Toolchain-Gang/CPAN-Meta
   repository: https://github.com/Perl-Toolchain-Gang/CPAN-Meta.git
-version: '2.141170'
+version: '2.142060'
 x_authority: cpan:DAGOLDEN
 x_contributors:
   - 'Ansgar Burchardt <[email protected]>'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/Makefile.PL 
new/CPAN-Meta-2.142060/Makefile.PL
--- old/CPAN-Meta-2.141170/Makefile.PL  2014-04-27 19:03:49.000000000 +0200
+++ new/CPAN-Meta-2.142060/Makefile.PL  2014-07-25 19:30:29.000000000 +0200
@@ -1,5 +1,5 @@
 
-# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker 
v5.015.
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker 
v5.019.
 use strict;
 use warnings;
 
@@ -12,7 +12,6 @@
 my %WriteMakefileArgs = (
   "ABSTRACT" => "the distribution metadata for a CPAN dist",
   "AUTHOR" => "David Golden <dagolden\@cpan.org>, Ricardo Signes 
<rjbs\@cpan.org>",
-  "BUILD_REQUIRES" => {},
   "CONFIGURE_REQUIRES" => {
     "ExtUtils::MakeMaker" => "6.17"
   },
@@ -40,11 +39,13 @@
     "File::Temp" => "0.20",
     "IO::Dir" => 0,
     "List::Util" => 0,
+    "Scalar::Util" => 0,
     "Test::More" => "0.88",
     "overload" => 0,
-    "utf8" => 0
+    "utf8" => 0,
+    "version" => "0.88"
   },
-  "VERSION" => "2.141170",
+  "VERSION" => "2.142060",
   "test" => {
     "TESTS" => "t/*.t"
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/README 
new/CPAN-Meta-2.142060/README
--- old/CPAN-Meta-2.141170/README       2014-04-27 19:03:49.000000000 +0200
+++ new/CPAN-Meta-2.142060/README       2014-07-25 19:30:29.000000000 +0200
@@ -2,7 +2,7 @@
     CPAN::Meta - the distribution metadata for a CPAN dist
 
 VERSION
-    version 2.141170
+    version 2.142060
 
 SYNOPSIS
         use v5.10;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/cpanfile 
new/CPAN-Meta-2.142060/cpanfile
--- old/CPAN-Meta-2.141170/cpanfile     2014-04-27 19:03:49.000000000 +0200
+++ new/CPAN-Meta-2.142060/cpanfile     2014-07-25 19:30:29.000000000 +0200
@@ -18,13 +18,16 @@
   requires "File::Temp" => "0.20";
   requires "IO::Dir" => "0";
   requires "List::Util" => "0";
+  requires "Scalar::Util" => "0";
   requires "Test::More" => "0.88";
   requires "overload" => "0";
   requires "utf8" => "0";
+  requires "version" => "0.88";
 };
 
 on 'test' => sub {
   recommends "CPAN::Meta" => "0";
+  recommends "CPAN::Meta::Prereqs" => "0";
   recommends "CPAN::Meta::Requirements" => "2.120900";
 };
 
@@ -33,7 +36,7 @@
 };
 
 on 'develop' => sub {
-  requires "Dist::Zilla" => "5.015";
+  requires "Dist::Zilla" => "5";
   requires "Dist::Zilla::Plugin::AutoVersion" => "0";
   requires "Dist::Zilla::Plugin::MakeMaker" => "0";
   requires "Dist::Zilla::Plugin::MakeMaker::Highlander" => "0.003";
@@ -49,4 +52,5 @@
   requires "Test::More" => "0";
   requires "Test::Pod" => "1.41";
   requires "Test::Pod::Coverage" => "1.08";
+  requires "Test::Spelling" => "0.12";
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/lib/CPAN/Meta/Converter.pm 
new/CPAN-Meta-2.142060/lib/CPAN/Meta/Converter.pm
--- old/CPAN-Meta-2.141170/lib/CPAN/Meta/Converter.pm   2014-04-27 
19:03:49.000000000 +0200
+++ new/CPAN-Meta-2.142060/lib/CPAN/Meta/Converter.pm   2014-07-25 
19:30:29.000000000 +0200
@@ -2,7 +2,7 @@
 use strict;
 use warnings;
 package CPAN::Meta::Converter;
-our $VERSION = '2.141170'; # VERSION
+our $VERSION = '2.142060'; # VERSION
 
 #pod =head1 SYNOPSIS
 #pod
@@ -741,12 +741,15 @@
 }
 
 sub _convert {
-  my ($data, $spec, $to_version) = @_;
+  my ($data, $spec, $to_version, $is_fragment) = @_;
 
   my $new_data = {};
   for my $key ( keys %$spec ) {
     next if $key eq ':custom' || $key eq ':drop';
     next unless my $fcn = $spec->{$key};
+    if ( $is_fragment && $key eq 'generated_by' ) {
+      $fcn = \&_keep;
+    }
     die "spec for '$key' is not a coderef"
       unless ref $fcn && ref $fcn eq 'CODE';
     my $new_value = $fcn->($data->{$key}, $key, $data, $to_version);
@@ -1384,13 +1387,14 @@
   my $args = { %args };
 
   my $new_version = $args->{version} || $HIGHEST;
+  my $is_fragment = $args->{is_fragment};
 
   my ($old_version) = $self->{spec};
   my $converted = _dclone($self->{data});
 
   if ( $old_version == $new_version ) {
-    $converted = _convert( $converted, $cleanup{$old_version}, $old_version );
-    unless ( $args->{no_validation} ) {
+    $converted = _convert( $converted, $cleanup{$old_version}, $old_version, 
$is_fragment );
+    unless ( $args->{is_fragment} ) {
       my $cmv = CPAN::Meta::Validator->new( $converted );
       unless ( $cmv->is_valid ) {
         my $errs = join("\n", $cmv->errors);
@@ -1405,8 +1409,8 @@
       next if $vers[$i] > $old_version;
       last if $vers[$i+1] < $new_version;
       my $spec_string = "$vers[$i+1]-from-$vers[$i]";
-      $converted = _convert( $converted, $down_convert{$spec_string}, 
$vers[$i+1] );
-      unless ( $args->{no_validation} ) {
+      $converted = _convert( $converted, $down_convert{$spec_string}, 
$vers[$i+1], $is_fragment );
+      unless ( $args->{is_fragment} ) {
         my $cmv = CPAN::Meta::Validator->new( $converted );
         unless ( $cmv->is_valid ) {
           my $errs = join("\n", $cmv->errors);
@@ -1422,8 +1426,8 @@
       next if $vers[$i] < $old_version;
       last if $vers[$i+1] > $new_version;
       my $spec_string = "$vers[$i+1]-from-$vers[$i]";
-      $converted = _convert( $converted, $up_convert{$spec_string}, 
$vers[$i+1] );
-      unless ( $args->{no_validation} ) {
+      $converted = _convert( $converted, $up_convert{$spec_string}, 
$vers[$i+1], $is_fragment );
+      unless ( $args->{is_fragment} ) {
         my $cmv = CPAN::Meta::Validator->new( $converted );
         unless ( $cmv->is_valid ) {
           my $errs = join("\n", $cmv->errors);
@@ -1453,7 +1457,7 @@
     grep { defined }
     map { $fragments_generate{$old_version}{$_} }
     keys %{ $self->{data} };
-  my $converted = $self->convert( version => $HIGHEST, no_validation => 1 );
+  my $converted = $self->convert( version => $HIGHEST, is_fragment => 1 );
   for my $key ( keys %$converted ) {
     next if $key =~ /^x_/i || $key eq 'meta-spec';
     delete $converted->{$key} unless $expected{$key};
@@ -1475,7 +1479,7 @@
 
 =head1 VERSION
 
-version 2.141170
+version 2.142060
 
 =head1 SYNOPSIS
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/lib/CPAN/Meta/Feature.pm 
new/CPAN-Meta-2.142060/lib/CPAN/Meta/Feature.pm
--- old/CPAN-Meta-2.141170/lib/CPAN/Meta/Feature.pm     2014-04-27 
19:03:49.000000000 +0200
+++ new/CPAN-Meta-2.142060/lib/CPAN/Meta/Feature.pm     2014-07-25 
19:30:29.000000000 +0200
@@ -2,7 +2,7 @@
 use strict;
 use warnings;
 package CPAN::Meta::Feature;
-our $VERSION = '2.141170'; # VERSION
+our $VERSION = '2.142060'; # VERSION
 
 use CPAN::Meta::Prereqs;
 
@@ -78,7 +78,7 @@
 
 =head1 VERSION
 
-version 2.141170
+version 2.142060
 
 =head1 DESCRIPTION
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/lib/CPAN/Meta/History.pm 
new/CPAN-Meta-2.142060/lib/CPAN/Meta/History.pm
--- old/CPAN-Meta-2.141170/lib/CPAN/Meta/History.pm     2014-04-27 
19:03:49.000000000 +0200
+++ new/CPAN-Meta-2.142060/lib/CPAN/Meta/History.pm     2014-07-25 
19:30:29.000000000 +0200
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 package CPAN::Meta::History;
-our $VERSION = '2.141170'; # VERSION
+our $VERSION = '2.142060'; # VERSION
 
 1;
 
@@ -21,7 +21,7 @@
 
 =head1 VERSION
 
-version 2.141170
+version 2.142060
 
 =head1 DESCRIPTION
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/lib/CPAN/Meta/Merge.pm 
new/CPAN-Meta-2.142060/lib/CPAN/Meta/Merge.pm
--- old/CPAN-Meta-2.141170/lib/CPAN/Meta/Merge.pm       1970-01-01 
01:00:00.000000000 +0100
+++ new/CPAN-Meta-2.142060/lib/CPAN/Meta/Merge.pm       2014-07-25 
19:30:29.000000000 +0200
@@ -0,0 +1,248 @@
+package CPAN::Meta::Merge;
+
+use strict;
+use warnings;
+
+our $VERSION = '2.142060'; # VERSION
+
+use Carp qw/croak/;
+use Scalar::Util qw/blessed/;
+use CPAN::Meta::Converter;
+
+sub _identical {
+  my ($left, $right, $path) = @_;
+  croak "Can't merge attribute " . join '.', @{$path} unless $left eq $right;
+  return $left;
+}
+
+sub _merge {
+  my ($current, $next, $mergers, $path) = @_;
+  for my $key (keys %{$next}) {
+    if (not exists $current->{$key}) {
+      $current->{$key} = $next->{$key};
+    }
+    elsif (my $merger = $mergers->{$key}) {
+      $current->{$key} = $merger->($current->{$key}, $next->{$key}, [ 
@{$path}, $key ]);
+    }
+    elsif ($merger = $mergers->{':default'}) {
+      $current->{$key} = $merger->($current->{$key}, $next->{$key}, [ 
@{$path}, $key ]);
+    }
+    else {
+      croak sprintf "Can't merge unknown attribute '%s'", join '.', @{$path}, 
$key;
+    }
+  }
+  return $current;
+}
+
+sub _uniq {
+  my %seen = ();
+  return grep { not $seen{$_}++ } @_;
+}
+
+sub _set_addition {
+  my ($left, $right) = @_;
+  return [ +_uniq(@{$left}, @{$right}) ];
+}
+
+sub _uniq_map {
+  my ($left, $right, $path) = @_;
+  for my $key (keys %{$right}) {
+    if (not exists $left->{$key}) {
+      $left->{$key} = $right->{$key};
+    }
+    else {
+      croak 'Duplication of element ' . join '.', @{$path}, $key;
+    }
+  }
+  return $left;
+}
+
+sub _improvize {
+  my ($left, $right, $path) = @_;
+  my ($name) = reverse @{$path};
+  if ($name =~ /^x_/) {
+    if (ref($left) eq 'ARRAY') {
+      return _set_addition($left, $right, $path);
+    }
+    elsif (ref($left) eq 'HASH') {
+      return _uniq_map($left, $right, $path);
+    }
+    else {
+      return _identical($left, $right, $path);
+    }
+  }
+  croak sprintf "Can't merge '%s'", join '.', @{$path};
+}
+
+my %default = (
+  abstract       => \&_identical,
+  author         => \&_set_addition,
+  dynamic_config => sub {
+    my ($left, $right) = @_;
+    return $left || $right;
+  },
+  generated_by => sub {
+    my ($left, $right) = @_;
+    return join ', ', _uniq(split(/, /, $left), split(/, /, $right));
+  },
+  license     => \&_set_addition,
+  'meta-spec' => {
+    version => \&_identical,
+    url     => \&_identical
+  },
+  name              => \&_identical,
+  release_status    => \&_identical,
+  version           => \&_identical,
+  description       => \&_identical,
+  keywords          => \&_set_addition,
+  no_index          => { map { ($_ => \&_set_addition) } qw/file directory 
package namespace/ },
+  optional_features => \&_uniq_map,
+  prereqs           => sub {
+    require CPAN::Meta::Prereqs;
+    my ($left, $right) = map { CPAN::Meta::Prereqs->new($_) } @_[0,1];
+    return $left->with_merged_prereqs($right)->as_string_hash;
+  },
+  provides  => \&_uniq_map,
+  resources => {
+    license    => \&_set_addition,
+    homepage   => \&_identical,
+    bugtracker => \&_uniq_map,
+    repository => \&_uniq_map,
+    ':default' => \&_improvize,
+  },
+  ':default' => \&_improvize,
+);
+
+sub new {
+  my ($class, %arguments) = @_;
+  croak 'default version required' if not exists $arguments{default_version};
+  my %mapping = %default;
+  my %extra = %{ $arguments{extra_mappings} || {} };
+  for my $key (keys %extra) {
+    if (ref($mapping{$key}) eq 'HASH') {
+      $mapping{$key} = { %{ $mapping{$key} }, %{ $extra{$key} } };
+    }
+    else {
+      $mapping{$key} = $extra{$key};
+    }
+  }
+  return bless {
+    default_version => $arguments{default_version},
+    mapping => _coerce_mapping(\%mapping, []),
+  }, $class;
+}
+
+my %coderef_for = (
+  set_addition => \&_set_addition,
+  uniq_map     => \&_uniq_map,
+  identical    => \&_identical,
+  improvize    => \&_improvize,
+);
+
+sub _coerce_mapping {
+  my ($orig, $map_path) = @_;
+  my %ret;
+  for my $key (keys %{$orig}) {
+    my $value = $orig->{$key};
+    if (ref($orig->{$key}) eq 'CODE') {
+      $ret{$key} = $value;
+    }
+    elsif (ref($value) eq 'HASH') {
+      my $mapping = _coerce_mapping($value, [ @{$map_path}, $key ]);
+      $ret{$key} = sub {
+        my ($left, $right, $path) = @_;
+        return _merge($left, $right, $mapping, [ @{$path}, $key ]);
+      };
+    }
+    elsif ($coderef_for{$value}) {
+      $ret{$key} = $coderef_for{$value};
+    }
+    else {
+      croak "Don't know what to do with " . join '.', @{$map_path}, $key;
+    }
+  }
+  return \%ret;
+}
+
+sub merge {
+  my ($self, @items) = @_;
+  my $current = {};
+  for my $next (@items) {
+    if ( blessed($next) && $next->isa('CPAN::Meta') ) {
+      $next = $next->as_string_hash;
+    }
+    elsif ( ref($next) eq 'HASH' ) {
+      my $cmc = CPAN::Meta::Converter->new(
+        $next, default_version => $self->{default_version}
+      );
+      $next = $cmc->upgrade_fragment;
+    }
+    else {
+      croak "Don't know how to merge '$next'";
+    }
+    $current = _merge($current, $next, $self->{mapping}, []);
+  }
+  return $current;
+}
+
+1;
+
+# ABSTRACT: Merging CPAN Meta fragments
+
+__END__
+
+=pod
+
+=encoding UTF-8
+
+=head1 NAME
+
+CPAN::Meta::Merge - Merging CPAN Meta fragments
+
+=head1 VERSION
+
+version 2.142060
+
+=head1 SYNOPSIS
+
+ my $merger = CPAN::Meta::Merge->new(default_version => "2");
+ my $meta = $merger->merge($base, @additional);
+
+=head1 DESCRIPTION
+
+=head1 METHODS
+
+=head2 new
+
+This creates a CPAN::Meta::Merge object. It takes one mandatory named
+argument, C<version>, declaring the version of the meta-spec that must be
+used for the merge. It can optionally take an C<extra_mappings> argument
+that allows one to add additional merging functions for specific elements.
+
+=head2 merge(@fragments)
+
+Merge all C<@fragments> together. It will accept both CPAN::Meta objects and
+(possibly incomplete) hashrefs of metadata.
+
+=head1 AUTHORS
+
+=over 4
+
+=item *
+
+David Golden <[email protected]>
+
+=item *
+
+Ricardo Signes <[email protected]>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by David Golden and Ricardo Signes.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/lib/CPAN/Meta/Prereqs.pm 
new/CPAN-Meta-2.142060/lib/CPAN/Meta/Prereqs.pm
--- old/CPAN-Meta-2.141170/lib/CPAN/Meta/Prereqs.pm     2014-04-27 
19:03:49.000000000 +0200
+++ new/CPAN-Meta-2.142060/lib/CPAN/Meta/Prereqs.pm     2014-07-25 
19:30:29.000000000 +0200
@@ -2,7 +2,7 @@
 use strict;
 use warnings;
 package CPAN::Meta::Prereqs;
-our $VERSION = '2.141170'; # VERSION
+our $VERSION = '2.142060'; # VERSION
 
 #pod =head1 DESCRIPTION
 #pod
@@ -286,7 +286,7 @@
 
 =head1 VERSION
 
-version 2.141170
+version 2.142060
 
 =head1 DESCRIPTION
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/lib/CPAN/Meta/Spec.pm 
new/CPAN-Meta-2.142060/lib/CPAN/Meta/Spec.pm
--- old/CPAN-Meta-2.141170/lib/CPAN/Meta/Spec.pm        2014-04-27 
19:03:49.000000000 +0200
+++ new/CPAN-Meta-2.142060/lib/CPAN/Meta/Spec.pm        2014-07-25 
19:30:29.000000000 +0200
@@ -7,7 +7,7 @@
 use strict;
 use warnings;
 package CPAN::Meta::Spec;
-our $VERSION = '2.141170'; # VERSION
+our $VERSION = '2.142060'; # VERSION
 
 1;
 
@@ -28,7 +28,7 @@
 
 =head1 VERSION
 
-version 2.141170
+version 2.142060
 
 =head1 SYNOPSIS
 
@@ -696,7 +696,8 @@
 
 This field is required.  It must contain a Unix-style relative file path
 from the root of the distribution directory to a file that contains or
-generates the package.
+generates the package.  It may be given as C<META.yml> or C<META.json>
+to claim a package for indexing without needing a C<*.pm>.
 
 =item version
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/lib/CPAN/Meta/Validator.pm 
new/CPAN-Meta-2.142060/lib/CPAN/Meta/Validator.pm
--- old/CPAN-Meta-2.141170/lib/CPAN/Meta/Validator.pm   2014-04-27 
19:03:49.000000000 +0200
+++ new/CPAN-Meta-2.142060/lib/CPAN/Meta/Validator.pm   2014-07-25 
19:30:29.000000000 +0200
@@ -2,7 +2,7 @@
 use strict;
 use warnings;
 package CPAN::Meta::Validator;
-our $VERSION = '2.141170'; # VERSION
+our $VERSION = '2.142060'; # VERSION
 
 #pod =head1 SYNOPSIS
 #pod
@@ -997,7 +997,7 @@
 
 =head1 VERSION
 
-version 2.141170
+version 2.142060
 
 =head1 SYNOPSIS
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/lib/CPAN/Meta.pm 
new/CPAN-Meta-2.142060/lib/CPAN/Meta.pm
--- old/CPAN-Meta-2.141170/lib/CPAN/Meta.pm     2014-04-27 19:03:49.000000000 
+0200
+++ new/CPAN-Meta-2.142060/lib/CPAN/Meta.pm     2014-07-25 19:30:29.000000000 
+0200
@@ -2,7 +2,7 @@
 use strict;
 use warnings;
 package CPAN::Meta;
-our $VERSION = '2.141170'; # VERSION
+our $VERSION = '2.142060'; # VERSION
 
 #pod =head1 SYNOPSIS
 #pod
@@ -641,7 +641,7 @@
 
 =head1 VERSION
 
-version 2.141170
+version 2.142060
 
 =head1 SYNOPSIS
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/t/00-report-prereqs.dd 
new/CPAN-Meta-2.142060/t/00-report-prereqs.dd
--- old/CPAN-Meta-2.141170/t/00-report-prereqs.dd       1970-01-01 
01:00:00.000000000 +0100
+++ new/CPAN-Meta-2.142060/t/00-report-prereqs.dd       2014-07-25 
19:30:29.000000000 +0200
@@ -0,0 +1,66 @@
+do { my $x = {
+       'configure' => {
+                        'requires' => {
+                                        'ExtUtils::MakeMaker' => '6.17'
+                                      }
+                      },
+       'develop' => {
+                      'requires' => {
+                                      'Dist::Zilla' => '5',
+                                      'Dist::Zilla::Plugin::AutoVersion' => 
'0',
+                                      'Dist::Zilla::Plugin::MakeMaker' => '0',
+                                      
'Dist::Zilla::Plugin::MakeMaker::Highlander' => '0.003',
+                                      'Dist::Zilla::Plugin::OnlyCorePrereqs' 
=> '0.013',
+                                      'Dist::Zilla::Plugin::Prereqs' => '0',
+                                      'Dist::Zilla::PluginBundle::DAGOLDEN' => 
'0.053',
+                                      'File::Spec' => '0',
+                                      'File::Temp' => '0',
+                                      'IO::Handle' => '0',
+                                      'IPC::Open3' => '0',
+                                      'Pod::Coverage::TrustPod' => '0',
+                                      'Test::CPAN::Meta' => '0',
+                                      'Test::More' => '0',
+                                      'Test::Pod' => '1.41',
+                                      'Test::Pod::Coverage' => '1.08',
+                                      'Test::Spelling' => '0.12'
+                                    }
+                    },
+       'runtime' => {
+                      'requires' => {
+                                      'CPAN::Meta::Requirements' => '2.121',
+                                      'CPAN::Meta::YAML' => '0.008',
+                                      'Carp' => '0',
+                                      'JSON::PP' => '2.27200',
+                                      'Parse::CPAN::Meta' => '1.4414',
+                                      'Scalar::Util' => '0',
+                                      'perl' => '5.008',
+                                      'strict' => '0',
+                                      'version' => '0.88',
+                                      'warnings' => '0'
+                                    }
+                    },
+       'test' => {
+                   'recommends' => {
+                                     'CPAN::Meta' => '0',
+                                     'CPAN::Meta::Prereqs' => '0',
+                                     'CPAN::Meta::Requirements' => '2.120900'
+                                   },
+                   'requires' => {
+                                   'Data::Dumper' => '0',
+                                   'ExtUtils::MakeMaker' => '0',
+                                   'File::Basename' => '0',
+                                   'File::Spec' => '0',
+                                   'File::Spec::Functions' => '0',
+                                   'File::Temp' => '0.20',
+                                   'IO::Dir' => '0',
+                                   'List::Util' => '0',
+                                   'Scalar::Util' => '0',
+                                   'Test::More' => '0.88',
+                                   'overload' => '0',
+                                   'utf8' => '0',
+                                   'version' => '0.88'
+                                 }
+                 }
+     };
+  $x;
+ }
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/t/00-report-prereqs.t 
new/CPAN-Meta-2.142060/t/00-report-prereqs.t
--- old/CPAN-Meta-2.141170/t/00-report-prereqs.t        2014-04-27 
19:03:49.000000000 +0200
+++ new/CPAN-Meta-2.142060/t/00-report-prereqs.t        2014-07-25 
19:30:29.000000000 +0200
@@ -3,18 +3,20 @@
 use strict;
 use warnings;
 
-# This test was generated by Dist::Zilla::Plugin::Test::ReportPrereqs 0.013
+# This test was generated by Dist::Zilla::Plugin::Test::ReportPrereqs 0.014
 
 use Test::More tests => 1;
 
 use ExtUtils::MakeMaker;
 use File::Spec::Functions;
-use List::Util qw/max/;
+use List::Util qw/max first/;
+use Scalar::Util qw/blessed/;
 use version;
 
 # hide optional CPAN::Meta modules from prereq scanner
 # and check if they are available
 my $cpan_meta = "CPAN::Meta";
+my $cpan_meta_pre = "CPAN::Meta::Prereqs";
 my $cpan_meta_req = "CPAN::Meta::Requirements";
 my $HAS_CPAN_META = eval "require $cpan_meta"; ## no critic
 my $HAS_CPAN_META_REQ = eval "require $cpan_meta_req; 
$cpan_meta_req->VERSION('2.120900')";
@@ -22,173 +24,139 @@
 # Verify requirements?
 my $DO_VERIFY_PREREQS = 1;
 
-sub _merge_requires {
+sub _merge_prereqs {
     my ($collector, $prereqs) = @_;
-    for my $phase ( qw/configure build test runtime develop/ ) {
-        next unless exists $prereqs->{$phase};
-        if ( my $req = $prereqs->{$phase}{'requires'} ) {
-            my $cmr = CPAN::Meta::Requirements->from_string_hash( $req );
-            $collector->add_requirements( $cmr );
+
+    # CPAN::Meta::Prereqs object
+    if (blessed $collector eq $cpan_meta_pre) {
+        return $collector->with_merged_prereqs(
+            CPAN::Meta::Prereqs->new( $prereqs )
+        );
+    }
+
+    # Raw hashrefs
+    for my $phase ( keys %$prereqs ) {
+        for my $type ( keys %{ $prereqs->{$phase} } ) {
+            for my $module ( keys %{ $prereqs->{$phase}{$type} } ) {
+                $collector->{$phase}{$type}{$module} = 
$prereqs->{$phase}{$type}{$module};
+            }
         }
     }
+
+    return $collector;
 }
 
-my %include = map {; $_ => 1 } qw(
+my @include = qw(
 
 );
 
-my %exclude = map {; $_ => 1 } qw(
+my @exclude = qw(
 
 );
 
 # Add static prereqs to the included modules list
-my $static_prereqs = do { my $x = {
-       'configure' => {
-                        'requires' => {
-                                        'ExtUtils::MakeMaker' => '6.17'
-                                      }
-                      },
-       'develop' => {
-                      'requires' => {
-                                      'Dist::Zilla' => '5.015',
-                                      'Dist::Zilla::Plugin::AutoVersion' => 
'0',
-                                      'Dist::Zilla::Plugin::MakeMaker' => '0',
-                                      
'Dist::Zilla::Plugin::MakeMaker::Highlander' => '0.003',
-                                      'Dist::Zilla::Plugin::OnlyCorePrereqs' 
=> '0.013',
-                                      'Dist::Zilla::Plugin::Prereqs' => '0',
-                                      'Dist::Zilla::PluginBundle::DAGOLDEN' => 
'0.053',
-                                      'File::Spec' => '0',
-                                      'File::Temp' => '0',
-                                      'IO::Handle' => '0',
-                                      'IPC::Open3' => '0',
-                                      'Pod::Coverage::TrustPod' => '0',
-                                      'Test::CPAN::Meta' => '0',
-                                      'Test::More' => '0',
-                                      'Test::Pod' => '1.41',
-                                      'Test::Pod::Coverage' => '1.08'
-                                    }
-                    },
-       'runtime' => {
-                      'requires' => {
-                                      'CPAN::Meta::Requirements' => '2.121',
-                                      'CPAN::Meta::YAML' => '0.008',
-                                      'Carp' => '0',
-                                      'JSON::PP' => '2.27200',
-                                      'Parse::CPAN::Meta' => '1.4414',
-                                      'Scalar::Util' => '0',
-                                      'perl' => '5.008',
-                                      'strict' => '0',
-                                      'version' => '0.88',
-                                      'warnings' => '0'
-                                    }
-                    },
-       'test' => {
-                   'recommends' => {
-                                     'CPAN::Meta' => '0',
-                                     'CPAN::Meta::Requirements' => '2.120900'
-                                   },
-                   'requires' => {
-                                   'Data::Dumper' => '0',
-                                   'ExtUtils::MakeMaker' => '0',
-                                   'File::Basename' => '0',
-                                   'File::Spec' => '0',
-                                   'File::Spec::Functions' => '0',
-                                   'File::Temp' => '0.20',
-                                   'IO::Dir' => '0',
-                                   'List::Util' => '0',
-                                   'Test::More' => '0.88',
-                                   'overload' => '0',
-                                   'utf8' => '0'
-                                 }
-                 }
-     };
-  $x;
- };
-
-delete $static_prereqs->{develop} if not $ENV{AUTHOR_TESTING};
-$include{$_} = 1 for map { keys %$_ } map { values %$_ } values 
%$static_prereqs;
-
-# Merge requirements for major phases (if we can)
-my $all_requires;
-if ( $DO_VERIFY_PREREQS && $HAS_CPAN_META_REQ ) {
-    $all_requires = $cpan_meta_req->new;
-    _merge_requires($all_requires, $static_prereqs);
+my $static_prereqs = do 't/00-report-prereqs.dd';
+
+### XXX: Assume these are Runtime Requires
+my $static_prereqs_requires = $static_prereqs->{runtime}{requires};
+for my $mod (@include) {
+    $static_prereqs_requires->{$mod} = 0 unless exists 
$static_prereqs_requires->{$mod};
 }
 
+# Merge all prereqs (either with ::Prereqs or a hashref)
+my $full_prereqs = _merge_prereqs(
+    ( $HAS_CPAN_META ? $cpan_meta_pre->new : {} ),
+    $static_prereqs
+);
 
 # Add dynamic prereqs to the included modules list (if we can)
-my ($source) = grep { -f } 'MYMETA.json', 'MYMETA.yml';
+my $source = first { -f } 'MYMETA.json', 'MYMETA.yml';
 if ( $source && $HAS_CPAN_META ) {
-  if ( my $meta = eval { CPAN::Meta->load_file($source) } ) {
-    my $dynamic_prereqs = $meta->prereqs;
-    delete $dynamic_prereqs->{develop} if not $ENV{AUTHOR_TESTING};
-    $include{$_} = 1 for map { keys %$_ } map { values %$_ } values 
%$dynamic_prereqs;
-
-    if ( $DO_VERIFY_PREREQS && $HAS_CPAN_META_REQ ) {
-        _merge_requires($all_requires, $dynamic_prereqs);
+    if ( my $meta = eval { CPAN::Meta->load_file($source) } ) {
+        $full_prereqs = _merge_prereqs($full_prereqs, $meta->prereqs);
     }
-  }
 }
 else {
-  $source = 'static metadata';
+    $source = 'static metadata';
 }
 
-my @modules = sort grep { ! $exclude{$_} } keys %include;
-my @reports = [qw/Version Module/];
+my @full_reports;
 my @dep_errors;
-my $req_hash = defined($all_requires) ? $all_requires->as_string_hash : {};
+my $req_hash = $HAS_CPAN_META ? $full_prereqs->as_string_hash : $full_prereqs;
 
-for my $mod ( @modules ) {
-  next if $mod eq 'perl';
-  my $file = $mod;
-  $file =~ s{::}{/}g;
-  $file .= ".pm";
-  my ($prefix) = grep { -e catfile($_, $file) } @INC;
-  if ( $prefix ) {
-    my $ver = MM->parse_version( catfile($prefix, $file) );
-    $ver = "undef" unless defined $ver; # Newer MM should do this anyway
-    push @reports, [$ver, $mod];
-
-    if ( $DO_VERIFY_PREREQS && $all_requires ) {
-      my $req = $req_hash->{$mod};
-      if ( defined $req && length $req ) {
-        if ( ! defined eval { version->parse($ver) } ) {
-          push @dep_errors, "$mod version '$ver' cannot be parsed (version 
'$req' required)";
-        }
-        elsif ( ! $all_requires->accepts_module( $mod => $ver ) ) {
-          push @dep_errors, "$mod version '$ver' is not in required range 
'$req'";
+for my $phase ( qw(configure build test runtime develop) ) {
+    next unless $req_hash->{$phase};
+    next if ($phase eq 'develop' and not $ENV{AUTHOR_TESTING});
+
+    for my $type ( qw(requires recommends suggests conflicts) ) {
+        next unless $req_hash->{$phase}{$type};
+
+        my $title = ucfirst($phase).' '.ucfirst($type);
+        my @reports = [qw/Module Want Have/];
+
+        for my $mod ( sort keys %{ $req_hash->{$phase}{$type} } ) {
+            next if $mod eq 'perl';
+            next if first { $_ eq $mod } @exclude;
+
+            my $file = $mod;
+            $file =~ s{::}{/}g;
+            $file .= ".pm";
+            my $prefix = first { -e catfile($_, $file) } @INC;
+
+            my $want = $req_hash->{$phase}{$type}{$mod};
+            $want = "undef" unless defined $want;
+            $want = "any" if !$want && $want == 0;
+
+            my $req_string = $want eq 'any' ? 'any version required' : 
"version '$want' required";
+
+            if ($prefix) {
+                my $have = MM->parse_version( catfile($prefix, $file) );
+                $have = "undef" unless defined $have;
+                push @reports, [$mod, $want, $have];
+
+                if ( $DO_VERIFY_PREREQS && $type eq 'requires' ) {
+                    if ( ! defined eval { version->parse($have) } ) {
+                        push @dep_errors, "$mod version '$have' cannot be 
parsed ($req_string)";
+                    }
+                    elsif ( ! $full_prereqs->requirements_for( $phase, $type 
)->accepts_module( $mod => $have ) ) {
+                        push @dep_errors, "$mod version '$have' is not in 
required range '$want'";
+                    }
+                }
+            }
+            else {
+                push @reports, [$mod, $want, "missing"];
+
+                if ( $DO_VERIFY_PREREQS && $type eq 'requires' ) {
+                    push @dep_errors, "$mod is not installed ($req_string)";
+                }
+            }
         }
-      }
-    }
 
-  }
-  else {
-    push @reports, ["missing", $mod];
-
-    if ( $DO_VERIFY_PREREQS && $all_requires ) {
-      my $req = $req_hash->{$mod};
-      if ( defined $req && length $req ) {
-        push @dep_errors, "$mod is not installed (version '$req' required)";
-      }
+        if ( @reports ) {
+            push @full_reports, "=== $title ===\n\n";
+
+            my $ml = max map { length $_->[0] } @reports;
+            my $wl = max map { length $_->[1] } @reports;
+            my $hl = max map { length $_->[2] } @reports;
+            splice @reports, 1, 0, ["-" x $ml, "-" x $wl, "-" x $hl];
+
+            push @full_reports, map { sprintf("    %*s %*s %*s\n", -$ml, 
$_->[0], $wl, $_->[1], $hl, $_->[2]) } @reports;
+            push @full_reports, "\n";
+        }
     }
-  }
 }
 
-if ( @reports ) {
-  my $vl = max map { length $_->[0] } @reports;
-  my $ml = max map { length $_->[1] } @reports;
-  splice @reports, 1, 0, ["-" x $vl, "-" x $ml];
-  diag "\nVersions for all modules listed in $source (including optional 
ones):\n",
-    map {sprintf("  %*s %*s\n",$vl,$_->[0],-$ml,$_->[1])} @reports;
+if ( @full_reports ) {
+    diag "\nVersions for all modules listed in $source (including optional 
ones):\n\n", @full_reports;
 }
 
 if ( @dep_errors ) {
-  diag join("\n",
-    "\n*** WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING 
***\n",
-    "The following REQUIRED prerequisites were not satisfied:\n",
-    @dep_errors,
-    "\n"
-  );
+    diag join("\n",
+        "\n*** WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING 
***\n",
+        "The following REQUIRED prerequisites were not satisfied:\n",
+        @dep_errors,
+        "\n"
+    );
 }
 
 pass;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/t/merge.t 
new/CPAN-Meta-2.142060/t/merge.t
--- old/CPAN-Meta-2.141170/t/merge.t    1970-01-01 01:00:00.000000000 +0100
+++ new/CPAN-Meta-2.142060/t/merge.t    2014-07-25 19:30:29.000000000 +0200
@@ -0,0 +1,118 @@
+#! perl
+
+use strict;
+use warnings;
+
+use Test::More;
+use CPAN::Meta::Merge;
+
+my %base = (
+       abstract => 'This is a test',
+       author => ['A.U. Thor'],
+       generated_by => 'Myself',
+       license => [ 'perl_5' ],
+       resources => {
+               license => [ 'http://dev.perl.org/licenses/' ],
+       },
+       prereqs => {
+               runtime => {
+                       requires => {
+                               Foo => '0',
+                       },
+               },
+       },
+       dynamic_config => 0,
+       provides => {
+               Baz => {
+                       file => 'lib/Baz.pm',
+               },
+       },
+       'meta-spec' => {
+               url => "http://search.cpan.org/perldoc?CPAN::Meta::Spec";,
+               version => 2,
+       },
+);
+
+my %first = (
+       author => [ 'I.M. Poster' ],
+       generated_by => 'Some other guy',
+       license => [ 'bsd' ],
+       resources => {
+               license => [ 'http://opensource.org/licenses/bsd-license.php' ],
+       },
+       prereqs => {
+               runtime => {
+                       requires => {
+                               Foo => '< 1',
+                       },
+                       recommends => {
+                               Bar => '3.14',
+                       },
+               },
+               test => {
+                       requires => {
+                               'Test::Bar' => 0,
+                       },
+               },
+       },
+       dynamic_config => 1,
+       provides => {
+               Quz => {
+                       file => 'lib/Quz.pm',
+               },
+       },
+);
+my %first_expected = (
+       abstract => 'This is a test',
+       author => [ 'A.U. Thor', 'I.M. Poster' ],
+       generated_by => 'Myself, Some other guy',
+       license => [ 'perl_5', 'bsd' ],
+       resources => {
+               license => [ 'http://dev.perl.org/licenses/', 
'http://opensource.org/licenses/bsd-license.php' ],
+       },
+       prereqs => {
+               runtime => {
+                       requires => {
+                               Foo => '>= 0, < 1',
+                       },
+                       recommends => {
+                               Bar => '3.14',
+                       },
+               },
+               test => {
+                       requires => {
+                               'Test::Bar' => 0,
+                       },
+               },
+       },
+       provides => {
+               Baz => {
+                       file => 'lib/Baz.pm',
+               },
+               Quz => {
+                       file => 'lib/Quz.pm',
+               },
+       },
+       dynamic_config => 1,
+       'meta-spec' => {
+               url => "http://search.cpan.org/perldoc?CPAN::Meta::Spec";,
+               version => 2,
+       },
+);
+
+my $merger = CPAN::Meta::Merge->new(default_version => '2');
+
+my $first_result = $merger->merge(\%base, \%first);
+
+is_deeply($first_result, \%first_expected, 'First result is as expected');
+
+is_deeply($merger->merge(\%base, { abstract => 'This is a test' }), \%base, 
'Can merge in identical abstract');
+my $failure = eval { $merger->merge(\%base, { abstract => 'And now for 
something else' }) };
+is($failure, undef, 'Trying to merge different author gives an exception');
+like $@, qr/^Can't merge attribute abstract /, 'Exception looks right';
+
+my $failure2 = eval { $merger->merge(\%base, { provides => { Baz => { file => 
'Baz.pm' } } }) };
+is($failure2, undef, 'Trying to merge different author gives an exception');
+like $@, qr/^Duplication of element provides\.Baz /, 'Exception looks right';
+
+done_testing();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/xt/author/00-compile.t 
new/CPAN-Meta-2.142060/xt/author/00-compile.t
--- old/CPAN-Meta-2.141170/xt/author/00-compile.t       2014-04-27 
19:03:49.000000000 +0200
+++ new/CPAN-Meta-2.142060/xt/author/00-compile.t       2014-07-25 
19:30:29.000000000 +0200
@@ -2,9 +2,9 @@
 use strict;
 use warnings;
 
-# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.040
+# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.043
 
-use Test::More  tests => 7 + ($ENV{AUTHOR_TESTING} ? 1 : 0);
+use Test::More  tests => 8 + ($ENV{AUTHOR_TESTING} ? 1 : 0);
 
 
 
@@ -13,6 +13,7 @@
     'CPAN/Meta/Converter.pm',
     'CPAN/Meta/Feature.pm',
     'CPAN/Meta/History.pm',
+    'CPAN/Meta/Merge.pm',
     'CPAN/Meta/Prereqs.pm',
     'CPAN/Meta/Spec.pm',
     'CPAN/Meta/Validator.pm'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CPAN-Meta-2.141170/xt/author/pod-spell.t 
new/CPAN-Meta-2.142060/xt/author/pod-spell.t
--- old/CPAN-Meta-2.141170/xt/author/pod-spell.t        2014-04-27 
19:03:49.000000000 +0200
+++ new/CPAN-Meta-2.142060/xt/author/pod-spell.t        2014-07-25 
19:30:29.000000000 +0200
@@ -2,7 +2,7 @@
 use warnings;
 use Test::More;
 
-# generated by Dist::Zilla::Plugin::Test::PodSpelling 2.006007
+# generated by Dist::Zilla::Plugin::Test::PodSpelling 2.006008
 use Test::Spelling 0.12;
 use Pod::Wordlist;
 
@@ -86,9 +86,10 @@
 lib
 CPAN
 Meta
-History
-Prereqs
 Spec
+History
 Validator
 Converter
 Feature
+Merge
+Prereqs

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to