forked from lix-project/lix
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:
parent
c3827ff634
commit
96dd757b0c
|
@ -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) };
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue