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 - coolo@suse.com + +- 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 <rjbs@cpan.org>" ], "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 <ansgar@cpan.org>", 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 <ansgar@cpan.org>' 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 <dagolden@cpan.org> + +=item * + +Ricardo Signes <rjbs@cpan.org> + +=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: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org