Use Deferred when building an input-addressed drv

Easier than using dummy path with input addressed.
This commit is contained in:
John Ericson 2022-03-18 02:07:31 +00:00
parent e433e42c5a
commit 8496be7def
2 changed files with 9 additions and 17 deletions

View file

@ -1194,9 +1194,7 @@ static void prim_derivationStrict(EvalState & state, const Pos & pos, Value * *
for (auto & i : outputs) {
drv.env[i] = "";
drv.outputs.insert_or_assign(i,
DerivationOutput::InputAddressed {
.path = StorePath::dummy,
});
DerivationOutput::Deferred { });
}
// Regular, non-CA derivation should always return a single hash and not
@ -1207,19 +1205,15 @@ static void prim_derivationStrict(EvalState & state, const Pos & pos, Value * *
auto & h = drvHash.hash;
switch (drvHash.kind) {
case DrvHash::Kind::Deferred:
for (auto & i : outputs) {
drv.outputs.insert_or_assign(i,
DerivationOutput::Deferred { });
}
/* Outputs already deferred, nothing to do */
break;
case DrvHash::Kind::Regular:
for (auto & i : outputs) {
auto outPath = state.store->makeOutputPath(i, h, drvName);
drv.env[i] = state.store->printStorePath(outPath);
drv.outputs.insert_or_assign(i,
DerivationOutput::InputAddressed {
.path = std::move(outPath),
});
for (auto & [outputName, output] : drv.outputs) {
auto outPath = state.store->makeOutputPath(outputName, h, drvName);
drv.env[outputName] = state.store->printStorePath(outPath);
output = DerivationOutput::InputAddressed {
.path = std::move(outPath),
};
}
break;
}

View file

@ -201,9 +201,7 @@ static StorePath getDerivationEnvironment(ref<Store> store, ref<Store> evalStore
}
} else {
for (auto & output : drv.outputs) {
output.second = DerivationOutput::InputAddressed {
.path = StorePath::dummy,
};
output.second = DerivationOutput::Deferred { };
drv.env[output.first] = "";
}
auto h0 = hashDerivationModulo(*evalStore, drv, true);