summaryrefslogtreecommitdiff
path: root/nix/libstore
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2016-01-12 14:54:39 +0100
committerLudovic Courtès <ludo@gnu.org>2016-05-31 14:25:28 +0200
commitf83e82cd00653b443b180ad100886bd096209b83 (patch)
treeb7031e8ec987478d93622dfbe67b1c892dac786b /nix/libstore
parentc56cd90cc93898ce4633cebc6ec5e490eb10fce4 (diff)
daemon: check: Fix assertion failure when some outputs are missing.
E.g. $ nix-build pkgs/stdenv/linux/ -A stage1.pkgs.perl --check nix-store: src/libstore/build.cc:1323: void nix::DerivationGoal::tryToBuild(): Assertion `buildMode != bmCheck || validPaths.size() == drv->outputs.size()' failed. when perl.out exists but perl.man doesn't. The fix is to only check the outputs that exist. Note that "nix-build -A stage1.pkgs.all --check" will still give a (proper) error in this case.
Diffstat (limited to 'nix/libstore')
-rw-r--r--nix/libstore/build.cc2
1 files changed, 1 insertions, 1 deletions
diff --git a/nix/libstore/build.cc b/nix/libstore/build.cc
index 2f8b4dabba..07babf9797 100644
--- a/nix/libstore/build.cc
+++ b/nix/libstore/build.cc
@@ -1291,7 +1291,6 @@ void DerivationGoal::tryToBuild()
now hold the locks on the output paths, no other process can
build this derivation, so no further checks are necessary. */
validPaths = checkPathValidity(true, buildMode == bmRepair);
- assert(buildMode != bmCheck || validPaths.size() == drv.outputs.size());
if (buildMode != bmCheck && validPaths.size() == drv.outputs.size()) {
debug(format("skipping build of derivation `%1%', someone beat us to it") % drvPath);
outputLocks.setDeletion(true);
@@ -2430,6 +2429,7 @@ void DerivationGoal::registerOutputs()
PathSet references = scanForReferences(actualPath, allPaths, hash);
if (buildMode == bmCheck) {
+ if (!store->isValidPath(path)) continue;
ValidPathInfo info = worker.store.queryPathInfo(path);
if (hash.first != info.hash)
throw Error(format("derivation `%1%' may not be deterministic: hash mismatch in output `%2%'") % drvPath % path);