forked from lix-project/hydra
Support requiredSystemFeatures
This commit is contained in:
parent
508ab7f8a2
commit
147eb4fd15
|
@ -88,6 +88,7 @@ struct Step
|
||||||
|
|
||||||
Path drvPath;
|
Path drvPath;
|
||||||
Derivation drv;
|
Derivation drv;
|
||||||
|
std::set<std::string> requiredSystemFeatures;
|
||||||
|
|
||||||
struct State
|
struct State
|
||||||
{
|
{
|
||||||
|
@ -134,7 +135,10 @@ struct Machine
|
||||||
bool supportsStep(Step::ptr step)
|
bool supportsStep(Step::ptr step)
|
||||||
{
|
{
|
||||||
if (systemTypes.find(step->drv.platform) == systemTypes.end()) return false;
|
if (systemTypes.find(step->drv.platform) == systemTypes.end()) return false;
|
||||||
// FIXME: check features
|
for (auto & f : mandatoryFeatures)
|
||||||
|
if (step->requiredSystemFeatures.find(f) == step->requiredSystemFeatures.end()) return false;
|
||||||
|
for (auto & f : step->requiredSystemFeatures)
|
||||||
|
if (supportedFeatures.find(f) == supportedFeatures.end()) return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -299,6 +303,8 @@ void State::loadMachines()
|
||||||
machine->speedFactor = atof(tokens[4].c_str());
|
machine->speedFactor = atof(tokens[4].c_str());
|
||||||
machine->supportedFeatures = tokenizeString<StringSet>(tokens[5], ",");
|
machine->supportedFeatures = tokenizeString<StringSet>(tokens[5], ",");
|
||||||
machine->mandatoryFeatures = tokenizeString<StringSet>(tokens[6], ",");
|
machine->mandatoryFeatures = tokenizeString<StringSet>(tokens[6], ",");
|
||||||
|
for (auto & f : machine->mandatoryFeatures)
|
||||||
|
machine->supportedFeatures.insert(f);
|
||||||
newMachines.push_back(machine);
|
newMachines.push_back(machine);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -502,7 +508,7 @@ void State::getQueuedBuilds(Connection & conn, std::shared_ptr<StoreAPI> store,
|
||||||
bool badStep = false;
|
bool badStep = false;
|
||||||
for (auto & r : newSteps) {
|
for (auto & r : newSteps) {
|
||||||
BuildStatus buildStatus = bsSuccess;
|
BuildStatus buildStatus = bsSuccess;
|
||||||
BuildStepStatus buildStepStatus;
|
BuildStepStatus buildStepStatus = bssFailed;
|
||||||
|
|
||||||
bool supported = false;
|
bool supported = false;
|
||||||
{
|
{
|
||||||
|
@ -613,6 +619,11 @@ Step::ptr State::createStep(std::shared_ptr<StoreAPI> store, const Path & drvPat
|
||||||
auto step = std::make_shared<Step>();
|
auto step = std::make_shared<Step>();
|
||||||
step->drvPath = drvPath;
|
step->drvPath = drvPath;
|
||||||
step->drv = readDerivation(drvPath);
|
step->drv = readDerivation(drvPath);
|
||||||
|
{
|
||||||
|
auto i = step->drv.env.find("requiredSystemFeatures");
|
||||||
|
if (i != step->drv.env.end())
|
||||||
|
step->requiredSystemFeatures = tokenizeString<std::set<std::string>>(i->second);
|
||||||
|
}
|
||||||
newSteps.insert(step);
|
newSteps.insert(step);
|
||||||
|
|
||||||
/* Are all outputs valid? */
|
/* Are all outputs valid? */
|
||||||
|
|
Loading…
Reference in a new issue