diff options
Diffstat (limited to 'src/libstore/misc.cc')
-rw-r--r-- | src/libstore/misc.cc | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/libstore/misc.cc b/src/libstore/misc.cc index 46b935ee8..aed5f2842 100644 --- a/src/libstore/misc.cc +++ b/src/libstore/misc.cc @@ -109,9 +109,21 @@ void Store::computeFSClosure(const StorePath & startPath, std::optional<ContentAddress> getDerivationCA(const BasicDerivation & drv) { auto out = drv.outputs.find("out"); - if (out != drv.outputs.end()) { - if (auto v = std::get_if<DerivationOutputCAFixed>(&out->second.output)) - return v->hash; + if (out == drv.outputs.end()) + return std::nullopt; + if (auto dof = std::get_if<DerivationOutputCAFixed>(&out->second.output)) { + return std::visit(overloaded { + [&](TextInfo ti) -> std::optional<ContentAddress> { + if (!ti.references.empty()) + return std::nullopt; + return static_cast<TextHash>(ti); + }, + [&](FixedOutputInfo fi) -> std::optional<ContentAddress> { + if (fi.references != PathReferences<StorePath> {}) + return std::nullopt; + return static_cast<FixedOutputHash>(fi); + }, + }, dof->ca); } return std::nullopt; } |