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, | ||||
|     const Strings::iterator & argsEnd, EvalState & state) | ||||
|     const Strings::iterator & argsEnd, Strings & searchPath) | ||||
| { | ||||
|     if (arg != "-I") return false; | ||||
|     if (i == argsEnd) throw UsageError(format("`%1%' requires an argument") % arg);; | ||||
|     state.addToSearchPath(*i++, true); | ||||
|     searchPath.push_back(*i++); | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ bool parseOptionArg(const string & arg, Strings::iterator & i, | |||
|     Bindings & autoArgs); | ||||
| 
 | ||||
| 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); | ||||
| 
 | ||||
|  |  | |||
|  | @ -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>")) | ||||
|     , sOutPath(symbols.create("outPath")) | ||||
|     , sDrvPath(symbols.create("drvPath")) | ||||
|  | @ -219,11 +219,10 @@ EvalState::EvalState() | |||
| #endif | ||||
| 
 | ||||
|     /* Initialise the Nix expression search path. */ | ||||
|     searchPathInsertionPoint = searchPath.end(); | ||||
|     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"); | ||||
|     searchPathInsertionPoint = searchPath.begin(); | ||||
| 
 | ||||
|     createBaseEnv(); | ||||
| } | ||||
|  |  | |||
|  | @ -113,11 +113,10 @@ private: | |||
| 
 | ||||
|     typedef list<std::pair<string, Path> > SearchPath; | ||||
|     SearchPath searchPath; | ||||
|     SearchPath::iterator searchPathInsertionPoint; | ||||
| 
 | ||||
| public: | ||||
| 
 | ||||
|     EvalState(); | ||||
|     EvalState(const Strings & _searchPath); | ||||
|     ~EvalState(); | ||||
| 
 | ||||
|     void addToSearchPath(const string & s, bool warn = false); | ||||
|  |  | |||
|  | @ -629,7 +629,7 @@ void EvalState::addToSearchPath(const string & s, bool warn) | |||
|     path = absPath(path); | ||||
|     if (pathExists(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) | ||||
|         printMsg(lvlError, format("warning: Nix search path entry `%1%' does not exist, ignoring") % path); | ||||
| } | ||||
|  |  | |||
|  | @ -58,6 +58,7 @@ struct Globals | |||
|     bool removeAll; | ||||
|     string forceName; | ||||
|     bool prebuiltOnly; | ||||
|     Globals(const Strings & searchPath) : state(searchPath) { } | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
|  | @ -1351,7 +1352,17 @@ void run(Strings args) | |||
|     Strings opFlags, opArgs, remaining; | ||||
|     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.nixExprPath = getDefNixExprPath(); | ||||
|  | @ -1372,8 +1383,6 @@ void run(Strings args) | |||
|         else if (parseOptionArg(arg, i, args.end(), | ||||
|                      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
 | ||||
|             globals.forceName = needArg(i, args, arg); | ||||
|         else if (arg == "--uninstall" || arg == "-e") | ||||
|  |  | |||
|  | @ -91,7 +91,17 @@ void processExpr(EvalState & state, const Strings & attrPaths, | |||
| 
 | ||||
| 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; | ||||
|     bool readStdin = false; | ||||
|     bool fromArgs = false; | ||||
|  | @ -127,8 +137,6 @@ void run(Strings args) | |||
|         } | ||||
|         else if (parseOptionArg(arg, i, args.end(), state, autoArgs)) | ||||
|             ; | ||||
|         else if (parseSearchPathArg(arg, i, args.end(), state)) | ||||
|             ; | ||||
|         else if (arg == "--add-root") { | ||||
|             if (i == args.end()) | ||||
|                 throw UsageError("`--add-root' requires an argument"); | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ with builtins; | |||
| 
 | ||||
| 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: baseNameOf x.path == "dir4") nixPath) == 1; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue