forked from lix-project/hydra
hydra-eval-jobs: Don't go into an infinite recursion
The function getDerivation() can return false if its argument is a derivation. This happens if evaluating the name or system attribute triggers an assertion. In that case, we shouldn't recurse into the attributes of the derivation.
This commit is contained in:
parent
f4a24b94ee
commit
a4ff9b0d08
|
@ -16,7 +16,7 @@ using namespace nix;
|
|||
|
||||
void printHelp()
|
||||
{
|
||||
std::cout << "Syntax: eval-jobs <expr>\n";
|
||||
std::cout << "Syntax: hydra-eval-jobs <expr>\n";
|
||||
}
|
||||
|
||||
|
||||
|
@ -110,6 +110,8 @@ static void findJobsWrapped(EvalState & state, XMLWriter & doc,
|
|||
{
|
||||
debug(format("at path `%1%'") % attrPath);
|
||||
|
||||
checkInterrupt();
|
||||
|
||||
state.forceValue(v);
|
||||
|
||||
if (v.type == tAttrs) {
|
||||
|
@ -165,11 +167,13 @@ static void findJobsWrapped(EvalState & state, XMLWriter & doc,
|
|||
}
|
||||
|
||||
else {
|
||||
if (!state.isDerivation(v)) {
|
||||
foreach (Bindings::iterator, i, *v.attrs)
|
||||
findJobs(state, doc, argsUsed, argsLeft, *i->value,
|
||||
(attrPath.empty() ? "" : attrPath + ".") + (string) i->name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else if (v.type == tLambda && v.lambda.fun->matchAttrs) {
|
||||
tryJobAlts(state, doc, argsUsed, argsLeft, attrPath, v,
|
||||
|
@ -261,4 +265,4 @@ void run(Strings args)
|
|||
}
|
||||
|
||||
|
||||
string programId = "eval-jobs";
|
||||
string programId = "hydra-eval-jobs";
|
||||
|
|
Loading…
Reference in a new issue