46 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| # This expression returns a list of all fetchurl calls used by all
 | |
| # packages reachable from release.nix.
 | |
| 
 | |
| with import ../.. { };
 | |
| with lib;
 | |
| 
 | |
| let
 | |
| 
 | |
|   root = removeAttrs (import ../../pkgs/top-level/release.nix { }) [ "tarball" "unstable" ];
 | |
| 
 | |
|   uniqueUrls = map (x: x.file) (genericClosure {
 | |
|     startSet = map (file: { key = file.url; inherit file; }) urls;
 | |
|     operator = const [ ];
 | |
|   });
 | |
| 
 | |
|   urls = map (drv: { url = head drv.urls; hash = drv.outputHash; type = drv.outputHashAlgo; }) fetchurlDependencies;
 | |
| 
 | |
|   fetchurlDependencies = filter (drv: drv.outputHash or "" != "" && drv ? urls) dependencies;
 | |
| 
 | |
|   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
 | 
