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 )