nix-env/nix-instantiate/nix-build: Support URIs
For instance, you can install Firefox from a specific Nixpkgs revision like this: $ nix-env -f https://github.com/NixOS/nixpkgs/archive/63def04891a0abc328b1b0b3a78ec02c58f48583.tar.gz -iA firefox Or build a package from the latest nixpkgs-unstable channel: $ nix-build https://nixos.org/channels/nixpkgs-unstable/nixexprs.tar.xz -A hello
This commit is contained in:
		
							parent
							
								
									0705d04dfa
								
							
						
					
					
						commit
						6519f06f39
					
				
					 5 changed files with 19 additions and 14 deletions
				
			
		|  | @ -1,5 +1,6 @@ | |||
| #include "common-opts.hh" | ||||
| #include "../libmain/shared.hh" | ||||
| #include "shared.hh" | ||||
| #include "download.hh" | ||||
| #include "util.hh" | ||||
| 
 | ||||
| 
 | ||||
|  | @ -53,7 +54,9 @@ bool parseSearchPathArg(Strings::iterator & i, | |||
| 
 | ||||
| Path lookupFileArg(EvalState & state, string s) | ||||
| { | ||||
|     if (s.size() > 2 && s.at(0) == '<' && s.at(s.size() - 1) == '>') { | ||||
|     if (isUri(s)) | ||||
|         return downloadFileCached(s, true); | ||||
|     else if (s.size() > 2 && s.at(0) == '<' && s.at(s.size() - 1) == '>') { | ||||
|         Path p = s.substr(1, s.size() - 2); | ||||
|         return state.findFile(p); | ||||
|     } else | ||||
|  |  | |||
|  | @ -223,4 +223,13 @@ Path downloadFileCached(const string & url, bool unpack) | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| bool isUri(const string & s) | ||||
| { | ||||
|     size_t pos = s.find("://"); | ||||
|     if (pos == string::npos) return false; | ||||
|     string scheme(s, 0, pos); | ||||
|     return scheme == "http" || scheme == "https"; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -17,4 +17,6 @@ Path downloadFileCached(const string & url, bool unpack); | |||
| 
 | ||||
| MakeError(DownloadError, Error) | ||||
| 
 | ||||
| bool isUri(const string & s); | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -601,15 +601,6 @@ Expr * EvalState::parseExprFromString(const string & s, const Path & basePath) | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| bool isUri(const string & s) | ||||
| { | ||||
|     size_t pos = s.find("://"); | ||||
|     if (pos == string::npos) return false; | ||||
|     string scheme(s, 0, pos); | ||||
|     return scheme == "http" || scheme == "https"; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void EvalState::addToSearchPath(const string & s, bool warn) | ||||
| { | ||||
|     size_t pos = s.find('='); | ||||
|  |  | |||
|  | @ -183,10 +183,10 @@ int main(int argc, char * * argv) | |||
|         } else if (files.empty() && !fromArgs) | ||||
|             files.push_back("./default.nix"); | ||||
| 
 | ||||
|         foreach (Strings::iterator, i, files) { | ||||
|         for (auto & i : files) { | ||||
|             Expr * e = fromArgs | ||||
|                 ? state.parseExprFromString(*i, absPath(".")) | ||||
|                 : state.parseExprFromFile(resolveExprPath(lookupFileArg(state, *i))); | ||||
|                 ? state.parseExprFromString(i, absPath(".")) | ||||
|                 : state.parseExprFromFile(resolveExprPath(lookupFileArg(state, i))); | ||||
|             processExpr(state, attrPaths, parseOnly, strict, autoArgs, | ||||
|                 evalOnly, outputKind, xmlOutputSourceLocation, e); | ||||
|         } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue