App-Changelord

 view release on metacpan or  search on metacpan

lib/App/Changelord/Command/GitGather.pm  view on Meta::CPAN

        warn "project.commit_regex not configured, using the default /$default/\n";
        $regex = $default;
    }
    return $regex;
}

sub lower_bound($self) {
    # either the most recent commit in the current release
    my @sha1s = grep { $_ } map { $_->{commit} } grep { ref } $self->next_release->{changes}->@*;

    return pop @sha1s if @sha1s;

    return $self->latest_version;
}

sub get_commits($self,$since=undef) {
    return reverse $self->repo->run( 'log', '--pretty=format:%H %s', $since ? "$since.." : () );
}

sub munge_message($self,$message) {
    my $regex = $self->commit_regex;

    $message =~ s/(\S+) //;
    my $commit = $1;

    return () unless $message =~ qr/$regex/;

    return { %+, commit => $commit };
}

sub save_changelog($self) {
    my $src = $self->source;

    path($src)->spew( App::Changelord::Command::Init::serialize_changelog($self) );
}

sub run ($self) {

    say "let's check those git logs...";

    # figure out lower bound
    my $from = $self->lower_bound;

    say "checking since ", ( $from || 'the dawn of time' );

    my @messages = map { $self->munge_message($_) } $self->get_commits($from);

    unless(@messages) {
        say "\nno change detected";
        return;
    }

    print "\n";
    say "  * ", $_->{desc} for @messages;
    print "\n";

    push $self->next_release->{changes}->@*, @messages;

    $self->save_changelog;

    say $self->source, " updated";
}

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

App::Changelord::Command::GitGather

=head1 VERSION

version v0.0.1

=head1 AUTHOR

Yanick Champoux <yanick@babyl.ca>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2022 by Yanick Champoux.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut



( run in 2.374 seconds using v1.01-cache-2.11-cpan-a49fcb8fa48 )