Dist-Zilla-PluginBundle-Git-VersionManager

 view release on metacpan or  search on metacpan

lib/Dist/Zilla/PluginBundle/Git/VersionManager.pm  view on Meta::CPAN

    is => 'ro',
    isa => 'Bool',
    init_arg => undef,
    lazy => 1,
    default => sub { $_[0]->payload->{bump_only_matching_versions} },
);

has changes_version_columns => (
    is => 'ro', isa => subtype('Int', where { $_ > 0 && $_ < 20 }),
    init_arg => undef,
    lazy => 1,
    default => sub { $_[0]->payload->{changes_version_columns} // 10 },
);

has commit_files_after_release => (
    isa => 'ArrayRef[Str]',
    init_arg => undef,
    lazy => 1,
    default => sub { $_[0]->payload->{commit_files_after_release} // [] },
    traits => ['Array'],
    handles => { commit_files_after_release => 'elements' },
);

around commit_files_after_release => sub {
    my $orig = shift; my $self = shift;
    sort(uniq($self->$orig(@_), 'Changes'));
};

sub mvp_multivalue_args { qw(commit_files_after_release) }

has _plugin_requirements => (
    isa => class_type('CPAN::Meta::Requirements'),
    lazy => 1,
    default => sub { CPAN::Meta::Requirements->new },
    handles => {
        _add_minimum_plugin_requirement => 'add_minimum',
        _plugin_requirements_as_string_hash => 'as_string_hash',
    },
);

has plugin_prereq_phase => (
    is => 'ro',
    isa => 'Str',
    lazy => 1,
    default => sub { $_[0]->payload->{plugin_prereq_phase} // '' },
);

has plugin_prereq_relationship => (
    is => 'ro',
    isa => 'Str',
    lazy => 1,
    default => sub { $_[0]->payload->{plugin_prereq_relationship} // '' },
);

sub configure
{
    my $self = shift;

    my $fallback_version_provider =
        $self->payload->{'RewriteVersion::Transitional.fallback_version_provider'}
            // 'Git::NextVersion';  # TODO: move this default to an attribute; be careful of overlays

    $self->add_plugins(
        # adding this first indicates the start of the bundle in x_Dist_Zilla metadata
        [ 'Prereqs' => 'pluginbundle version' => {
                '-phase' => 'develop', '-relationship' => 'recommends',
                $self->meta->name => $self->VERSION,
            } ],

        # VersionProvider (and a file munger, for the transitional usecase)
        $self->bump_only_matching_versions
            ? [ 'VersionFromMainModule' => exists $ENV{V} ? { ':version' => '0.04' } : () ]

            # allow override of any config option for the fallback_version_provider plugin
            # by specifying it as if it was used directly
            # i.e. Git::NextVersion.foo = ... in dist.ini is rewritten in the payload as
            # RewriteVersion::Transitional.foo = ... so it can override defaults passed in by the caller
            # (a wrapper plugin bundle.)
            : [ 'RewriteVersion::Transitional' => {
                    ':version' => '0.004',
                    $self->_payload_for('RewriteVersion::Transitional'),,
                    $self->_payload_for('RewriteVersion'),
                    $self->_payload_for($fallback_version_provider),
                } ],

        [ 'MetaProvides::Update' ],

        # After Release
        [ 'CopyFilesFromRelease' => { filename => [ 'Changes' ] } ],
        [ 'Git::Commit'         => 'release snapshot' => {
                ':version' => '2.020',
                allow_dirty => [ $self->commit_files_after_release ],
            } ],
        [ 'Git::Tag' ],
    );

    my %bump_version_payload = (
        $self->_payload_for('BumpVersionAfterRelease'),
        $self->_payload_for('BumpVersionAfterRelease::Transitional'),
    );

    $self->add_plugins(
        # when using all_matching => 1, we presume the author already has versions set up the way he wants them
        # (and for consistency with the removal of RewriteVersion above), so we do not bother with using
        # ::Transitional; this also lets us specify the minimum necessary version for the feature.
        $self->bump_only_matching_versions
            ? [ 'BumpVersionAfterRelease' => { ':version' => '0.016', all_matching => 1, %bump_version_payload } ]
            : [ 'BumpVersionAfterRelease::Transitional' => { ':version' => '0.004', %bump_version_payload } ],

        [ 'NextRelease'         => {
                ':version' => '5.033',
                time_zone => 'UTC',
                format => '%-' . ($self->changes_version_columns - 2) . 'v  %{yyyy-MM-dd HH:mm:ss\'Z\'}d%{ (TRIAL RELEASE)}T',
            } ],
        [ 'Git::Commit'         => 'post-release commit' => {
                ':version' => '2.020',
                allow_dirty => [
                    'Changes',
                    # these default to true when not provided
                    !exists($bump_version_payload{munge_makefile_pl}) || $bump_version_payload{munge_makefile_pl}
                        ? 'Makefile.PL' : (),



( run in 1.437 second using v1.01-cache-2.11-cpan-5a3173703d6 )