aboutsummaryrefslogtreecommitdiff
path: root/src/libstore
diff options
context:
space:
mode:
authoreldritch horrors <pennae@lix.systems>2024-03-04 06:32:46 +0100
committereldritch horrors <pennae@lix.systems>2024-03-04 07:11:25 +0100
commitd42cd24afe1ff417a33c769d666cb2af231ca40b (patch)
tree9febe77ffac51516fb9af1edd3af10ff501cbb2c /src/libstore
parentdd2926f7ea378833c02326b983baca8008ff27f0 (diff)
Merge pull request #9563 from obsidiansystems/tryResolve-evalStore
Give `Derivation::tryResolve` an `evalStore` argument (cherry picked from commit 36ca6adc60511dc822870f2df43c0a578e481925) Change-Id: If76b185a01ffa982e4c49cf333a9b5fbf9edebfe
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/build/derivation-goal.cc2
-rw-r--r--src/libstore/derivations.cc4
-rw-r--r--src/libstore/derivations.hh2
3 files changed, 4 insertions, 4 deletions
diff --git a/src/libstore/build/derivation-goal.cc b/src/libstore/build/derivation-goal.cc
index 4a422ea94..01e34448b 100644
--- a/src/libstore/build/derivation-goal.cc
+++ b/src/libstore/build/derivation-goal.cc
@@ -558,7 +558,7 @@ void DerivationGoal::inputsRealised()
inputDrvOutputs statefully, sometimes it gets out of sync with
the real source of truth (store). So we query the store
directly if there's a problem. */
- attempt = fullDrv.tryResolve(worker.store);
+ attempt = fullDrv.tryResolve(worker.store, &worker.evalStore);
}
assert(attempt);
Derivation drvResolved { std::move(*attempt) };
diff --git a/src/libstore/derivations.cc b/src/libstore/derivations.cc
index 6678227fe..0013193dd 100644
--- a/src/libstore/derivations.cc
+++ b/src/libstore/derivations.cc
@@ -1003,13 +1003,13 @@ static void rewriteDerivation(Store & store, BasicDerivation & drv, const String
}
-std::optional<BasicDerivation> Derivation::tryResolve(Store & store) const
+std::optional<BasicDerivation> Derivation::tryResolve(Store & store, Store * evalStore) const
{
std::map<std::pair<StorePath, std::string>, StorePath> inputDrvOutputs;
std::function<void(const StorePath &, const DerivedPathMap<StringSet>::ChildNode &)> accum;
accum = [&](auto & inputDrv, auto & node) {
- for (auto & [outputName, outputPath] : store.queryPartialDerivationOutputMap(inputDrv)) {
+ for (auto & [outputName, outputPath] : store.queryPartialDerivationOutputMap(inputDrv, evalStore)) {
if (outputPath) {
inputDrvOutputs.insert_or_assign({inputDrv, outputName}, *outputPath);
if (auto p = get(node.childMap, outputName))
diff --git a/src/libstore/derivations.hh b/src/libstore/derivations.hh
index fa14e7536..7309918ce 100644
--- a/src/libstore/derivations.hh
+++ b/src/libstore/derivations.hh
@@ -340,7 +340,7 @@ struct Derivation : BasicDerivation
* 2. Input placeholders are replaced with realized input store
* paths.
*/
- std::optional<BasicDerivation> tryResolve(Store & store) const;
+ std::optional<BasicDerivation> tryResolve(Store & store, Store * evalStore = nullptr) const;
/**
* Like the above, but instead of querying the Nix database for