aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2020-06-03 18:53:04 +0000
committerJohn Ericson <John.Ericson@Obsidian.Systems>2020-06-03 18:53:04 +0000
commit74b251b2f3d6414de051c8523011c0ee3c5ea154 (patch)
treeb217515baad30ef11ce10f93fcec4f00dc9b739d
parent3a9e4c32624b36b70cf8d553fd76a85ee97773ab (diff)
Don't anticipate multiple CA outputs for now
-rw-r--r--src/libstore/local-store.cc38
1 files changed, 15 insertions, 23 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index 1db450ee8..80b48d308 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -552,29 +552,21 @@ void LocalStore::checkDerivationOutputs(const StorePath & drvPath, const Derivat
};
- // Don't need the answer, but do this anyways to assert is proper
- // combination. The code below is more general and naturally allows
- // combinations that are currently prohibited.
- drv.type();
-
- std::optional<Hash> h;
- for (auto & i : drv.outputs) {
- if (i.second.hashAlgo == "") {
- if (!h) {
- // somewhat expensive so we do lazily
- h = hashDerivationModulo(*this, drv, true);
- }
- StorePath path = makeOutputPath(i.first, *h, drvName);
- check(path, i.second.path, i.first);
- } else {
- if (i.second.hash == "") {
- throw Error("Fixed output derivation needs hash");
- }
- FileIngestionMethod recursive; Hash h;
- i.second.parseHashInfo(recursive, h);
- StorePath path = makeFixedOutputPath(recursive, h, drvName);
- check(path, i.second.path, i.first);
- }
+ if (derivationIsFixed(drv.type())) {
+ DerivationOutputs::const_iterator out = drv.outputs.find("out");
+ if (out == drv.outputs.end())
+ throw Error("derivation '%s' does not have an output named 'out'", printStorePath(drvPath));
+
+ FileIngestionMethod method; Hash h;
+ out->second.parseHashInfo(method, h);
+
+ check(makeFixedOutputPath(method, h, drvName), out->second.path, "out");
+ }
+
+ else {
+ Hash h = hashDerivationModulo(*this, drv, true);
+ for (auto & i : drv.outputs)
+ check(makeOutputPath(i.first, h, drvName), i.second.path, i.first);
}
}