LCFG-Build-PkgSpec
view release on metacpan or search on metacpan
lib/LCFG/Build/PkgSpec.pm view on Meta::CPAN
$in->close;
my $pkgspec;
if ( !ref $proto ) {
$spec{license} = 'GPLv2';
$spec{vendor} ||= 'University of Edinburgh';
$spec{vcs} = { logname => 'ChangeLog' };
$spec{build} = { gencmake => 1 };
$spec{translate} = [ '*.cin' ];
$pkgspec = $proto->new(\%spec);
}
elsif ( defined Scalar::Util::blessed($proto) && $proto->isa(__PACKAGE__) ) {
$pkgspec = $proto;
for my $key ( keys %spec ) {
$pkgspec->$key($spec{$key});
}
}
else {
die "Error: new_from_cfgmk method called on wrong class or object\n";
}
return $pkgspec;
}
sub save_metafile {
my ( $self, $file ) = @_;
$file ||= $self->metafile;
if ( !defined $file || !length $file ) {
die "Error: You need to specify the LCFG config file name\n";
}
require YAML::Syck;
{
local $YAML::Syck::SortKeys = 1;
my $dump = \%{$self};
delete $dump->{metafile};
YAML::Syck::DumpFile( $file, $dump );
}
return;
}
sub dev_version {
my ($self) = @_;
$self->update_release;
my $dev_version = 'dev' . $self->release;
$dev_version = join q{.}, $self->get_major, $self->get_minor,
$self->get_micro, $dev_version;
$self->version($dev_version);
return $self->version;
}
sub update_release {
my ($self) = @_;
my $release = $self->release;
if ( !defined $release ) {
$release = 1;
}
else {
$release++;
}
$self->release($release);
return;
}
sub update_date {
my ($self) = @_;
my $now = DateTime->now->strftime('%d/%m/%y %T');
$self->date($now);
return;
}
sub update_major {
my ($self) = @_;
return $self->_update_version('major');
}
sub update_minor {
my ($self) = @_;
return $self->_update_version('minor');
}
sub update_micro {
my ($self) = @_;
return $self->_update_version('micro');
}
sub _update_version {
my ( $self, $uptype ) = @_;
my $major = $self->get_major;
my $minor = $self->get_minor;
my $micro = $self->get_micro;
if ( $uptype eq 'major' ) {
$major++;
$minor = 0;
$micro = 0;
}
elsif ( $uptype eq 'minor' ) {
$minor++;
$micro = 0;
}
elsif ( $uptype eq 'micro' ) {
$micro++;
}
else {
die "Unknown version update-type: $uptype\n";
}
my $newver = join q{.}, $major, $minor, $micro;
my $rel = $self->release;
my $newrel;
if ( defined $rel ) {
if ( $rel =~ m/^\d+(.*)$/ ) {
$newrel = q{1} . $1;
}
else {
die "Release string, '$rel', does not match expected format\n";
}
}
else {
$newrel = 1;
}
# Only update the attributes if everything else has succeeded
# (i.e. we got this far in the code).
$self->version($newver);
$self->release($newrel);
$self->update_date();
return;
}
1;
__END__
=head1 NAME
LCFG::Build::PkgSpec - Object-oriented interface to LCFG build metadata
( run in 1.942 second using v1.01-cache-2.11-cpan-39bf76dae61 )