* In `nix-env', look for derivations inside attribute sets that have
the `recurseForDerivations' attribute set to `true'.
This commit is contained in:
parent
49ce8b57dd
commit
b69e469328
|
@ -55,6 +55,7 @@ Expr evalFile(EvalState & state, const Path & path);
|
|||
/* Specific results. */
|
||||
string evalString(EvalState & state, Expr e);
|
||||
Path evalPath(EvalState & state, Expr e);
|
||||
bool evalBool(EvalState & state, Expr e);
|
||||
ATermList evalList(EvalState & state, Expr e);
|
||||
ATerm coerceToString(Expr e);
|
||||
|
||||
|
|
|
@ -171,7 +171,21 @@ static void getDerivations(EvalState & state, Expr e,
|
|||
for (ATermIterator i(drvMap.keys()); i; ++i) {
|
||||
startNest(nest, lvlDebug,
|
||||
format("evaluating attribute `%1%'") % aterm2String(*i));
|
||||
getDerivation(state, drvMap.get(*i), drvs, doneExprs);
|
||||
if (getDerivation(state, drvMap.get(*i), drvs, doneExprs)) {
|
||||
/* If the value of this attribute is itself an
|
||||
attribute self, should we recurse into it?
|
||||
=> Only if it has a `recurseForDerivations = true'
|
||||
attribute. */
|
||||
ATermList es;
|
||||
Expr e = evalExpr(state, drvMap.get(*i));
|
||||
if (matchAttrs(e, es)) {
|
||||
ATermMap attrs;
|
||||
queryAllAttrs(e, attrs, false);
|
||||
if (attrs.get("recurseForDerivations") &&
|
||||
evalBool(state, attrs.get("recurseForDerivations")))
|
||||
getDerivations(state, e, drvs, doneExprs, attrPathRest);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Expr e2 = drvMap.get(attr);
|
||||
|
|
Loading…
Reference in a new issue