Dist-Zilla-Plugin-Test-CheckBreaks
view release on metacpan or search on metacpan
lib/Dist/Zilla/Plugin/Test/CheckBreaks.pm view on Meta::CPAN
sub munge_files {
my $self = shift;
# module => filename
require Module::Runtime;
my $modules = +{ map
+($_ => Module::Runtime::module_notional_filename($_)),
$self->conflicts_module };
my $breaks_data = $self->_x_breaks_data;
$self->log_debug('no x_breaks metadata and no conflicts module found to check against: adding no-op test')
if not keys %$breaks_data and not $self->conflicts_module;
my $filename = $self->filename;
my $file = first { $_->name eq $filename } @{ $self->zilla->files };
my $content = $self->fill_in_string(
$file->content,
{
dist => \($self->zilla),
plugin => \$self,
modules => \$modules,
no_forced_deps => \($self->no_forced_deps),
breaks => \$breaks_data,
cmc_prereq => \($self->_cmc_prereq),
test_count => \($self->_test_count),
}
);
$content =~ s/\n\n\z/\n/;
$file->content($content);
return;
}
sub register_prereqs {
my $self = shift;
$self->zilla->register_prereqs(
{
phase => 'test',
type => 'requires',
},
'Test::More' => '0',
);
return if not keys %{ $self->_x_breaks_data };
$self->zilla->register_prereqs(
{
phase => 'test',
type => $self->no_forced_deps ? 'suggests' : 'requires',
},
'CPAN::Meta::Requirements' => '0',
'CPAN::Meta::Check' => $self->_cmc_prereq,
);
}
has _x_breaks_data => (
is => 'ro', isa => 'HashRef[Str]',
init_arg => undef,
lazy => 1,
default => sub {
my $self = shift;
my $breaks_data = $self->zilla->distmeta->{x_breaks};
defined $breaks_data ? $breaks_data : {};
},
);
sub _test_count {
my $self = shift;
# 1 for each conflicts module, or 1 for none
my $test_count = $self->conflicts_module;
++$test_count if not $test_count;
# ...and one for the x_breaks section, even if empty
++$test_count;
return $test_count;
}
__PACKAGE__->meta->make_immutable;
#pod =pod
#pod
#pod =head1 SYNOPSIS
#pod
#pod In your F<dist.ini>:
#pod
#pod [Breaks]
#pod Foo = <= 1.1 ; Foo at 1.1 or lower will break when I am installed
#pod
#pod [Test::CheckBreaks]
#pod conflicts_module = Moose::Conflicts
#pod
#pod =head1 DESCRIPTION
#pod
#pod This is a L<Dist::Zilla> plugin that runs at the
#pod L<gather files|Dist::Zilla::Role::FileGatherer> stage, providing a test file
#pod that runs last in your test suite and checks for conflicting modules, as
#pod indicated by C<x_breaks> in your distribution metadata.
#pod (See the F<t/zzz-check-breaks.t> test in this distribution for an example.)
#pod
#pod C<x_breaks> entries are expected to be
#pod L<version ranges|CPAN::Meta::Spec/Version Ranges>, with one
#pod addition, for backwards compatibility with
#pod L<[Conflicts]|Dist::Zilla::Plugin::Conflicts>: if a bare version number is
#pod specified, it is interpreted as C<< '<= $version' >> (to preserve the intent
#pod that versions at or below the version specified are those considered to be
#pod broken). It is possible that this interpretation will be removed in the
#pod future; almost certainly before C<breaks> becomes a formal part of the meta
#pod specification.
#pod
#pod =head1 CONFIGURATION
#pod
#pod =head2 C<conflicts_module>
#pod
#pod The name of the conflicts module to load and upon which to invoke the C<check_conflicts>
#pod method. Defaults to the name of the main module with 'C<::Conflicts>'
#pod appended, such as what is generated by the
( run in 2.045 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )