* 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
					
				
					 2 changed files with 16 additions and 1 deletions
				
			
		|  | @ -55,6 +55,7 @@ Expr evalFile(EvalState & state, const Path & path); | ||||||
| /* Specific results. */ | /* Specific results. */ | ||||||
| string evalString(EvalState & state, Expr e); | string evalString(EvalState & state, Expr e); | ||||||
| Path evalPath(EvalState & state, Expr e); | Path evalPath(EvalState & state, Expr e); | ||||||
|  | bool evalBool(EvalState & state, Expr e); | ||||||
| ATermList evalList(EvalState & state, Expr e); | ATermList evalList(EvalState & state, Expr e); | ||||||
| ATerm coerceToString(Expr e); | ATerm coerceToString(Expr e); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -171,7 +171,21 @@ static void getDerivations(EvalState & state, Expr e, | ||||||
|             for (ATermIterator i(drvMap.keys()); i; ++i) { |             for (ATermIterator i(drvMap.keys()); i; ++i) { | ||||||
|                 startNest(nest, lvlDebug, |                 startNest(nest, lvlDebug, | ||||||
|                     format("evaluating attribute `%1%'") % aterm2String(*i)); |                     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 { |         } else { | ||||||
|             Expr e2 = drvMap.get(attr); |             Expr e2 = drvMap.get(attr); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue