git-gather will inspect the git log from the most recent of those three points:
git-gather
commit
Git messages are compared to the regular expression configured at `project.commit_regex`. If none is found, it defaults to
^(?<type>[^: ]+):(?<desc>.*?)(\[(?<ticket>[^\]]+)\])?$
The regular expression must capture a desc field, and may capture a type and ticket as well.
desc
type
ticket
END_POD
use Path::Tiny;
with 'App::Changelord::Role::Changelog'; with 'App::Changelord::Role::Versions'; with 'App::Changelord::Role::ChangeTypes'; with 'App::Changelord::Role::GitRepo';
has commit_regex => ( is => 'lazy' );
sub _build_commit_regex($self) { my $regex = $self->changelog->{project}{commit_regex}; my $default = '^(?<type>[^: ]+):(?<desc>.*?)(\[(?<ticket>[^\]]+)\])?$'; if(!$regex) { 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__
App::Changelord::Command::GitGather
version 0.0.2
Yanick Champoux <yanick@babyl.ca>
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.
To install App::Changelord, copy and paste the appropriate command in to your terminal.
cpanm
cpanm App::Changelord
CPAN shell
perl -MCPAN -e shell install App::Changelord
For more information on module installation, please visit the detailed CPAN module installation guide.