forked from lix-project/hydra
Hydra/29: Added timeout to svn/git checkouts, job evaluation
This commit is contained in:
parent
b59abaeb22
commit
5e2c683f5b
|
@ -158,8 +158,8 @@ sub fetchInputSVN {
|
||||||
$ENV{"PRINT_PATH"} = "1";
|
$ENV{"PRINT_PATH"} = "1";
|
||||||
$ENV{"NIX_PREFETCH_SVN_LEAVE_DOT_SVN"} = "$checkout";
|
$ENV{"NIX_PREFETCH_SVN_LEAVE_DOT_SVN"} = "$checkout";
|
||||||
|
|
||||||
(my $res, $stdout, $stderr) = captureStdoutStderr(
|
(my $res, $stdout, $stderr) = captureStdoutStderr(600,
|
||||||
"nix-prefetch-svn", $uri, $revision);
|
("nix-prefetch-svn", $uri, $revision));
|
||||||
die "Cannot check out Subversion repository `$uri':\n$stderr" unless $res;
|
die "Cannot check out Subversion repository `$uri':\n$stderr" unless $res;
|
||||||
|
|
||||||
($sha256, $storePath) = split ' ', $stdout;
|
($sha256, $storePath) = split ' ', $stdout;
|
||||||
|
@ -275,8 +275,8 @@ sub fetchInputGit {
|
||||||
|
|
||||||
# First figure out the last-modified revision of the URI.
|
# First figure out the last-modified revision of the URI.
|
||||||
my $stdout; my $stderr;
|
my $stdout; my $stderr;
|
||||||
(my $res, $stdout, $stderr) = captureStdoutStderr(
|
(my $res, $stdout, $stderr) = captureStdoutStderr(600,
|
||||||
"git", "ls-remote", $uri, "refs/heads/".$branch);
|
("git", "ls-remote", $uri, "refs/heads/".$branch));
|
||||||
die "Cannot get head revision of Git branch '$branch' at `$uri':\n$stderr" unless $res;
|
die "Cannot get head revision of Git branch '$branch' at `$uri':\n$stderr" unless $res;
|
||||||
|
|
||||||
(my $revision, my $ref) = split ' ', $stdout;
|
(my $revision, my $ref) = split ' ', $stdout;
|
||||||
|
@ -317,8 +317,8 @@ sub fetchInputGit {
|
||||||
# for a discussion.
|
# for a discussion.
|
||||||
$ENV{"NIX_PREFETCH_GIT_DEEP_CLONE"} = "1";
|
$ENV{"NIX_PREFETCH_GIT_DEEP_CLONE"} = "1";
|
||||||
|
|
||||||
(my $res, $stdout, $stderr) = captureStdoutStderr(
|
(my $res, $stdout, $stderr) = captureStdoutStderr(600,
|
||||||
"nix-prefetch-git", $uri, $revision);
|
("nix-prefetch-git", $uri, $revision));
|
||||||
die "Cannot check out Git repository branch '$branch' at `$uri':\n$stderr" unless $res;
|
die "Cannot check out Git repository branch '$branch' at `$uri':\n$stderr" unless $res;
|
||||||
|
|
||||||
($sha256, $storePath) = split ' ', $stdout;
|
($sha256, $storePath) = split ' ', $stdout;
|
||||||
|
@ -426,13 +426,28 @@ sub inputsToArgs {
|
||||||
return @res;
|
return @res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sub captureStdoutStderr {
|
sub captureStdoutStderr {
|
||||||
my $stdin = ""; my $stdout; my $stderr;
|
(my $timeout, my @cmd) = @_;
|
||||||
my $res = IPC::Run::run(\@_, \$stdin, \$stdout, \$stderr);
|
my $res;
|
||||||
|
my $stdin = "";
|
||||||
|
my $stdout;
|
||||||
|
my $stderr;
|
||||||
|
|
||||||
|
eval {
|
||||||
|
local $SIG{ALRM} = sub { die "timeout\n" }; # NB: \n required
|
||||||
|
alarm $timeout;
|
||||||
|
|
||||||
|
$res = IPC::Run::run(\@cmd, \$stdin, \$stdout, \$stderr);
|
||||||
|
alarm 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($@) {
|
||||||
|
die unless $@ eq "timeout\n"; # propagate unexpected errors
|
||||||
|
return (undef, undef, undef);
|
||||||
|
} else {
|
||||||
return ($res, $stdout, $stderr);
|
return ($res, $stdout, $stderr);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub evalJobs {
|
sub evalJobs {
|
||||||
my ($inputInfo, $nixExprInputName, $nixExprPath) = @_;
|
my ($inputInfo, $nixExprInputName, $nixExprPath) = @_;
|
||||||
|
@ -443,9 +458,8 @@ sub evalJobs {
|
||||||
if scalar @{$inputInfo->{$nixExprInputName}} != 1;
|
if scalar @{$inputInfo->{$nixExprInputName}} != 1;
|
||||||
my $nixExprFullPath = $nixExprInput->{storePath} . "/" . $nixExprPath;
|
my $nixExprFullPath = $nixExprInput->{storePath} . "/" . $nixExprPath;
|
||||||
|
|
||||||
(my $res, my $jobsXml, my $stderr) = captureStdoutStderr(
|
(my $res, my $jobsXml, my $stderr) = captureStdoutStderr(10800,
|
||||||
"hydra_eval_jobs", $nixExprFullPath, "--gc-roots-dir", getGCRootsDir,
|
("hydra_eval_jobs", $nixExprFullPath, "--gc-roots-dir", getGCRootsDir, inputsToArgs($inputInfo)));
|
||||||
inputsToArgs($inputInfo));
|
|
||||||
die "Cannot evaluate the Nix expression containing the jobs:\n$stderr" unless $res;
|
die "Cannot evaluate the Nix expression containing the jobs:\n$stderr" unless $res;
|
||||||
|
|
||||||
print STDERR "$stderr";
|
print STDERR "$stderr";
|
||||||
|
|
Loading…
Reference in a new issue