Make the search path lazier with non-fatal errors
Thus, -I / $NIX_PATH entries are now downloaded only when they are
needed for evaluation. An error to download an entry is a non-fatal
warning (just like non-existant paths).
This does change the semantics of builtins.nixPath, which now returns
the original, rather than resulting path. E.g., before we had
  [ { path = "/nix/store/hgm3yxf1lrrwa3z14zpqaj5p9vs0qklk-nixexprs.tar.xz"; prefix = "nixpkgs"; } ... ]
but now
  [ { path = "https://nixos.org/channels/nixos-16.03/nixexprs.tar.xz"; prefix = "nixpkgs"; } ... ]
Fixes #792.
			
			
This commit is contained in:
		
							parent
							
								
									fc6a032989
								
							
						
					
					
						commit
						363f37d084
					
				
					 5 changed files with 75 additions and 34 deletions
				
			
		|  | @ -56,7 +56,8 @@ typedef std::map<Path, Path> SrcToStore; | |||
| std::ostream & operator << (std::ostream & str, const Value & v); | ||||
| 
 | ||||
| 
 | ||||
| typedef list<std::pair<string, Path> > SearchPath; | ||||
| typedef std::pair<std::string, std::string> SearchPathElem; | ||||
| typedef std::list<SearchPathElem> SearchPath; | ||||
| 
 | ||||
| 
 | ||||
| /* Initialise the Boehm GC, if applicable. */ | ||||
|  | @ -98,12 +99,14 @@ private: | |||
| 
 | ||||
|     SearchPath searchPath; | ||||
| 
 | ||||
|     std::map<std::string, std::pair<bool, std::string>> searchPathResolved; | ||||
| 
 | ||||
| public: | ||||
| 
 | ||||
|     EvalState(const Strings & _searchPath, ref<Store> store); | ||||
|     ~EvalState(); | ||||
| 
 | ||||
|     void addToSearchPath(const string & s, bool warn = false); | ||||
|     void addToSearchPath(const string & s); | ||||
| 
 | ||||
|     Path checkSourcePath(const Path & path); | ||||
| 
 | ||||
|  | @ -125,6 +128,9 @@ public: | |||
|     Path findFile(const string & path); | ||||
|     Path findFile(SearchPath & searchPath, const string & path, const Pos & pos = noPos); | ||||
| 
 | ||||
|     /* If the specified search path element is a URI, download it. */ | ||||
|     std::pair<bool, std::string> resolveSearchPathElem(const SearchPathElem & elem); | ||||
| 
 | ||||
|     /* Evaluate an expression to normal form, storing the result in
 | ||||
|        value `v'. */ | ||||
|     void eval(Expr * e, Value & v); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue