diff --git a/src/hydra-queue-runner/queue-monitor.cc b/src/hydra-queue-runner/queue-monitor.cc index bc956453..7d747d3e 100644 --- a/src/hydra-queue-runner/queue-monitor.cc +++ b/src/hydra-queue-runner/queue-monitor.cc @@ -1,6 +1,7 @@ #include "state.hh" #include "hydra-build-result.hh" #include "globals.hh" +#include "parsed-derivations.hh" #include @@ -463,14 +464,17 @@ Step::ptr State::createStep(ref destStore, it's not runnable yet, and other threads won't make it runnable while step->created == false. */ step->drv = std::make_unique(localStore->readDerivation(drvPath)); - step->parsedDrv = std::make_unique(drvPath, *step->drv); + { + auto parsedDrv = ParsedDerivation{drvPath, *step->drv}; + step->drvOptions = std::make_unique(DerivationOptions::fromParsedDerivation(parsedDrv)); + } - step->preferLocalBuild = step->parsedDrv->willBuildLocally(*localStore); + step->preferLocalBuild = step->drvOptions->willBuildLocally(*localStore, *step->drv); step->isDeterministic = getOr(step->drv->env, "isDetermistic", "0") == "1"; step->systemType = step->drv->platform; { - StringSet features = step->requiredSystemFeatures = step->parsedDrv->getRequiredSystemFeatures(); + StringSet features = step->requiredSystemFeatures = step->drvOptions->getRequiredSystemFeatures(*step->drv); if (step->preferLocalBuild) features.insert("local"); if (!features.empty()) { diff --git a/src/hydra-queue-runner/state.hh b/src/hydra-queue-runner/state.hh index 30e01c74..e6c5f7df 100644 --- a/src/hydra-queue-runner/state.hh +++ b/src/hydra-queue-runner/state.hh @@ -13,7 +13,8 @@ #include "db.hh" -#include "parsed-derivations.hh" +#include "derivations.hh" +#include "derivation-options.hh" #include "pathlocks.hh" #include "pool.hh" #include "build-result.hh" @@ -167,7 +168,7 @@ struct Step nix::StorePath drvPath; std::unique_ptr drv; - std::unique_ptr parsedDrv; + std::unique_ptr drvOptions; std::set requiredSystemFeatures; bool preferLocalBuild; bool isDeterministic;