Merge pull request #9563 from obsidiansystems/tryResolve-evalStore

Give `Derivation::tryResolve` an `evalStore` argument
This commit is contained in:
Théophane Hufschmitt 2023-12-08 19:21:35 +01:00 committed by GitHub
commit 36ca6adc60
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 4 additions and 4 deletions

View file

@ -558,7 +558,7 @@ void DerivationGoal::inputsRealised()
inputDrvOutputs statefully, sometimes it gets out of sync with inputDrvOutputs statefully, sometimes it gets out of sync with
the real source of truth (store). So we query the store the real source of truth (store). So we query the store
directly if there's a problem. */ directly if there's a problem. */
attempt = fullDrv.tryResolve(worker.store); attempt = fullDrv.tryResolve(worker.store, &worker.evalStore);
} }
assert(attempt); assert(attempt);
Derivation drvResolved { std::move(*attempt) }; Derivation drvResolved { std::move(*attempt) };

View file

@ -1002,13 +1002,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::map<std::pair<StorePath, std::string>, StorePath> inputDrvOutputs;
std::function<void(const StorePath &, const DerivedPathMap<StringSet>::ChildNode &)> accum; std::function<void(const StorePath &, const DerivedPathMap<StringSet>::ChildNode &)> accum;
accum = [&](auto & inputDrv, auto & node) { accum = [&](auto & inputDrv, auto & node) {
for (auto & [outputName, outputPath] : store.queryPartialDerivationOutputMap(inputDrv)) { for (auto & [outputName, outputPath] : store.queryPartialDerivationOutputMap(inputDrv, evalStore)) {
if (outputPath) { if (outputPath) {
inputDrvOutputs.insert_or_assign({inputDrv, outputName}, *outputPath); inputDrvOutputs.insert_or_assign({inputDrv, outputName}, *outputPath);
if (auto p = get(node.childMap, outputName)) if (auto p = get(node.childMap, outputName))

View file

@ -342,7 +342,7 @@ struct Derivation : BasicDerivation
* 2. Input placeholders are replaced with realized input store * 2. Input placeholders are replaced with realized input store
* paths. * 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 * Like the above, but instead of querying the Nix database for