mirror of
https://github.com/NixOS/nix.git
synced 2025-11-08 19:46:02 +01:00
DerivationBuildingGoal::initialOutputs make local variable
Also inline `assertPathValidity` in the process.
This commit is contained in:
parent
c0c2a89f05
commit
a30bf96349
2 changed files with 20 additions and 25 deletions
|
|
@ -417,7 +417,9 @@ Goal::Co DerivationBuildingGoal::gaveUpOnSubstitution()
|
|||
|
||||
Goal::Co DerivationBuildingGoal::tryToBuild()
|
||||
{
|
||||
/* Recheck at goal start. In particular, whereas before we were
|
||||
std::map<std::string, InitialOutput> initialOutputs;
|
||||
|
||||
/* Recheck at this point. In particular, whereas before we were
|
||||
given this information by the downstream goal, that cannot happen
|
||||
anymore if the downstream goal only cares about one output, but
|
||||
we care about all outputs. */
|
||||
|
|
@ -440,7 +442,7 @@ Goal::Co DerivationBuildingGoal::tryToBuild()
|
|||
std::move(v),
|
||||
});
|
||||
}
|
||||
checkPathValidity();
|
||||
checkPathValidity(initialOutputs);
|
||||
|
||||
auto started = [&]() {
|
||||
auto msg =
|
||||
|
|
@ -528,7 +530,7 @@ Goal::Co DerivationBuildingGoal::tryToBuild()
|
|||
omitted, but that would be less efficient.) Note that since we
|
||||
now hold the locks on the output paths, no other process can
|
||||
build this derivation, so no further checks are necessary. */
|
||||
auto [allValid, validOutputs] = checkPathValidity();
|
||||
auto [allValid, validOutputs] = checkPathValidity(initialOutputs);
|
||||
|
||||
if (buildMode != bmCheck && allValid) {
|
||||
debug("skipping build of derivation '%s', someone beat us to it", worker.store.printStorePath(drvPath));
|
||||
|
|
@ -556,7 +558,7 @@ Goal::Co DerivationBuildingGoal::tryToBuild()
|
|||
if (buildLocally) {
|
||||
useHook = false;
|
||||
} else {
|
||||
switch (tryBuildHook()) {
|
||||
switch (tryBuildHook(initialOutputs)) {
|
||||
case rpAccept:
|
||||
/* Yes, it has started doing so. Wait until we get
|
||||
EOF from the hook. */
|
||||
|
|
@ -644,8 +646,16 @@ Goal::Co DerivationBuildingGoal::tryToBuild()
|
|||
|
||||
We can only early return when the outputs are known a priori. For
|
||||
floating content-addressing derivations this isn't the case.
|
||||
|
||||
Aborts if any output is not valid or corrupt, and otherwise
|
||||
returns a 'SingleDrvOutputs' structure containing all outputs.
|
||||
*/
|
||||
assertPathValidity();
|
||||
[&] {
|
||||
auto [allValid, validOutputs] = checkPathValidity(initialOutputs);
|
||||
if (!allValid)
|
||||
throw Error("some outputs are unexpectedly invalid");
|
||||
return validOutputs;
|
||||
}();
|
||||
|
||||
StorePathSet outputPaths;
|
||||
for (auto & [_, output] : builtOutputs)
|
||||
|
|
@ -960,7 +970,7 @@ BuildError DerivationBuildingGoal::fixupBuilderFailureErrorMessage(BuilderFailur
|
|||
return BuildError{e.status, msg};
|
||||
}
|
||||
|
||||
HookReply DerivationBuildingGoal::tryBuildHook()
|
||||
HookReply DerivationBuildingGoal::tryBuildHook(const std::map<std::string, InitialOutput> & initialOutputs)
|
||||
{
|
||||
#ifdef _WIN32 // TODO enable build hook on Windows
|
||||
return rpDecline;
|
||||
|
|
@ -1239,7 +1249,8 @@ std::map<std::string, std::optional<StorePath>> DerivationBuildingGoal::queryPar
|
|||
return res;
|
||||
}
|
||||
|
||||
std::pair<bool, SingleDrvOutputs> DerivationBuildingGoal::checkPathValidity()
|
||||
std::pair<bool, SingleDrvOutputs>
|
||||
DerivationBuildingGoal::checkPathValidity(std::map<std::string, InitialOutput> & initialOutputs)
|
||||
{
|
||||
if (drv->type().isImpure())
|
||||
return {false, {}};
|
||||
|
|
@ -1296,14 +1307,6 @@ std::pair<bool, SingleDrvOutputs> DerivationBuildingGoal::checkPathValidity()
|
|||
return {allValid, validOutputs};
|
||||
}
|
||||
|
||||
SingleDrvOutputs DerivationBuildingGoal::assertPathValidity()
|
||||
{
|
||||
auto [allValid, validOutputs] = checkPathValidity();
|
||||
if (!allValid)
|
||||
throw Error("some outputs are unexpectedly invalid");
|
||||
return validOutputs;
|
||||
}
|
||||
|
||||
Goal::Done DerivationBuildingGoal::doneSuccess(BuildResult::Status status, SingleDrvOutputs builtOutputs)
|
||||
{
|
||||
buildResult.status = status;
|
||||
|
|
|
|||
|
|
@ -55,8 +55,6 @@ private:
|
|||
*/
|
||||
StorePathSet inputPaths;
|
||||
|
||||
std::map<std::string, InitialOutput> initialOutputs;
|
||||
|
||||
/**
|
||||
* File descriptor for the log file.
|
||||
*/
|
||||
|
|
@ -108,7 +106,7 @@ private:
|
|||
/**
|
||||
* Is the build hook willing to perform the build?
|
||||
*/
|
||||
HookReply tryBuildHook();
|
||||
HookReply tryBuildHook(const std::map<std::string, InitialOutput> & initialOutputs);
|
||||
|
||||
/**
|
||||
* Open a log file and a pipe to it.
|
||||
|
|
@ -142,13 +140,7 @@ private:
|
|||
* whether all outputs are valid and non-corrupt, and a
|
||||
* 'SingleDrvOutputs' structure containing the valid outputs.
|
||||
*/
|
||||
std::pair<bool, SingleDrvOutputs> checkPathValidity();
|
||||
|
||||
/**
|
||||
* Aborts if any output is not valid or corrupt, and otherwise
|
||||
* returns a 'SingleDrvOutputs' structure containing all outputs.
|
||||
*/
|
||||
SingleDrvOutputs assertPathValidity();
|
||||
std::pair<bool, SingleDrvOutputs> checkPathValidity(std::map<std::string, InitialOutput> & initialOutputs);
|
||||
|
||||
/**
|
||||
* Forcibly kill the child process, if any.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue