more or less "the final" dpb pieces for fetching as a separate user.
This commit is contained in:
parent
8305696d7b
commit
c148e02ce4
@ -1,5 +1,5 @@
|
||||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: Fetch.pm,v 1.63 2014/03/17 10:48:40 espie Exp $
|
||||
# $OpenBSD: Fetch.pm,v 1.64 2015/04/27 13:32:57 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2010-2013 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
@ -22,6 +22,7 @@ use OpenBSD::md5;
|
||||
|
||||
# handles fetch information, if required
|
||||
package DPB::Fetch;
|
||||
our @ISA = (qw(DPB::UserProxy));
|
||||
|
||||
sub new
|
||||
{
|
||||
@ -30,6 +31,7 @@ sub new
|
||||
logger => $logger,
|
||||
known_sha => {}, known_files => {},
|
||||
known_short => {},
|
||||
user => $state->{fetch_user},
|
||||
fetch_only => $state->{fetch_only}}, $class;
|
||||
if (defined $state->{subst}->value('FTP_ONLY')) {
|
||||
$o->{ftp_only} = 1;
|
||||
@ -105,7 +107,7 @@ sub run_expire_old
|
||||
$core->unsquiggle;
|
||||
$core->start_job(DPB::Job::Normal->new(
|
||||
sub {
|
||||
$self->expire_old;
|
||||
$self->run_as(sub { $self->expire_old; });
|
||||
},
|
||||
sub {
|
||||
# and we will never need this again
|
||||
@ -292,7 +294,8 @@ sub fetch
|
||||
{
|
||||
my ($self, $file, $core, $endcode) = @_;
|
||||
require DPB::Job::Fetch;
|
||||
my $job = DPB::Job::Fetch->new($file, $endcode);
|
||||
my $job = DPB::Job::Fetch->new($file, $endcode, $self,
|
||||
$self->{logger});
|
||||
$core->start_job($job, $file);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: Fetch.pm,v 1.3 2015/04/25 11:24:24 espie Exp $
|
||||
# $OpenBSD: Fetch.pm,v 1.4 2015/04/27 13:32:57 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2010-2013 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
@ -30,7 +30,10 @@ sub run
|
||||
{
|
||||
my ($self, $core) = @_;
|
||||
my $job = $core->job;
|
||||
$self->redirect_fh($job->{logfh}, $job->{log});
|
||||
$job->{logger}->run_as(
|
||||
sub {
|
||||
$self->redirect_fh($job->{logfh}, $job->{log});
|
||||
});
|
||||
exit(!$job->{file}->checksum($job->{file}->tempfilename));
|
||||
}
|
||||
|
||||
@ -44,13 +47,19 @@ sub finalize
|
||||
# got a stupid error message instead, so retry for
|
||||
# full size.
|
||||
if (defined $self->{fetcher}->{initial_sz}) {
|
||||
unlink($job->{file}->tempfilename);
|
||||
$job->{fetcher}->run_as(
|
||||
sub {
|
||||
unlink($job->{file}->tempfilename);
|
||||
});
|
||||
} else {
|
||||
shift @{$job->{sites}};
|
||||
}
|
||||
return $job->bad_file($self->{fetcher}, $core);
|
||||
}
|
||||
rename($job->{file}->tempfilename, $job->{file}->filename);
|
||||
$job->{fetcher}->run_as(
|
||||
sub {
|
||||
rename($job->{file}->tempfilename, $job->{file}->filename);
|
||||
});
|
||||
print {$job->{logfh}} "Renamed to ", $job->{file}->filename, "\n";
|
||||
$job->{file}->cache;
|
||||
my $sz = $job->{file}->{sz};
|
||||
@ -103,7 +112,10 @@ sub run
|
||||
my $shell = $core->shell;
|
||||
my $site = $self->{site};
|
||||
$site =~ s/^\"(.*)\"$/$1/;
|
||||
$self->redirect($job->{log});
|
||||
$job->{logger}->run_as(
|
||||
sub {
|
||||
$self->redirect($job->{log});
|
||||
});
|
||||
if ($job->{file}{sz} == 0) {
|
||||
print STDERR "No size in distinfo\n";
|
||||
exit(1);
|
||||
@ -119,7 +131,7 @@ sub run
|
||||
print STDERR "===> Trying $site\n";
|
||||
print STDERR join(' ', @cmd), "\n";
|
||||
# run ftp;
|
||||
$core->shell->nochroot->exec(@cmd);
|
||||
$core->shell->nochroot->run_as($job->{fetcher}{user})->exec(@cmd);
|
||||
}
|
||||
|
||||
sub finalize
|
||||
@ -139,7 +151,10 @@ sub finalize
|
||||
# definite error also if file is too large
|
||||
stat($job->{file}->tempfilename) &&
|
||||
(stat _)[7] > $job->{file}->{sz}) {
|
||||
unlink($job->{file}->tempfilename);
|
||||
$job->{fetcher}->run_as(
|
||||
sub {
|
||||
unlink($job->{file}->tempfilename);
|
||||
});
|
||||
}
|
||||
# if we got suspended, well, might have to retry same site
|
||||
if (!$self->{got_suspended}) {
|
||||
@ -190,17 +205,22 @@ sub new_checksum_task
|
||||
|
||||
sub new
|
||||
{
|
||||
my ($class, $file, $e) = @_;
|
||||
my ($class, $file, $e, $fetcher, $logger) = @_;
|
||||
my $job = bless {
|
||||
sites => [@{$file->{site}}],
|
||||
file => $file,
|
||||
tasks => [],
|
||||
endcode => $e,
|
||||
fetcher => $fetcher,
|
||||
logger => $logger,
|
||||
log => $file->logger->make_distlogs($file),
|
||||
}, $class;
|
||||
open $job->{logfh}, '>>', $job->{log};
|
||||
$job->{logger}->run_as(
|
||||
sub {
|
||||
open $job->{logfh}, '>>', $job->{log};
|
||||
});
|
||||
print {$job->{logfh}} ">>> From ", $file->fullpkgpath, "\n";
|
||||
File::Path::mkpath(File::Basename::dirname($file->filename));
|
||||
$job->{fetcher}->make_path(File::Basename::dirname($file->filename));
|
||||
$job->{watched} = DPB::Watch->new($file->tempfilename,
|
||||
$file->{sz}, undef, $job->{started});
|
||||
$job->new_fetch_task;
|
||||
|
@ -1,5 +1,5 @@
|
||||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: State.pm,v 1.11 2015/04/26 18:00:19 espie Exp $
|
||||
# $OpenBSD: State.pm,v 1.12 2015/04/27 13:32:57 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2010-2013 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
@ -195,6 +195,11 @@ sub grabber
|
||||
return shift->{grabber};
|
||||
}
|
||||
|
||||
sub fetch
|
||||
{
|
||||
return shift->{grabber}{fetch};
|
||||
}
|
||||
|
||||
sub make
|
||||
{
|
||||
return shift->{make};
|
||||
|
@ -1,5 +1,5 @@
|
||||
# ex:ts=8 sw=4:
|
||||
# $OpenBSD: Fetch.pm,v 1.3 2013/10/26 06:51:28 espie Exp $
|
||||
# $OpenBSD: Fetch.pm,v 1.4 2015/04/27 13:32:57 espie Exp $
|
||||
#
|
||||
# Copyright (c) 2010-2013 Marc Espie <espie@openbsd.org>
|
||||
#
|
||||
@ -49,7 +49,7 @@ sub start_build
|
||||
{
|
||||
my ($self, $v, $core, $lock) = @_;
|
||||
$self->log('J', $v);
|
||||
DPB::Fetch->fetch($v, $core,
|
||||
$self->{engine}{state}->fetch->fetch($v, $core,
|
||||
sub {
|
||||
$self->end($core, $v, $core->{status});
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user