From 61b975e3b23be07026751f07dfaf70ef5390cf08 Mon Sep 17 00:00:00 2001 From: espie Date: Mon, 1 Mar 2010 17:59:49 +0000 Subject: [PATCH] tweak logic of run slightly, so that we actually check stuff in finalize, as should be. This also simplifies infinite jobs slightly, since we build the tasks we want directly --- infrastructure/build/DPB/Core.pm | 37 ++++---------------- infrastructure/build/DPB/Core/Distant.pm | 44 ++++++++++++++++++------ infrastructure/build/DPB/Engine.pm | 9 ++--- infrastructure/build/DPB/Job.pm | 14 +++----- 4 files changed, 50 insertions(+), 54 deletions(-) diff --git a/infrastructure/build/DPB/Core.pm b/infrastructure/build/DPB/Core.pm index f3aacb10bbb..8404db91d75 100644 --- a/infrastructure/build/DPB/Core.pm +++ b/infrastructure/build/DPB/Core.pm @@ -1,5 +1,5 @@ # ex:ts=8 sw=4: -# $OpenBSD: Core.pm,v 1.3 2010/02/27 09:53:09 espie Exp $ +# $OpenBSD: Core.pm,v 1.4 2010/03/01 17:59:49 espie Exp $ # # Copyright (c) 2010 Marc Espie # @@ -171,7 +171,6 @@ sub terminate $self->task->end if $self->task; if ($self->SUPER::terminate) { $self->job->finalize($self); - $self->mark_ready; } } @@ -213,7 +212,7 @@ sub start_task if (defined $task) { return $core->run_task; } else { - $core->job->finalize($core); + return $core->job->finalize($core); } } @@ -244,13 +243,6 @@ package DPB::Job::Init; our @ISA = qw(DPB::Job::Normal); use DPB::Signature; -# no tasks for now -sub next_task -{ - my $self = shift; - return pop(@{$self->{tasks}}); -} - sub new { my $class = shift; @@ -459,12 +451,6 @@ sub start_pipe $self->start_job(DPB::Job::Pipe->new($code, $name)); } -sub start -{ - my ($self, $code, $endcode, $name) = @_; - $self->start_job(DPB::Job::Normal->new($code, $endcode, $name)); -} - package DPB::Core::Special; our @ISA = qw(DPB::Core::WithJobs); sub repository @@ -484,19 +470,6 @@ sub host return $host; } -package DPB::Job::Clock; -our @ISA = qw(DPB::Job::Infinite); - -sub new -{ - my ($class, $timeout) = @_; - $timeout //= 10; - return $class->SUPER::new(sub { - sleep($timeout); - exit(0); - }, 'clock'); -} - package DPB::Core::Clock; our @ISA = qw(DPB::Core::Special); @@ -504,7 +477,11 @@ sub start { my ($class, $timeout) = @_; my $core = $class->new('localhost'); - $core->start_job(DPB::Job::Clock->new($timeout)); + $timeout //= 10; + $core->start_job(DPB::Job::Infinite->new(DPB::Task::Fork->new(sub { + sleep($timeout); + exit(0); + }), 'clock')); } 1; diff --git a/infrastructure/build/DPB/Core/Distant.pm b/infrastructure/build/DPB/Core/Distant.pm index 6b892d30dd8..12f5da6234f 100644 --- a/infrastructure/build/DPB/Core/Distant.pm +++ b/infrastructure/build/DPB/Core/Distant.pm @@ -1,5 +1,5 @@ # ex:ts=8 sw=4: -# $OpenBSD: Distant.pm,v 1.2 2010/02/26 12:14:57 espie Exp $ +# $OpenBSD: Distant.pm,v 1.3 2010/03/01 17:59:49 espie Exp $ # # Copyright (c) 2010 Marc Espie # @@ -72,6 +72,36 @@ sub make return OpenBSD::Paths->make; } +package DPB::Task::SshMaster; +our @ISA = qw(DPB::Task::Fork); +sub run +{ + my $self = shift; + my $socket = $self->{socket}; + my $timeout = $self->{timeout}; + my $host = $self->{host}; + close STDOUT; + close STDERR; + open STDOUT, '>/dev/null'; + open STDERR, '>&STDOUT'; + exec {OpenBSD::Paths->ssh} + (DPB::Ssh->ssh($socket, $timeout), + '-N', '-M', $host); + exit(1); +} + +# we never error out +sub finalize +{ + return 1; +} + +sub new +{ + my ($class, $socket, $timeout, $host) = @_; + bless {socket => $socket, timeout => $timeout, host => $host}, $class; +} + package DPB::Job::SshMaster; our @ISA = qw(DPB::Job::Infinite); @@ -82,16 +112,8 @@ sub new $TMPDIR //= $ENV{PKG_TMPDIR} || '/var/tmp'; my $timeout = 60; my $socket = "$TMPDIR/ssh-$host-$$"; - my $o = $class->SUPER::new(sub { - close STDOUT; - close STDERR; - open STDOUT, '>/dev/null'; - open STDERR, '>&STDOUT'; - exec {OpenBSD::Paths->ssh} - (DPB::Ssh->ssh($socket, $timeout), - '-N', '-M', $host); - exit(1); - }, "ssh master for $host"); + my $o = $class->SUPER::new(DPB::Task::SshMaster->new($socket, + $timeout, $host), "ssh master for $host"); $o->{host} = $host; $o->{timeout} = $timeout; $o->{socket} = $socket; diff --git a/infrastructure/build/DPB/Engine.pm b/infrastructure/build/DPB/Engine.pm index 5e108b26109..087f7e6d100 100644 --- a/infrastructure/build/DPB/Engine.pm +++ b/infrastructure/build/DPB/Engine.pm @@ -1,5 +1,5 @@ # ex:ts=8 sw=4: -# $OpenBSD: Engine.pm,v 1.2 2010/02/26 12:14:57 espie Exp $ +# $OpenBSD: Engine.pm,v 1.3 2010/03/01 17:59:49 espie Exp $ # # Copyright (c) 2010 Marc Espie # @@ -156,11 +156,12 @@ sub important { my $self = shift; $self->{lasterrors} //= 0; - if (@{$self->{errors}} > $self->{lasterrors}) { - my $i = 0; + my $i = @{$self->{errors}} - $self->{lasterrors}; + if ($i > 0) { my @msg; + my $j = 0; for my $v (@{$self->{errors}}) { - next if $i++ >= $self->{lasterrors}; + last if $j++ > $i; push(@msg, $v->fullpkgpath); } $self->{lasterrors} = @{$self->{errors}}; diff --git a/infrastructure/build/DPB/Job.pm b/infrastructure/build/DPB/Job.pm index 0b1d5841015..40d71bc1f78 100644 --- a/infrastructure/build/DPB/Job.pm +++ b/infrastructure/build/DPB/Job.pm @@ -1,5 +1,5 @@ # ex:ts=8 sw=4: -# $OpenBSD: Job.pm,v 1.2 2010/02/26 12:14:57 espie Exp $ +# $OpenBSD: Job.pm,v 1.3 2010/03/01 17:59:49 espie Exp $ # # Copyright (c) 2010 Marc Espie # @@ -51,7 +51,7 @@ sub process sub finalize { my ($self, $core) = @_; - return 1; + return $core->{status} == 0; } package DPB::Task::Pipe; @@ -81,11 +81,7 @@ package DPB::Job; sub next_task { my ($self, $core) = @_; - if ($core->{status} == 0) { - return shift @{$self->{tasks}}; - } else { - return undef; - } + return shift @{$self->{tasks}}; } sub name @@ -148,9 +144,9 @@ sub next_task sub new { - my ($class, $code, $name) = @_; + my ($class, $task, $name) = @_; my $o = $class->SUPER::new($name); - $o->{task} = DPB::Task::Fork->new($code); + $o->{task} = $task; return $o; }