Give Derivation::tryResolve an evalStore argument

This is needed for building CA deriations with a src store / dest store
split. In particular it is needed for Hydra.

https://github.com/NixOS/hydra/issues/838 currently puts realizations,
and thus build outputs, in the local store, but it should not.
This commit is contained in:
John Ericson 2023-12-08 00:44:55 -05:00
parent c3827ff634
commit 96dd757b0c
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