Dist-Zilla-Plugin-NextRelease-Grouped
view release on metacpan or search on metacpan
lib/Dist/Zilla/Plugin/NextRelease/Grouped.pm view on Meta::CPAN
require DateTime;
DateTime->now->set_time_zone(shift->time_zone)->format_cldr(shift);
},
t => sub { "\t" },
n => sub { "\n" },
E => sub { shift->user_info('email') },
U => sub { shift->user_info('name') },
T => sub { shift->zilla->is_trial ? (shift || '-TRIAL') : '' },
V => sub {
my $zilla = (shift)->zilla;
return $zilla->version . ($zilla->is_trial ? (shift || '-TRIAL') : '');
},
P => sub {
my $self = shift;
my($releaser) = grep { $_->can('cpanid') } @{ $self->zilla->plugins_with('-Releaser') };
$self->log_fatal(q{releaser doesn't provide cpanid, but %P used}) unless $releaser;
return $releaser->cpanid;
},
},
};
with qw/
Dist::Zilla::Role::Plugin
Dist::Zilla::Role::FileMunger
Dist::Zilla::Role::AfterRelease
/;
has filename => (
is => 'ro',
isa => Str,
default => 'Changes',
);
has time_zone => (
is => 'ro',
isa => Str,
default => 'local',
);
has user_stash => (
is => 'ro',
isa => Str,
default => '%User',
);
has format_version => (
is => 'ro',
isa => Str,
default => '%v',
);
has format_date => (
is => 'ro',
isa => Str,
default => '%{yyyy-MM-dd HH:mm:ss VVVV}d',
);
has format_note => (
is => 'ro',
isa => Str,
default => '%{ (TRIAL RELEASE)}T',
);
has groups => (
is => 'ro',
isa => (ArrayRef[Str])->plus_coercions(Str, sub { [split m{\s*,\s*}, $_] }),
traits => ['Array'],
coerce => 1,
default => sub { ['API Changes', 'Bug Fixes', 'Enhancements', 'Documentation'] },
handles => {
all_groups => 'elements',
}
);
has auto_order => (
is => 'ro',
isa => Bool,
default => 1,
);
has _changes_after_munging => (
is => 'rw',
isa => Str,
init_arg => undef,
);
sub user_info {
my $self = shift;
my $field = shift;
state $stash = $self->zilla->stash_named($self->user_stash);
my $value = $stash->$_call_if_object($field);
if(!defined $value) {
$self->log_fatal(['You must enter your %s in the [%s] section of ~/.dzil/config.ini', $field, $self->user_stash]);
}
return $value;
}
sub munge_files {
my $self = shift;
my($file) = grep { $_->name eq $self->filename } @{ $self->zilla->files };
my $changes = CPAN::Changes->load_string($file->content, next_token => $self->_next_token);
my $next = ($changes->releases)[-1];
return if !defined $next;
$next->version(header_formatter($self->format_version, $self));
$next->date(header_formatter($self->format_date, $self));
$next->note(header_formatter($self->format_note, $self));
$next->delete_empty_groups;
$self->log_debug(['Cleaning up %s in memory', $file->name]);
my $sort_groups = sub {
my @custom_groups = grep { my $group = $_; none { $group eq $_ } $self->all_groups } @_;
my @sorted = ((sort { $a cmp $b } @custom_groups), $self->all_groups);
return @sorted;
};
my $content = $self->auto_order ? $changes->serialize : $changes->serialize(group_sort => $sort_groups);
# hack to remove empty groups
if(!$self->auto_order) {
( run in 0.509 second using v1.01-cache-2.11-cpan-71847e10f99 )