PkgForge
view release on metacpan or search on metacpan
lib/PkgForge/Job.pm view on Meta::CPAN
documentation => 'The date/time the job was submitted',
);
has 'size' => (
traits => ['PkgForge::Serialise'],
is => 'rw',
isa => Int,
builder => '_job_size',
lazy => 1,
documentation => 'The total size of the source packages in bytes',
);
sub _job_size {
my ($self) = @_;
my $total = 0;
for my $pkg ($self->packages) {
$total += $pkg->size;
}
return $total;
}
has 'packages' => (
traits => [ 'Array', 'PkgForge::Serialise' ],
is => 'ro',
isa => SourcePackageList,
auto_deref => 1,
default => sub { [] },
handles => {
add_packages => 'push',
count_packages => 'count',
filter_packages => 'grep',
packages_list => 'elements',
},
pack => sub { PkgForge::SourceUtils::pack_packages($_[0]) },
unpack => sub { PkgForge::SourceUtils::unpack_packages($_[0]) },
documentation => 'The set of source packages to be built',
);
after 'add_packages' => sub {
my ($self) = @_;
$self->update_job_size;
return;
};
sub update_job_size {
my ($self) = @_;
$self->size( $self->_job_size );
return;
}
has 'submitter' => (
traits => ['PkgForge::Serialise'],
is => 'rw',
isa => UserName,
required => 1,
coerce => 1,
default => sub { getpwuid($<) },
documentation => 'The name of the person who submitted this job',
);
has 'report' => (
traits => ['PkgForge::Serialise','Getopt','Array'],
is => 'rw',
isa => EmailAddressList,
coerce => 1,
cmd_aliases => 'r',
predicate => 'report_required',
handles => {
report_list => 'elements',
},
documentation => 'Email addresses to which build reports will be sent',
);
has 'verbose' => (
traits => ['Getopt'],
is => 'rw',
isa => Bool,
default => 0,
documentation => 'Verbose output',
);
around 'new_from_yamlfile' => sub {
my $orig = shift;
my $class = shift;
my $obj = $class->$orig(@_);
if ( $obj->has_directory ) {
my $dir = $obj->directory;
for my $package ($obj->packages_list) {
$package->basedir($dir);
}
}
return $obj;
};
no Moose;
__PACKAGE__->meta->make_immutable;
sub stringify {
my ($self) = @_;
return $self->id;
}
sub clone {
my ($self) = @_;
require Storable;
my $clone = Storable::dclone($self);
return $clone;
}
sub process_build_targets {
my ( $self, @available ) = @_;
lib/PkgForge/Job.pm view on Meta::CPAN
my $fullpath = $package->fullpath;
if ( $self->verbose ) {
warn "Copying '$fullpath' to '$new_dir'\n";
}
$ok = File::Copy::copy( $fullpath, $new_dir );
last if !$ok;
$package->basedir($new_dir);
}
if (!$ok) {
_transfer_failure( $new_dir, "Failed to transfer some packages for job $id" );
}
eval {
my $build_file = File::Spec->catfile( $new_dir, 'build.yml' );
$new_obj->yamlfile($build_file);
$new_obj->directory($new_dir);
$new_obj->store_in_yamlfile();
};
if ($EVAL_ERROR) {
_transfer_failure( $new_dir, "Failed to load transferred job $id" );
}
if ( $self->verbose ) {
warn "Copy finished, will now validate.\n";
}
my $valid = eval { $new_obj->validate() };
if ( !$valid || $EVAL_ERROR ) {
_transfer_failure( $new_dir, "Failed to validate transfer of job $id" );
}
return $new_obj;
}
sub _transfer_failure {
my ( $dir, $msg ) = @_;
if ( -d $dir ) {
PkgForge::Utils::remove_tree($dir);
}
die "$msg\n";
}
sub overdue {
my ( $self, $timeout ) = @_;
my $now = time;
return ( ($now - $timeout) > $self->subtime );
}
sub new_from_qentry {
my ( $class, $qentry ) = @_;
my $dir = $qentry->path;
my $obj = $class->new_from_dir($dir);
# Submitter
my $uid = $qentry->owner;
my $owner = getpwuid($uid);
$obj->submitter( $owner || $uid );
# Submission time
$obj->subtime($qentry->timestamp);
return $obj;
}
sub new_from_dir {
my ( $class, $dir ) = @_;
if ( !-d $dir ) {
die "Build job directory '$dir' does not exist\n";
}
my $build_file = File::Spec->catfile( $dir, 'build.yml' );
if ( !-f $build_file ) {
die "Build job file '$build_file' does not exist\n";
}
return $class->new_from_yamlfile( yamlfile => $build_file,
directory => $dir );
}
sub scrub {
my ( $self, $options ) = @_;
PkgForge::Utils::remove_tree( $self->directory, $options );
undef $self;
return;
}
1;
__END__
=head1 NAME
PkgForge::Job - Represents a build job for the LCFG Package Forge
=head1 VERSION
This documentation refers to PkgForge::Job version 1.4.8
=head1 SYNOPSIS
use PkgForge::Job;
use PkgForge::Source::SRPM;
my $job = PkgForge::Job->new( bucket => "lcfg",
archs => ["i386","x86_64"],
platform => ["sl5"] );
my $package =
PkgForge::Source::SRPM->new( file => "foo-1.2.src.rpm");
$job->add_packages($package);
( run in 1.336 second using v1.01-cache-2.11-cpan-6aa56a78535 )