Dist-Zilla-Plugin-CheckVersionIncrement

 view release on metacpan or  search on metacpan

lib/Dist/Zilla/Plugin/CheckVersionIncrement.pm  view on Meta::CPAN

## no critic
package Dist::Zilla::Plugin::CheckVersionIncrement;
{
  $Dist::Zilla::Plugin::CheckVersionIncrement::VERSION = '0.121750';
}
## use critic
# ABSTRACT: Prevent a release unless the version number is incremented
use Moose;

with 'Dist::Zilla::Role::BeforeRelease';
use Encode qw(encode_utf8);
use LWP::UserAgent;
use version ();
use JSON::PP;


# Lots of this is cargo-culted from DZP::CheckPrereqsIndexed
sub before_release {
    my ($self) = @_;

    my $pkg = $self->zilla->name;
    $pkg =~ s/-/::/g;
    ### $pkg

    my $pkg_version = version->parse($self->zilla->version);
    my $indexed_version;

    my $ua = LWP::UserAgent->new(keep_alive => 1);
    $ua->env_proxy;
    my $res = $ua->get("http://cpanidx.org/cpanidx/json/mod/$pkg");
    if ($res->is_success) {
        my $yaml_octets = encode_utf8($res->decoded_content);
        my $payload = JSON::PP->new->decode($yaml_octets);
        if (@$payload) {
            $indexed_version = version->parse($payload->[0]{mod_vers});
        }
    }

    if ($indexed_version) {
        return if $indexed_version < $pkg_version;

        my $indexed_description;
        if ($indexed_version == $pkg_version) {
            $indexed_description = "the same version ($indexed_version)";
        }
        else {
            $indexed_description = "a higher version ($indexed_version)";
        }

        return if $self->zilla->chrome->prompt_yn(
            "You are releasing version $pkg_version but $indexed_description is already indexed on CPAN. Release anyway?",
            { default => 0 }
        );
        $self->log_fatal("aborting release of version $pkg_version because $indexed_description is already indexed on CPAN");
    }
    else {
        $self->log("Dist not indexed on CPAN. Skipping check for incremented version.");
    }
}

1; # Magic true value required at end of module


=pod

=head1 NAME

Dist::Zilla::Plugin::CheckVersionIncrement - Prevent a release unless the version number is incremented

=head1 VERSION

version 0.121750

=head1 SYNOPSIS

In your F<dist.ini>

    [CheckVersionIncrement]

=head1 DESCRIPTION

This plugin prevents your from releasing a distribution unless it has
a version number I<greater> than the latest version already indexed on
CPAN.

Note that this plugin doesn't check whether your release method
actually involves the CPAN or not. So if you don't use the
UploadToCPAN plugin for releases, then you probably shouldn't use this
one either.

=head1 METHODS



( run in 1.288 second using v1.01-cache-2.11-cpan-5b529ec07f3 )