* Add a NarSize field to Hydra manifests. This allows nix-env
to predict how much disk space a package will require. * Compute the output / closure size using the info stored in the Nix database (rather than doing a slow "du").
This commit is contained in:
parent
ba31684153
commit
a93e272364
4
deps.nix
4
deps.nix
|
@ -8,8 +8,8 @@ let
|
||||||
name = "Nix-0.15";
|
name = "Nix-0.15";
|
||||||
src = fetchsvn {
|
src = fetchsvn {
|
||||||
url = https://svn.nixos.org/repos/nix/nix-perl/trunk;
|
url = https://svn.nixos.org/repos/nix/nix-perl/trunk;
|
||||||
rev = 24765;
|
rev = 24774;
|
||||||
sha256 = "12ah8c8p9bx55hd17lhcfc74bd4r1677dxy0id3008pww1aklir7";
|
sha256 = "1akj695gpnbrjlnwd1gdnnnk7ppvpp1qsinjn04az7q6hjqzbm6p";
|
||||||
};
|
};
|
||||||
NIX_PREFIX = nixSqlite;
|
NIX_PREFIX = nixSqlite;
|
||||||
doCheck = false; # tests currently don't work
|
doCheck = false; # tests currently don't work
|
||||||
|
|
|
@ -9,7 +9,7 @@ use Hydra::Helper::CatalystUtils;
|
||||||
|
|
||||||
our @ISA = qw(Exporter);
|
our @ISA = qw(Exporter);
|
||||||
our @EXPORT = qw(
|
our @EXPORT = qw(
|
||||||
isValidPath queryPathInfo
|
isValidPath
|
||||||
getHydraPath getHydraDBPath openHydraDB txn_do
|
getHydraPath getHydraDBPath openHydraDB txn_do
|
||||||
registerRoot getGCRootsDir gcRootFor
|
registerRoot getGCRootsDir gcRootFor
|
||||||
getPrimaryBuildsForView
|
getPrimaryBuildsForView
|
||||||
|
@ -23,17 +23,6 @@ sub isValidPath {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sub queryPathInfo {
|
|
||||||
my $path = shift;
|
|
||||||
|
|
||||||
my $hash = Nix::queryPathHash($path);
|
|
||||||
my $deriver = Nix::queryDeriver($path);
|
|
||||||
my @refs = Nix::queryReferences($path);
|
|
||||||
|
|
||||||
return ($hash, $deriver, \@refs);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sub getHydraPath {
|
sub getHydraPath {
|
||||||
my $dir = $ENV{"HYDRA_DATA"};
|
my $dir = $ENV{"HYDRA_DATA"};
|
||||||
die "The HYDRA_DATA environment variable is not set!\n" unless defined $dir;
|
die "The HYDRA_DATA environment variable is not set!\n" unless defined $dir;
|
||||||
|
|
|
@ -21,7 +21,7 @@ sub process {
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
foreach my $path (@paths) {
|
foreach my $path (@paths) {
|
||||||
my ($hash, $deriver, $refs) = queryPathInfo $path;
|
my ($deriver, $hash, $time, $narSize, $refs) = Nix::queryPathInfo $path;
|
||||||
|
|
||||||
# Escape the characters that are allowed to appear in a Nix
|
# Escape the characters that are allowed to appear in a Nix
|
||||||
# path name but have special meaning in a URI.
|
# path name but have special meaning in a URI.
|
||||||
|
@ -40,6 +40,7 @@ sub process {
|
||||||
(defined $deriver ? " Deriver: $deriver\n" : "") .
|
(defined $deriver ? " Deriver: $deriver\n" : "") .
|
||||||
" NarURL: $url\n" .
|
" NarURL: $url\n" .
|
||||||
" NarHash: $hash\n" .
|
" NarHash: $hash\n" .
|
||||||
|
($narSize != 0 ? " NarSize: $narSize\n" : "") .
|
||||||
"}\n";
|
"}\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -199,10 +199,6 @@ sub sendEmailNotification {
|
||||||
sendmail($email);
|
sendmail($email);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub getSize {
|
|
||||||
my $size = `du -bcs @_ 2> /dev/null | tail -1 | cut -f 1 `;
|
|
||||||
return int($size);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub doBuild {
|
sub doBuild {
|
||||||
my ($build) = @_;
|
my ($build) = @_;
|
||||||
|
@ -233,7 +229,7 @@ sub doBuild {
|
||||||
# Run Nix to perform the build, and monitor the stderr output
|
# Run Nix to perform the build, and monitor the stderr output
|
||||||
# to get notifications about specific build steps, the
|
# to get notifications about specific build steps, the
|
||||||
# associated log files, etc.
|
# associated log files, etc.
|
||||||
my $cmd = "nix-store --realise $drvPath " .
|
my $cmd = "nix-store -j1 --no-build-hook --realise $drvPath " .
|
||||||
"--max-silent-time $maxsilent --keep-going --fallback " .
|
"--max-silent-time $maxsilent --keep-going --fallback " .
|
||||||
"--no-build-output --log-type flat --print-build-trace " .
|
"--no-build-output --log-type flat --print-build-trace " .
|
||||||
"--add-root " . gcRootFor $outPath . " 2>&1";
|
"--add-root " . gcRootFor $outPath . " 2>&1";
|
||||||
|
@ -371,13 +367,20 @@ sub doBuild {
|
||||||
done:
|
done:
|
||||||
my $logfile = getBuildLog($drvPath);
|
my $logfile = getBuildLog($drvPath);
|
||||||
|
|
||||||
my $logsize = defined $logfile ? getSize($logfile) : 0;
|
my $logsize = defined $logfile ? stat($logfile)->size : 0;
|
||||||
my $size = isValidPath($outPath) ? getSize($outPath) : 0;
|
|
||||||
|
|
||||||
|
my $size = 0;
|
||||||
my $closuresize = 0;
|
my $closuresize = 0;
|
||||||
|
|
||||||
if (isValidPath($outPath)) {
|
if (isValidPath($outPath)) {
|
||||||
(my $hash, my $deriver, my $refs) = queryPathInfo($outPath) ;
|
my ($deriver, $hash, $time, $narSize, $refs) = Nix::queryPathInfo($outPath);
|
||||||
$closuresize = getSize(@{$refs});
|
$size = $narSize;
|
||||||
|
|
||||||
|
my @closure = Nix::computeFSClosure(0, 0, $outPath);
|
||||||
|
foreach my $path (@closure) {
|
||||||
|
my ($deriver, $hash, $time, $narSize, $refs) = Nix::queryPathInfo($path);
|
||||||
|
$closuresize += $narSize;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
txn_do($db, sub {
|
txn_do($db, sub {
|
||||||
|
|
Loading…
Reference in a new issue