| 
									
										
										
										
											2015-12-16 13:59:02 +01:00
										 |  |  |  | # This expression returns a list of all fetchurl calls used by ‘expr’. | 
					
						
							| 
									
										
										
										
											2014-02-19 13:01:33 +01:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | with import ../.. { }; | 
					
						
							|  |  |  |  | with lib; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-16 13:59:02 +01:00
										 |  |  |  | { expr }: | 
					
						
							| 
									
										
										
										
											2015-12-10 15:53:48 +01:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-19 13:01:33 +01:00
										 |  |  |  | let | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-10 15:53:48 +01:00
										 |  |  |  |   root = expr; | 
					
						
							| 
									
										
										
										
											2014-02-19 13:01:33 +01:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   uniqueUrls = map (x: x.file) (genericClosure { | 
					
						
							|  |  |  |  |     startSet = map (file: { key = file.url; inherit file; }) urls; | 
					
						
							|  |  |  |  |     operator = const [ ]; | 
					
						
							|  |  |  |  |   }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-18 15:17:13 +02:00
										 |  |  |  |   urls = map (drv: { url = head (drv.urls or [ drv.url ]); hash = drv.outputHash; type = drv.outputHashAlgo; name = drv.name; }) fetchurlDependencies; | 
					
						
							| 
									
										
										
										
											2014-02-19 13:01:33 +01:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-10 15:53:48 +01:00
										 |  |  |  |   fetchurlDependencies = | 
					
						
							|  |  |  |  |     filter | 
					
						
							| 
									
										
										
										
											2016-02-25 08:29:57 +01:00
										 |  |  |  |       (drv: drv.outputHash or "" != "" && drv.outputHashMode or "flat" == "flat" | 
					
						
							| 
									
										
										
										
											2016-04-08 14:00:47 +02:00
										 |  |  |  |           && drv.postFetch or "" == "" && (drv ? url || drv ? urls)) | 
					
						
							| 
									
										
										
										
											2015-12-10 15:53:48 +01:00
										 |  |  |  |       dependencies; | 
					
						
							| 
									
										
										
										
											2014-02-19 13:01:33 +01:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   dependencies = map (x: x.value) (genericClosure { | 
					
						
							|  |  |  |  |     startSet = map keyDrv (derivationsIn' root); | 
					
						
							|  |  |  |  |     operator = { key, value }: map keyDrv (immediateDependenciesOf value); | 
					
						
							|  |  |  |  |   }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   derivationsIn' = x: | 
					
						
							|  |  |  |  |     if !canEval x then [] | 
					
						
							|  |  |  |  |     else if isDerivation x then optional (canEval x.drvPath) x | 
					
						
							|  |  |  |  |     else if isList x then concatLists (map derivationsIn' x) | 
					
						
							|  |  |  |  |     else if isAttrs x then concatLists (mapAttrsToList (n: v: derivationsIn' v) x) | 
					
						
							|  |  |  |  |     else [ ]; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   keyDrv = drv: if canEval drv.drvPath then { key = drv.drvPath; value = drv; } else { }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   immediateDependenciesOf = drv: | 
					
						
							|  |  |  |  |     concatLists (mapAttrsToList (n: v: derivationsIn v) (removeAttrs drv ["meta" "passthru"])); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   derivationsIn = x: | 
					
						
							|  |  |  |  |     if !canEval x then [] | 
					
						
							|  |  |  |  |     else if isDerivation x then optional (canEval x.drvPath) x | 
					
						
							|  |  |  |  |     else if isList x then concatLists (map derivationsIn x) | 
					
						
							|  |  |  |  |     else [ ]; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   canEval = val: (builtins.tryEval val).success; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | in uniqueUrls |