-DALWAYS_CLEAN: clean ports even if they errored out (that's a prop, so

always_clean=1  in hosts file.

refactor task code a bit. And fix a buglet related to the NFS check
(wrong finalize order)
This commit is contained in:
espie 2012-10-12 20:24:56 +00:00
parent df9dd3e430
commit 0f91b47f42
3 changed files with 65 additions and 18 deletions

View File

@ -1,7 +1,7 @@
#! /usr/bin/perl
# ex:ts=8 sw=4:
# $OpenBSD: dpb,v 1.56 2012/10/11 07:40:30 espie Exp $
# $OpenBSD: dpb,v 1.57 2012/10/12 20:24:56 espie Exp $
#
# Copyright (c) 2010 Marc Espie <espie@openbsd.org>
#
@ -255,6 +255,9 @@ sub start_cores
if ($state->opt('J')) {
$override_prop->{junk} = $state->opt('J');
}
if ($state->defines("ALWAYS_CLEAN")) {
$override_prop->{always_clean} = 1;
}
if ($state->{config}) {
DPB::Core->parse_hosts_file($state->{config}, $state, $override_prop);

View File

@ -1,5 +1,5 @@
# ex:ts=8 sw=4:
# $OpenBSD: Job.pm,v 1.2 2011/06/04 12:58:24 espie Exp $
# $OpenBSD: Job.pm,v 1.3 2012/10/12 20:24:56 espie Exp $
#
# Copyright (c) 2010 Marc Espie <espie@openbsd.org>
#
@ -115,6 +115,12 @@ sub add_tasks
push(@{$self->{tasks}}, @tasks);
}
sub insert_tasks
{
my ($self, @tasks) = @_;
unshift(@{$self->{tasks}}, @tasks);
}
sub really_watch
{
}

View File

@ -1,5 +1,5 @@
# ex:ts=8 sw=4:
# $OpenBSD: Port.pm,v 1.38 2012/10/11 09:03:34 espie Exp $
# $OpenBSD: Port.pm,v 1.39 2012/10/12 20:24:56 espie Exp $
#
# Copyright (c) 2010 Marc Espie <espie@openbsd.org>
#
@ -19,10 +19,18 @@ use warnings;
use DPB::Job;
use DPB::Clock;
package DPB::Task::Port;
package DPB::Task::BasePort;
our @ISA = qw(DPB::Task::Clocked);
use OpenBSD::Paths;
our @ISA = qw(DPB::Task::Clocked);
sub finalize
{
my ($self, $core) = @_;
$self->SUPER::finalize($core);
$core->job->finished_task($self);
return $core->{status} == 0;
}
sub new
{
my ($class, $phase) = @_;
@ -43,14 +51,6 @@ sub fork
return $self->SUPER::fork($core);
}
sub finalize
{
my ($self, $core) = @_;
$self->SUPER::finalize($core);
$core->job->finished_task($self);
return $core->{status} == 0;
}
sub handle_output
{
my ($self, $job) = @_;
@ -124,11 +124,29 @@ sub make_sure_we_have_packages
}
if (!$check) {
print $log ">>> waiting 10 seconds\n";
$job->add_tasks(DPB::Task::Port::VerifyPackages->new(
$job->insert_tasks(DPB::Task::Port::VerifyPackages->new(
'waiting'.$job->{waiting}++));
}
}
package DPB::Task::Port;
our @ISA = qw(DPB::Task::BasePort);
sub finalize
{
my ($self, $core) = @_;
$self->SUPER::finalize($core);
if ($core->{status} == 0) {
return 1;
}
if ($core->prop->{always_clean}) {
$core->job->insert_tasks(DPB::Task::Port::CleanOnError->new(
'clean'));
return 1;
}
return 0;
}
package DPB::Task::Port::Serialized;
our @ISA = qw(DPB::Task::Port);
@ -446,11 +464,20 @@ sub finalize
}
package DPB::Task::Port::Clean;
our @ISA = qw(DPB::Task::Port);
our @ISA = qw(DPB::Task::BasePort);
sub notime { 1 }
sub finalize
{
my ($self, $core) = @_;
if (!$self->requeue($core)) {
$self->make_sure_we_have_packages($core->job);
}
$self->SUPER::finalize($core);
}
sub requeue
{
my ($self, $core) = @_;
# didn't clean right, and no sudo yet:
@ -458,15 +485,26 @@ sub finalize
if ($core->{status} != 0 && !$self->{sudo}) {
$self->{sudo} = 1;
my $job = $core->job;
unshift(@{$job->{tasks}}, $self);
$job->insert_tasks($self);
my $fh = $job->{builder}->logger->open("clean");
print $fh $job->{v}->fullpkgpath, "\n";
$core->{status} = 0;
return 1;
}
return 0;
}
package DPB::Task::Port::CleanOnError;
our @ISA = qw(DPB::Task::Port::Clean);
sub finalize
{
my ($self, $core) = @_;
if ($self->requeue($core)) {
return 1;
}
$self->SUPER::finalize($core);
$self->make_sure_we_have_packages($core->job);
# $core->job->add_tasks(DPB::Task::Port::VerifyPackages->new('waiting'));
return 0;
}
package DPB::Task::Port::VerifyPackages;