Dist-Zilla-Plugin-PERLANCAR-Authority
view release on metacpan or search on metacpan
lib/Dist/Zilla/Plugin/PERLANCAR/Authority.pm view on Meta::CPAN
package Dist::Zilla::Plugin::PERLANCAR::Authority;
our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
our $DATE = '2020-08-10'; # DATE
our $DIST = 'Dist-Zilla-Plugin-PERLANCAR-Authority'; # DIST
our $VERSION = '0.001'; # VERSION
use Moose 1.03;
use PPI 1.206;
use File::Spec;
use File::HomeDir;
use Dist::Zilla::Util;
with(
'Dist::Zilla::Role::MetaProvider' => { -version => '4.102345' },
'Dist::Zilla::Role::FileMunger' => { -version => '4.102345' },
'Dist::Zilla::Role::FileFinderUser' => {
-version => '4.102345',
default_finders => [ ':InstallModules', ':ExecFiles' ],
},
'Dist::Zilla::Role::PPI' => { -version => '4.300001' },
);
{
use Moose::Util::TypeConstraints 1.01;
has authority => (
is => 'ro',
isa => subtype( 'Str'
=> where { $_ =~ /^\w+\:\S+$/ }
=> message { "Authority must be in the form of 'cpan:PAUSEID'" }
),
lazy => 1,
default => sub {
my $self = shift;
my $stash = $self->zilla->stash_named( '%PAUSE' );
if ( defined $stash ) {
$self->log_debug( [ 'using PAUSE id "%s" for AUTHORITY from Dist::Zilla config', uc( $stash->username ) ] );
return 'cpan:' . uc( $stash->username );
} else {
# Argh, try the .pause file?
# Code ripped off from Dist::Zilla::Plugin::UploadToCPAN v4.200001 - thanks RJBS!
my $file = File::Spec->catfile( File::HomeDir->my_home, '.pause' );
if ( -f $file ) {
open my $fh, '<', $file or $self->log_fatal( "Unable to open $file - $!" );
while (<$fh>) {
next if /^\s*(?:#.*)?$/;
my ( $k, $v ) = /^\s*(\w+)\s+(.+)$/;
if ( $k =~ /^user$/i ) {
$self->log_debug( [ 'using PAUSE id "%s" for AUTHORITY from ~/.pause', uc( $v ) ] );
return 'cpan:' . uc( $v );
}
}
close $fh or $self->log_fatal( "Unable to close $file - $!" );
$self->log_fatal( 'PAUSE user not found in ~/.pause' );
} else {
$self->log( 'PAUSE credentials not found in "config.ini" or "dist.ini" or "~/.pause", will be using "cpan:<none>" as the AUTHORITY' );
return 'cpan:<none>';
}
}
},
);
no Moose::Util::TypeConstraints;
}
has do_metadata => (
is => 'ro',
isa => 'Bool',
default => 1,
);
has do_munging => (
is => 'ro',
isa => 'Bool',
default => 1,
);
has locate_comment => (
is => 'ro',
isa => 'Bool',
default => 0,
);
{
use Moose::Util::TypeConstraints 1.01;
has authority_style => (
is => 'ro',
isa => enum( [ qw( pkg our ) ] ),
default => 'our',
);
no Moose::Util::TypeConstraints;
}
# sanity check ourselves...
my $seen_author;
sub metadata {
my( $self ) = @_;
return if ! $self->do_metadata;
if ( ! defined $seen_author ) {
$seen_author = $self->authority;
} else {
if ( $seen_author ne $self->authority ) {
die "Specifying multiple authorities will not work! We got '$seen_author' and '" . $self->authority . "'";
}
}
$self->log_debug( 'adding AUTHORITY to metadata' );
return {
'x_authority' => $self->authority,
};
lib/Dist/Zilla/Plugin/PERLANCAR/Authority.pm view on Meta::CPAN
}
# Thanks to autarch ( Dave Rolsky ) for this
if ( $stmt->content =~ /package\s*(?:#.*)?\n\s*\Q$package/ ) {
$self->log( [ 'skipping private package %s', $package ] );
next;
}
$self->log_debug( [ 'adding $AUTHORITY assignment to %s in %s', $package, $file->name ] );
if( my $block = $stmt->find_first('PPI::Structure::Block') ) {
$self->_inject_block_authority( $block, $package );
next;
}
$self->_inject_plain_authority( $file, $stmt, $package );
next;
}
$self->save_ppi_document_to_file( $document, $file );
}
sub _munge_perl {
my( $self, $file ) = @_;
my $document = $self->ppi_document_for_file($file);
if ( $self->document_assigns_to_variable( $document, '$AUTHORITY' ) ) {
$self->log( [ 'skipping %s: assigns to $AUTHORITY', $file->name ] );
return;
}
# Should we use the comment to insert the $AUTHORITY or the pkg declaration?
if ( $self->locate_comment ) {
return $self->_munge_perl_authority_comments($document, $file);
} else {
return $self->_munge_perl_packages( $document, $file );
}
}
no Moose;
__PACKAGE__->meta->make_immutable;
1;
# ABSTRACT: Add the $AUTHORITY variable and metadata to your distribution
__END__
=pod
=encoding UTF-8
=head1 NAME
Dist::Zilla::Plugin::PERLANCAR::Authority - Add the $AUTHORITY variable and metadata to your distribution
=head1 VERSION
This document describes version 0.001 of Dist::Zilla::Plugin::PERLANCAR::Authority (from Perl distribution Dist-Zilla-Plugin-PERLANCAR-Authority), released on 2020-08-10.
=head1 DESCRIPTION
B<Fork note>: This plugin is a fork of L<Dist::Zilla::Plugin::Authority>. When
PAUSE credential is not found, this plugin will set C<$AUTHORITY> to C<<
cpan:<none> >> instead of bailing out. TODO: bail if PAUSE credentials is not
found and we are doing a release (instead of just 'dzil test' or 'dzil build').
The rest is Dist::Zilla::Plugin::Authority's documentation.
This plugin adds the authority data to your distribution. It adds the data to
your modules and metadata. Normally it looks for the PAUSE author id in your
L<Dist::Zilla> configuration. If you want to override it, please use the
'authority' attribute.
# In your dist.ini:
[Authority]
This code will be added to any package declarations in your perl files:
our $AUTHORITY = 'cpan:APOCAL';
Your metadata ( META.yml or META.json ) will have an entry looking like this:
x_authority => 'cpan:APOCAL'
=for stopwords RJBS metadata FLORA dist ini json username yml
=for Pod::Coverage metadata munge_files
=head1 ATTRIBUTES
=head2 authority
The authority you want to use. It should be something like C<cpan:APOCAL>.
Defaults to the username set in the %PAUSE stash in the global config.ini or dist.ini ( Dist::Zilla v4 addition! )
If you prefer to not put it in config/dist.ini you can put it in "~/.pause" just like Dist::Zilla did before v4.
=head2 do_metadata
A boolean value to control if the authority should be added to the metadata.
Defaults to true.
=head2 do_munging
A boolean value to control if the $AUTHORITY variable should be added to the modules.
Defaults to true.
=head2 locate_comment
A boolean value to control if the $AUTHORITY variable should be added where a
C<# AUTHORITY> comment is found. If this is set then an appropriate comment
is found, and C<our $AUTHORITY = 'cpan:PAUSEID';> is inserted preceding the
comment on the same line.
This basically implements what L<OurPkgVersion|Dist::Zilla::Plugin::OurPkgVersion>
does for L<PkgVersion|Dist::Zilla::Plugin::PkgVersion>.
Defaults to false.
NOTE: If you use this method, then we will not use the pkg style of declaration! That way, we keep the line numbering consistent.
=head2 authority_style
( run in 0.568 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )