49 lines
1008 B
Perl
49 lines
1008 B
Perl
|
package App::Changelord::Role::Stats;
|
||
|
|
||
|
use v5.36.0;
|
||
|
|
||
|
use Git::Repository;
|
||
|
|
||
|
use Moo::Role;
|
||
|
|
||
|
use feature 'try'; no warnings qw/ experimental /;
|
||
|
|
||
|
requires 'changelog';
|
||
|
|
||
|
# stolen from Dist::Zilla::Plugin::ChangeStats::Git
|
||
|
|
||
|
has repo => (
|
||
|
is => 'ro',
|
||
|
default => sub { Git::Repository->new( work_tree => '.' ) },
|
||
|
);
|
||
|
|
||
|
has stats => (
|
||
|
is => 'lazy' );
|
||
|
|
||
|
sub _build_stats ($self) {
|
||
|
my $comparison_data = $self->_get_comparison_data or return;
|
||
|
|
||
|
my $stats = 'code churn: ' . $comparison_data;
|
||
|
return $stats =~ s/\s+/ /gr;
|
||
|
}
|
||
|
|
||
|
sub _get_comparison_data($self) {
|
||
|
|
||
|
# HEAD versus previous release
|
||
|
# What are we diffing against? :)
|
||
|
my $previous = $self->changelog->{releases}->@* > 1
|
||
|
? $self->changelog->{releases}[1]{version}
|
||
|
: '4b825dc642cb6eb9a060e54bf8d69288fbee4904'; # empty tree
|
||
|
|
||
|
my $output = eval {
|
||
|
$self->repo->run( 'diff', '--shortstat', $previous, 'HEAD')
|
||
|
};
|
||
|
|
||
|
|
||
|
warn "could not gather stats: $@\n" if $@;
|
||
|
|
||
|
return $output;
|
||
|
}
|
||
|
|
||
|
1;
|