summaryrefslogtreecommitdiff
path: root/lib/SlackBuilder.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/SlackBuilder.pm')
-rw-r--r--lib/SlackBuilder.pm59
1 files changed, 48 insertions, 11 deletions
diff --git a/lib/SlackBuilder.pm b/lib/SlackBuilder.pm
index bf792bf..6c0504d 100644
--- a/lib/SlackBuilder.pm
+++ b/lib/SlackBuilder.pm
@@ -6,6 +6,7 @@ use SlackBuild::Config;
use SlackBuild::URI;
use SlackBuild::Archive;
use SlackBuild::Registry;
+use SlackBuild::Registry::Record;
use SlackBuild::Request;
use SlackBuild::Rc;
use SlackBuild::Counter;
@@ -336,11 +337,6 @@ sub _runcap_diag {
}
$self->errno(E_EXEC);
}
-
-sub _logfilename {
- my $self = shift;
- return File::Spec->catfile($self->logdir, $self->package_name . '.log');
-}
sub _prepare {
my $self = shift;
@@ -487,6 +483,40 @@ sub parser_err {
$self->${\$parser_err[$self->state]}($line);
}
+sub commit_log {
+ my ($self, $logfd) = @_;
+ my $init;
+ my @v = map {
+ my $r = SlackBuild::Registry::Record->split($_);
+ if ($r && (!$init || $r->package eq $self->package_name)) {
+ $init = 1;
+ $r
+ }
+ } $self->output_files;
+ my $r;
+ if (@v) {
+ $r = pop(@v);
+ } else {
+ $r = SlackBuild::Registry::Record->new(
+ $self->package_name,
+ version => $self->package_version || 'UNKNOWN',
+ build => $self->package_build,
+ arch => $self->arch);
+ }
+ my $logname = File::Spec->catfile($self->logdir, $r . '.log');
+ unless (rename $logfd->filename, $logname) {
+ $self->logger->error("can't rename "
+ . $logfd->filename
+ . " to "
+ . $logname
+ . ": $!");
+ $logname = $logfd->filename;
+ }
+ chmod 0666 & ~ umask(), $logname
+ or $self->logger->error("can't change file mode of $logname: $!");
+ $self->logger->info("Log file: $logname");
+}
+
sub _build {
my $self = shift;
@@ -512,13 +542,16 @@ sub _build {
$self->os_release('VERSION'),
$self->arch));
- open(my $logfd, '>', $self->_logfilename)
- or do {
- $self->logger->fatal("can't create log file " .
- $self->_logfilename .
- ": $!");
- return $self->errno(E_FAIL);
+ my $logfd = try {
+ File::Temp->new(UNLINK => 0,
+ TEMPLATE => $self->package_name . ".XXXXXX",
+ DIR => $self->logdir,
+ SUFFIX => '.log');
+ } catch {
+ $self->logger->fatal("can't create log file: ". (split /\n/)[0]);
+ undef;
};
+ return $self->errno(E_FAIL) unless $logfd;
$self->state(ST_INIT);
my $obj = new POSIX::Run::Capture(
@@ -541,9 +574,13 @@ sub _build {
if ($obj->run) {
$self->_runcap_diag($obj);
} else {
+ $self->commit_log($logfd);
$self->logger->fatal("can't run docker: ".strerror($obj->errno));
return $self->errno(E_EXEC);
}
+
+ $self->commit_log($logfd);
+
return $self->errno(E_OK);
}

Return to:

Send suggestions and report system problems to the System administrator.