aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/local-store.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2020-02-17 15:46:07 +0100
committerEelco Dolstra <edolstra@gmail.com>2020-02-18 17:51:48 +0100
commit553e584f9231394212bb4d556c4a3eebc8444a63 (patch)
tree743b4e5e1d81bfad1d52579f0c72c8f00cfd209c /src/libstore/local-store.cc
parentd8fd31f50ff55f7f334a2b9e58a82570e82ec28d (diff)
LocalStore::checkDerivationOutputs(): Improve error message
Diffstat (limited to 'src/libstore/local-store.cc')
-rw-r--r--src/libstore/local-store.cc28
1 files changed, 15 insertions, 13 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index b254d766a..e59624cd3 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -547,6 +547,18 @@ void LocalStore::checkDerivationOutputs(const StorePath & drvPath, const Derivat
std::string drvName(drvPath.name());
drvName = string(drvName, 0, drvName.size() - drvExtension.size());
+ auto check = [&](const StorePath & expected, const StorePath & actual, const std::string & varName)
+ {
+ if (actual != expected)
+ throw Error("derivation '%s' has incorrect output '%s', should be '%s'",
+ printStorePath(drvPath), printStorePath(actual), printStorePath(expected));
+ auto j = drv.env.find(varName);
+ if (j == drv.env.end() || parseStorePath(j->second) != actual)
+ throw Error("derivation '%s' has incorrect environment variable '%s', should be '%s'",
+ printStorePath(drvPath), varName, printStorePath(actual));
+ };
+
+
if (drv.isFixedOutput()) {
DerivationOutputs::const_iterator out = drv.outputs.find("out");
if (out == drv.outputs.end())
@@ -554,24 +566,14 @@ void LocalStore::checkDerivationOutputs(const StorePath & drvPath, const Derivat
bool recursive; Hash h;
out->second.parseHashInfo(recursive, h);
- auto outPath = makeFixedOutputPath(recursive, h, drvName);
- StringPairs::const_iterator j = drv.env.find("out");
- if (out->second.path != outPath || j == drv.env.end() || parseStorePath(j->second) != outPath)
- throw Error("derivation '%s' has incorrect output '%s', should be '%s'",
- printStorePath(drvPath), printStorePath(out->second.path), printStorePath(outPath));
+ check(makeFixedOutputPath(recursive, h, drvName), out->second.path, "out");
}
else {
Hash h = hashDerivationModulo(*this, drv, true);
-
- for (auto & i : drv.outputs) {
- auto outPath = makeOutputPath(i.first, h, drvName);
- StringPairs::const_iterator j = drv.env.find(i.first);
- if (i.second.path != outPath || j == drv.env.end() || parseStorePath(j->second) != outPath)
- throw Error("derivation '%s' has incorrect output '%s', should be '%s'",
- printStorePath(drvPath), printStorePath(i.second.path), printStorePath(outPath));
- }
+ for (auto & i : drv.outputs)
+ check(makeOutputPath(i.first, h, drvName), i.second.path, i.first);
}
}