1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
use 5.010001;
use strict;
use warnings;
package Dist::Inkt::Role::Git;
our $AUTHORITY = 'cpan:KJETILK';
our $VERSION = '0.001';
use Moose::Role;
use Git::Sub qw(tag status log);
use Types::Standard 'Bool';
use namespace::autoclean;
has source_control_is_git => (
is => "ro",
isa => Bool,
lazy => 1,
builder => "_build_source_control_is_git",
);
sub _build_source_control_is_git {
my $self = shift;
!! $self->rootdir->child(".git")->is_dir;
}
after BUILD => sub {
my $self = shift;
return unless $self->source_control_is_git;
$self->log('Source control is git');
my @uncommitted = git::status qw(--untracked-files=no --porcelain);
if (scalar @uncommitted) {
$self->log("git has uncommitted changes in following files:");
foreach my $msg (@uncommitted) {
$self->log($msg);
}
die "Please commit them";
}
};
before BuildTarball => sub {
my $self = shift;
return unless $self->source_control_is_git;
my $pstr = 'release-' . $self->version;
$pstr = 'dev-' . $pstr if ($self->version =~ m/_/);
my $short = git::log qw(--pretty=format:'%h' -n 1);
$self->log("Tagging $short as $pstr.");
git::tag -s => -m => "Releasing $short tagged $pstr.", $pstr;
};
1;
__END__
=pod
=encoding utf-8
=head1 NAME
Dist::Inkt::Role::Git - Git functions for Dist::Inkt
=head1 DESCRIPTION
This module has the following functions:
=over
=item * Prevents building the release if there are uncommitted changes.
=item * Tags the release with the version number just before building the tarball.
=back
=head1 BUGS
Please report any bugs to
L<https://github.com/kjetilk/p5-dist-inkt-role-git/issues>.
=head1 SEE ALSO
L<Dist::Inkt>
=head1 AUTHOR
Kjetil Kjernsmo E<lt>kjetilk@cpan.orgE<gt>.
=head1 COPYRIGHT AND LICENCE
This software is copyright (c) 2018 by Kjetil Kjernsmo.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=head1 DISCLAIMER OF WARRANTIES
THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|