explain to the engine how to install stuff when it's ready (no error
checks though). new -I option to do that. change -C option to be more useful.
This commit is contained in:
parent
5ffb1d6f17
commit
2f6111d127
@ -1,7 +1,7 @@
|
||||
#! /usr/bin/perl
|
||||
|
||||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: dpb,v 1.28 2011/11/09 08:28:55 espie Exp $
|
||||
# $OpenBSD: dpb,v 1.29 2011/11/14 21:57:47 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2010 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
@ -55,6 +55,7 @@ sub init
|
||||
sub handle_options
|
||||
{
|
||||
my $state = shift;
|
||||
$state->{dontclean} = {};
|
||||
$state->{opt} = {
|
||||
a => sub {
|
||||
$state->{all} = 1;
|
||||
@ -81,6 +82,29 @@ sub handle_options
|
||||
push @main::ARGV, $_;
|
||||
}
|
||||
},
|
||||
I => sub {
|
||||
my $file = shift;
|
||||
open my $fh, '<', $file or die "Can't open $file\n";
|
||||
my $_;
|
||||
while (<$fh>) {
|
||||
chomp;
|
||||
next if m/^\#/;
|
||||
my $p = DPB::PkgPath->new($_);
|
||||
$p->{wantinstall} = 1;
|
||||
push @main::ARGV, $_;
|
||||
}
|
||||
},
|
||||
C => sub {
|
||||
my $file = shift;
|
||||
open my $fh, '<', $file or die "Can't open $file\n";
|
||||
my $_;
|
||||
while (<$fh>) {
|
||||
chomp;
|
||||
next if m/^\#/;
|
||||
s/\,.*//;
|
||||
$state->{dontclean}{$_} = 1;
|
||||
}
|
||||
},
|
||||
b => sub {
|
||||
push(@{$state->{build_files}}, shift);
|
||||
},
|
||||
@ -89,9 +113,10 @@ sub handle_options
|
||||
},
|
||||
};
|
||||
|
||||
$state->SUPER::handle_options('acCeqrRstuUvh:xA:f:F:j:m:P:b:L:S:',
|
||||
"[-acCerRsuUvx] [-A arch] [-f N] [-F N][-j N] [-P plist] [-h hosts]",
|
||||
"[-L logdir] [-b log] [-t ctimeout] [-m threshold] [path ...]");
|
||||
$state->SUPER::handle_options('aceqrRstuUvh:xA:C:f:F:I:j:m:P:b:L:S:',
|
||||
"[-acerRsuUvx] [-A arch] [-C plist] [-f N] [-F N] [-I plist] [-j N]",
|
||||
"[-P plist] [-h hosts] [-L logdir] [-b log] [-t ctimeout] [-m threshold]",
|
||||
"[path ...]");
|
||||
$state->{fullrepo} = join("/", $state->{repo}, $state->arch, "all");
|
||||
$state->{logdir} //= $ENV{LOGDIR} //
|
||||
join("/", $state->ports, "logs", $state->arch);
|
||||
|
@ -1,5 +1,5 @@
|
||||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: Engine.pm,v 1.35 2011/11/13 22:18:04 espie Exp $
|
||||
# $OpenBSD: Engine.pm,v 1.36 2011/11/14 21:57:47 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2010 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
@ -78,6 +78,11 @@ sub already_done
|
||||
{
|
||||
}
|
||||
|
||||
sub start_install
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub start
|
||||
{
|
||||
my $self = shift;
|
||||
@ -86,6 +91,9 @@ sub start
|
||||
$self->{engine}->rebuild_info($core);
|
||||
return;
|
||||
}
|
||||
if ($self->start_install($core)) {
|
||||
return $core;
|
||||
}
|
||||
my $o = $self->sorted($core);
|
||||
while (my $v = $o->next) {
|
||||
$self->remove($v);
|
||||
@ -153,9 +161,34 @@ sub new
|
||||
my ($class, $engine, $builder) = @_;
|
||||
my $o = $class->SUPER::new($engine);
|
||||
$o->{builder} = $builder;
|
||||
$o->{toinstall} = [];
|
||||
return $o;
|
||||
}
|
||||
|
||||
sub will_install
|
||||
{
|
||||
my ($self, $v) = @_;
|
||||
push(@{$self->{toinstall}}, $v);
|
||||
}
|
||||
|
||||
sub start_install
|
||||
{
|
||||
my ($self, $core) = @_;
|
||||
return 0 unless $core->is_local;
|
||||
if (my $v = pop @{$self->{toinstall}}) {
|
||||
$self->{builder}->install($v, $core);
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
sub non_empty
|
||||
{
|
||||
my $self = shift;
|
||||
return $self->SUPER::non_empty || @{$self->{toinstall}} > 0;
|
||||
}
|
||||
|
||||
sub new_queue
|
||||
{
|
||||
my ($class, $engine) = @_;
|
||||
@ -480,6 +513,9 @@ sub check_buildable
|
||||
if ($self->adjust($v, 'RDEPENDS') == 0) {
|
||||
delete $self->{built}{$v};
|
||||
$self->{installable}{$v} = $v;
|
||||
if ($v->{wantinstall}) {
|
||||
$self->{buildable}->will_install($v);
|
||||
}
|
||||
$self->log_no_ts('I', $v);
|
||||
$changes++;
|
||||
} elsif (my $d = $self->should_ignore($v,
|
||||
|
@ -1,5 +1,5 @@
|
||||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: Port.pm,v 1.15 2011/11/12 13:19:26 espie Exp $
|
||||
# $OpenBSD: Port.pm,v 1.16 2011/11/14 21:57:47 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2010 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
@ -195,6 +195,39 @@ sub finalize
|
||||
return 1;
|
||||
}
|
||||
|
||||
package DPB::Task::Port::Install;
|
||||
our @ISA=qw(DPB::Task::Port::NoTime);
|
||||
|
||||
sub run
|
||||
{
|
||||
my ($self, $core) = @_;
|
||||
my $job = $core->job;
|
||||
my $v = $job->{v};
|
||||
|
||||
my $sudo = OpenBSD::Paths->sudo;
|
||||
$self->redirect($job->{log});
|
||||
my @cmd = ('/usr/sbin/pkg_add');
|
||||
if ($job->{builder}->{update}) {
|
||||
push(@cmd, "-rqU", "-Dupdate", "-Dupdatedepends");
|
||||
}
|
||||
if ($job->{builder}->{forceupdate}) {
|
||||
push(@cmd, "-Dinstalled");
|
||||
}
|
||||
print join(' ', @cmd, $v->fullpkgname, "\n");
|
||||
my $path = $job->{builder}->{fullrepo}.'/';
|
||||
$ENV{PKG_PATH} = $path;
|
||||
exec{$sudo}($sudo, @cmd, $v->fullpkgname);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
sub finalize
|
||||
{
|
||||
my ($self, $core) = @_;
|
||||
$self->SUPER::finalize($core);
|
||||
$core->{status} = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
package DPB::Task::Port::ShowSize;
|
||||
our @ISA = qw(DPB::Task::Port);
|
||||
@ -330,14 +363,14 @@ sub new
|
||||
push(@{$job->{tasks}},
|
||||
DPB::Task::Port::Signature->new('signature'));
|
||||
} else {
|
||||
$job->add_normal_tasks;
|
||||
$job->add_normal_tasks($builder->{dontclean}{$v->pkgpath});
|
||||
}
|
||||
return $job;
|
||||
}
|
||||
|
||||
sub add_normal_tasks
|
||||
{
|
||||
my $self = shift;
|
||||
my ($self, $dontclean) = @_;
|
||||
|
||||
my @todo;
|
||||
my $builder = $self->{builder};
|
||||
@ -358,7 +391,7 @@ sub add_normal_tasks
|
||||
if ($builder->{size}) {
|
||||
push @todo, 'show-fake-size';
|
||||
}
|
||||
if (!$builder->{dontclean}) {
|
||||
if (!$dontclean) {
|
||||
push @todo, 'clean';
|
||||
}
|
||||
$self->add_tasks(map {DPB::Port::TaskFactory->create($_)} @todo);
|
||||
@ -485,5 +518,23 @@ sub really_watch
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
package DPB::Job::Port::Install;
|
||||
our @ISA = qw(DPB::Job::Port);
|
||||
|
||||
sub new
|
||||
{
|
||||
my ($class, $log, $v, $builder, $e) = @_;
|
||||
my $job = bless {
|
||||
tasks => [],
|
||||
log => $log, v => $v,
|
||||
builder => $builder, endcode => $e},
|
||||
$class;
|
||||
|
||||
push(@{$job->{tasks}},
|
||||
DPB::Task::Port::Install->new('install'));
|
||||
return $job;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: PortBuilder.pm,v 1.13 2011/11/12 13:19:26 espie Exp $
|
||||
# $OpenBSD: PortBuilder.pm,v 1.14 2011/11/14 21:57:47 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2010 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
@ -31,7 +31,7 @@ sub new
|
||||
my $self = bless {
|
||||
state => $state,
|
||||
clean => $state->opt('c'),
|
||||
dontclean => $state->opt('C'),
|
||||
dontclean => $state->{dontclean},
|
||||
fetch => $state->opt('f'),
|
||||
size => $state->opt('s'),
|
||||
rebuild => $state->opt('R'),
|
||||
@ -180,4 +180,14 @@ sub build
|
||||
return $core;
|
||||
}
|
||||
|
||||
sub install
|
||||
{
|
||||
my ($self, $v, $core) = @_;
|
||||
my $log = $self->{logger}->make_logs($v);
|
||||
my $job = DPB::Job::Port::Install->new($log, $v, $self,
|
||||
sub {$core->mark_ready; });
|
||||
$core->start_job($job, $v);
|
||||
return $core;
|
||||
}
|
||||
|
||||
1;
|
||||
|
@ -1,4 +1,4 @@
|
||||
.\" $OpenBSD: dpb.1,v 1.17 2011/11/06 15:42:39 espie Exp $
|
||||
.\" $OpenBSD: dpb.1,v 1.18 2011/11/14 21:57:47 espie Exp $
|
||||
.\"
|
||||
.\" Copyright (c) 2010 Marc Espie <espie@openbsd.org>
|
||||
.\"
|
||||
@ -14,7 +14,7 @@
|
||||
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
.\"
|
||||
.Dd $Mdocdate: November 6 2011 $
|
||||
.Dd $Mdocdate: November 14 2011 $
|
||||
.Dt DPB 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -23,12 +23,14 @@
|
||||
.Sh SYNOPSIS
|
||||
.Nm dpb
|
||||
.Bk -words
|
||||
.Op Fl acCeqrRsuUx
|
||||
.Op Fl aceqrRsuUx
|
||||
.Op Fl A Ar arch
|
||||
.Op Fl b Ar logfile
|
||||
.Op Fl C Ar pathlist
|
||||
.Op Fl D Ar PARAM Ns = Ns Ar value
|
||||
.Op Fl f Ar m
|
||||
.Op Fl h Ar hosts
|
||||
.Op Fl I Ar subdirlist
|
||||
.Op Fl j Ar n
|
||||
.Op Fl L Ar logdir
|
||||
.Op Fl m Ar threshold
|
||||
@ -72,9 +74,10 @@ Prime the heuristics module with a previous build log, so that packages that
|
||||
take a long time to build will happen earlier.
|
||||
.It Fl c
|
||||
Clean port working directory and log before each build.
|
||||
.It Fl C
|
||||
Don't clean port working directory after build.
|
||||
Warning: requires insane amounts of diskspace for a full build.
|
||||
.It Fl C Ar pathlist
|
||||
Don't clean port working directories after build.
|
||||
Use a list of simple pkgpaths, as this does not take multi and flavors into
|
||||
account.
|
||||
.It Fl D Ar PARAM Ns = Ns Ar value
|
||||
Set defined parameter to value.
|
||||
Known parameters are as follows:
|
||||
@ -151,6 +154,9 @@ file can also define a start-up script, as
|
||||
STARTUP=path
|
||||
.Ed
|
||||
which will be run at start-up on each machine.
|
||||
.It Fl I Ar subdirlist
|
||||
List of pkgpaths to install, on the local box.
|
||||
This will also add them to the list of things to build.
|
||||
.It Fl j Ar n
|
||||
Number of concurrent local jobs to run (defaults to hw.ncpu if no hosts file).
|
||||
.It Fl L Ar logdir
|
||||
|
Loading…
x
Reference in New Issue
Block a user