parent
							
								
									a8edf185a9
								
							
						
					
					
						commit
						39d72640c2
					
				
					 8 changed files with 33 additions and 18 deletions
				
			
		|  | @ -35,11 +35,11 @@ bool parseOptionArg(const string & arg, Strings::iterator & i, | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| bool parseSearchPathArg(const string & arg, Strings::iterator & i, | bool parseSearchPathArg(const string & arg, Strings::iterator & i, | ||||||
|     const Strings::iterator & argsEnd, EvalState & state) |     const Strings::iterator & argsEnd, Strings & searchPath) | ||||||
| { | { | ||||||
|     if (arg != "-I") return false; |     if (arg != "-I") return false; | ||||||
|     if (i == argsEnd) throw UsageError(format("`%1%' requires an argument") % arg);; |     if (i == argsEnd) throw UsageError(format("`%1%' requires an argument") % arg);; | ||||||
|     state.addToSearchPath(*i++, true); |     searchPath.push_back(*i++); | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ bool parseOptionArg(const string & arg, Strings::iterator & i, | ||||||
|     Bindings & autoArgs); |     Bindings & autoArgs); | ||||||
| 
 | 
 | ||||||
| bool parseSearchPathArg(const string & arg, Strings::iterator & i, | bool parseSearchPathArg(const string & arg, Strings::iterator & i, | ||||||
|     const Strings::iterator & argsEnd, EvalState & state); |     const Strings::iterator & argsEnd, Strings & searchPath); | ||||||
| 
 | 
 | ||||||
| Path lookupFileArg(EvalState & state, string s); | Path lookupFileArg(EvalState & state, string s); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -153,7 +153,7 @@ static Symbol getName(const AttrName & name, EvalState & state, Env & env) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| EvalState::EvalState() | EvalState::EvalState(const Strings & _searchPath) | ||||||
|     : sWith(symbols.create("<with>")) |     : sWith(symbols.create("<with>")) | ||||||
|     , sOutPath(symbols.create("outPath")) |     , sOutPath(symbols.create("outPath")) | ||||||
|     , sDrvPath(symbols.create("drvPath")) |     , sDrvPath(symbols.create("drvPath")) | ||||||
|  | @ -219,11 +219,10 @@ EvalState::EvalState() | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|     /* Initialise the Nix expression search path. */ |     /* Initialise the Nix expression search path. */ | ||||||
|     searchPathInsertionPoint = searchPath.end(); |  | ||||||
|     Strings paths = tokenizeString<Strings>(getEnv("NIX_PATH", ""), ":"); |     Strings paths = tokenizeString<Strings>(getEnv("NIX_PATH", ""), ":"); | ||||||
|     foreach (Strings::iterator, i, paths) addToSearchPath(*i); |     for (auto & i : _searchPath) addToSearchPath(i); | ||||||
|  |     for (auto & i : paths) addToSearchPath(i); | ||||||
|     addToSearchPath("nix=" + settings.nixDataDir + "/nix/corepkgs"); |     addToSearchPath("nix=" + settings.nixDataDir + "/nix/corepkgs"); | ||||||
|     searchPathInsertionPoint = searchPath.begin(); |  | ||||||
| 
 | 
 | ||||||
|     createBaseEnv(); |     createBaseEnv(); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -113,11 +113,10 @@ private: | ||||||
| 
 | 
 | ||||||
|     typedef list<std::pair<string, Path> > SearchPath; |     typedef list<std::pair<string, Path> > SearchPath; | ||||||
|     SearchPath searchPath; |     SearchPath searchPath; | ||||||
|     SearchPath::iterator searchPathInsertionPoint; |  | ||||||
| 
 | 
 | ||||||
| public: | public: | ||||||
| 
 | 
 | ||||||
|     EvalState(); |     EvalState(const Strings & _searchPath); | ||||||
|     ~EvalState(); |     ~EvalState(); | ||||||
| 
 | 
 | ||||||
|     void addToSearchPath(const string & s, bool warn = false); |     void addToSearchPath(const string & s, bool warn = false); | ||||||
|  |  | ||||||
|  | @ -629,7 +629,7 @@ void EvalState::addToSearchPath(const string & s, bool warn) | ||||||
|     path = absPath(path); |     path = absPath(path); | ||||||
|     if (pathExists(path)) { |     if (pathExists(path)) { | ||||||
|         debug(format("adding path `%1%' to the search path") % path); |         debug(format("adding path `%1%' to the search path") % path); | ||||||
|         searchPath.insert(searchPathInsertionPoint, std::pair<string, Path>(prefix, path)); |         searchPath.push_back(std::pair<string, Path>(prefix, path)); | ||||||
|     } else if (warn) |     } else if (warn) | ||||||
|         printMsg(lvlError, format("warning: Nix search path entry `%1%' does not exist, ignoring") % path); |         printMsg(lvlError, format("warning: Nix search path entry `%1%' does not exist, ignoring") % path); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -58,6 +58,7 @@ struct Globals | ||||||
|     bool removeAll; |     bool removeAll; | ||||||
|     string forceName; |     string forceName; | ||||||
|     bool prebuiltOnly; |     bool prebuiltOnly; | ||||||
|  |     Globals(const Strings & searchPath) : state(searchPath) { } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -1351,7 +1352,17 @@ void run(Strings args) | ||||||
|     Strings opFlags, opArgs, remaining; |     Strings opFlags, opArgs, remaining; | ||||||
|     Operation op = 0; |     Operation op = 0; | ||||||
| 
 | 
 | ||||||
|     Globals globals; |     /* FIXME: hack. */ | ||||||
|  |     Strings searchPath; | ||||||
|  |     Strings args2; | ||||||
|  |     for (Strings::iterator i = args.begin(); i != args.end(); ) { | ||||||
|  |         string arg = *i++; | ||||||
|  |         if (!parseSearchPathArg(arg, i, args.end(), searchPath)) | ||||||
|  |             args2.push_back(arg); | ||||||
|  |     } | ||||||
|  |     args = args2; | ||||||
|  | 
 | ||||||
|  |     Globals globals(searchPath); | ||||||
| 
 | 
 | ||||||
|     globals.instSource.type = srcUnknown; |     globals.instSource.type = srcUnknown; | ||||||
|     globals.instSource.nixExprPath = getDefNixExprPath(); |     globals.instSource.nixExprPath = getDefNixExprPath(); | ||||||
|  | @ -1372,8 +1383,6 @@ void run(Strings args) | ||||||
|         else if (parseOptionArg(arg, i, args.end(), |         else if (parseOptionArg(arg, i, args.end(), | ||||||
|                      globals.state, globals.instSource.autoArgs)) |                      globals.state, globals.instSource.autoArgs)) | ||||||
|             ; |             ; | ||||||
|         else if (parseSearchPathArg(arg, i, args.end(), globals.state)) |  | ||||||
|             ; |  | ||||||
|         else if (arg == "--force-name") // undocumented flag for nix-install-package
 |         else if (arg == "--force-name") // undocumented flag for nix-install-package
 | ||||||
|             globals.forceName = needArg(i, args, arg); |             globals.forceName = needArg(i, args, arg); | ||||||
|         else if (arg == "--uninstall" || arg == "-e") |         else if (arg == "--uninstall" || arg == "-e") | ||||||
|  |  | ||||||
|  | @ -91,7 +91,17 @@ void processExpr(EvalState & state, const Strings & attrPaths, | ||||||
| 
 | 
 | ||||||
| void run(Strings args) | void run(Strings args) | ||||||
| { | { | ||||||
|     EvalState state; |     /* FIXME: hack. */ | ||||||
|  |     Strings searchPath; | ||||||
|  |     Strings args2; | ||||||
|  |     for (Strings::iterator i = args.begin(); i != args.end(); ) { | ||||||
|  |         string arg = *i++; | ||||||
|  |         if (!parseSearchPathArg(arg, i, args.end(), searchPath)) | ||||||
|  |             args2.push_back(arg); | ||||||
|  |     } | ||||||
|  |     args = args2; | ||||||
|  | 
 | ||||||
|  |     EvalState state(searchPath); | ||||||
|     Strings files; |     Strings files; | ||||||
|     bool readStdin = false; |     bool readStdin = false; | ||||||
|     bool fromArgs = false; |     bool fromArgs = false; | ||||||
|  | @ -127,8 +137,6 @@ void run(Strings args) | ||||||
|         } |         } | ||||||
|         else if (parseOptionArg(arg, i, args.end(), state, autoArgs)) |         else if (parseOptionArg(arg, i, args.end(), state, autoArgs)) | ||||||
|             ; |             ; | ||||||
|         else if (parseSearchPathArg(arg, i, args.end(), state)) |  | ||||||
|             ; |  | ||||||
|         else if (arg == "--add-root") { |         else if (arg == "--add-root") { | ||||||
|             if (i == args.end()) |             if (i == args.end()) | ||||||
|                 throw UsageError("`--add-root' requires an argument"); |                 throw UsageError("`--add-root' requires an argument"); | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ with builtins; | ||||||
| 
 | 
 | ||||||
| assert pathExists <nix/buildenv.nix>; | assert pathExists <nix/buildenv.nix>; | ||||||
| 
 | 
 | ||||||
| assert length nixPath == 3; | assert length nixPath == 6; | ||||||
| assert length (filter (x: x.prefix == "nix") nixPath) == 1; | assert length (filter (x: x.prefix == "nix") nixPath) == 1; | ||||||
| assert length (filter (x: baseNameOf x.path == "dir4") nixPath) == 1; | assert length (filter (x: baseNameOf x.path == "dir4") nixPath) == 1; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue