aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/local-store.cc
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2023-07-19 14:52:35 -0400
committerJohn Ericson <John.Ericson@Obsidian.Systems>2023-07-20 15:59:52 -0400
commit6bc98c7fba9f783414692fcef41d90ed80928b6c (patch)
treec6e79f43ed32d133a62135497b35b73d6c2b1126 /src/libstore/local-store.cc
parentf62543fe1cc544a5684af327f63a1aeb1bdeba94 (diff)
Give `queryPartialDerivationOutputMap` an `evalStore` parameter
This makes it more useful. In general, the derivation will be in one store, and the realisation info is in another. This also helps us avoid duplication. See how `resolveDerivedPath` is now simpler because it uses `queryPartialDerivationOutputMap`. In #8369 we get more flavors of derived path, and need more code to resolve them all, and this problem only gets worse. The fact that we need a new method to deal with the multiple dispatch is unfortunate, but this generally relates to the fact that `Store` is a sub-par interface, too bulky/unwieldy and conflating separate concerns. Solving that is out of scope of this PR. This is part of the RFC 92 work. See tracking issue #6316
Diffstat (limited to 'src/libstore/local-store.cc')
-rw-r--r--src/libstore/local-store.cc19
1 files changed, 2 insertions, 17 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index 892ff2295..010e52019 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -1022,9 +1022,9 @@ StorePathSet LocalStore::queryValidDerivers(const StorePath & path)
std::map<std::string, std::optional<StorePath>>
-LocalStore::queryPartialDerivationOutputMap(const StorePath & path)
+LocalStore::queryStaticPartialDerivationOutputMap(const StorePath & path)
{
- auto outputs = retrySQLite<std::map<std::string, std::optional<StorePath>>>([&]() {
+ return retrySQLite<std::map<std::string, std::optional<StorePath>>>([&]() {
auto state(_state.lock());
std::map<std::string, std::optional<StorePath>> outputs;
uint64_t drvId;
@@ -1036,21 +1036,6 @@ LocalStore::queryPartialDerivationOutputMap(const StorePath & path)
return outputs;
});
-
- if (!experimentalFeatureSettings.isEnabled(Xp::CaDerivations))
- return outputs;
-
- auto drv = readInvalidDerivation(path);
- auto drvHashes = staticOutputHashes(*this, drv);
- for (auto& [outputName, hash] : drvHashes) {
- auto realisation = queryRealisation(DrvOutput{hash, outputName});
- if (realisation)
- outputs.insert_or_assign(outputName, realisation->outPath);
- else
- outputs.insert({outputName, std::nullopt});
- }
-
- return outputs;
}
std::optional<StorePath> LocalStore::queryPathFromHashPart(const std::string & hashPart)