nix-build, nix-shell: Don't print error message if nix-store/nix-instantiate fails
This commit is contained in:
		
							parent
							
								
									c55bf085eb
								
							
						
					
					
						commit
						4546be1b3e
					
				
					 3 changed files with 39 additions and 6 deletions
				
			
		|  | @ -927,7 +927,7 @@ string runProgram(Path program, bool searchPath, const Strings & args, | ||||||
|     /* Wait for the child to finish. */ |     /* Wait for the child to finish. */ | ||||||
|     int status = pid.wait(true); |     int status = pid.wait(true); | ||||||
|     if (!statusOk(status)) |     if (!statusOk(status)) | ||||||
|         throw ExecError(format("program ‘%1%’ %2%") |         throw ExecError(status, format("program ‘%1%’ %2%") | ||||||
|             % program % statusToString(status)); |             % program % statusToString(status)); | ||||||
| 
 | 
 | ||||||
|     return result; |     return result; | ||||||
|  |  | ||||||
|  | @ -247,7 +247,16 @@ pid_t startProcess(std::function<void()> fun, const ProcessOptions & options = P | ||||||
| string runProgram(Path program, bool searchPath = false, | string runProgram(Path program, bool searchPath = false, | ||||||
|     const Strings & args = Strings(), const string & input = ""); |     const Strings & args = Strings(), const string & input = ""); | ||||||
| 
 | 
 | ||||||
| MakeError(ExecError, Error) | class ExecError : public Error | ||||||
|  | { | ||||||
|  | public: | ||||||
|  |     int status; | ||||||
|  | 
 | ||||||
|  |     template<typename... Args> | ||||||
|  |     ExecError(int status, Args... args) | ||||||
|  |         : Error(args...), status(status) | ||||||
|  |     { } | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
| /* Convert a list of strings to a null-terminated vector of char
 | /* Convert a list of strings to a null-terminated vector of char
 | ||||||
|    *'s. The result must not be accessed beyond the lifetime of the |    *'s. The result must not be accessed beyond the lifetime of the | ||||||
|  |  | ||||||
|  | @ -60,6 +60,14 @@ std::vector<string> shellwords(const string & s) | ||||||
|     return res; |     return res; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static void maybePrintExecError(ExecError & e) | ||||||
|  | { | ||||||
|  |     if (WIFEXITED(e.status)) | ||||||
|  |         throw Exit(WEXITSTATUS(e.status)); | ||||||
|  |     else | ||||||
|  |         throw e; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| int main(int argc, char ** argv) | int main(int argc, char ** argv) | ||||||
| { | { | ||||||
|     return handleExceptions(argv[0], [&]() { |     return handleExceptions(argv[0], [&]() { | ||||||
|  | @ -346,8 +354,12 @@ int main(int argc, char ** argv) | ||||||
|                 for (const auto & arg : instArgs) |                 for (const auto & arg : instArgs) | ||||||
|                     instantiateArgs.push_back(arg); |                     instantiateArgs.push_back(arg); | ||||||
|                 instantiateArgs.push_back(expr); |                 instantiateArgs.push_back(expr); | ||||||
|                 auto instOutput = runProgram(settings.nixBinDir + "/nix-instantiate", false, instantiateArgs); |                 try { | ||||||
|                 drvPaths = tokenizeString<std::vector<string>>(instOutput); |                     auto instOutput = runProgram(settings.nixBinDir + "/nix-instantiate", false, instantiateArgs); | ||||||
|  |                     drvPaths = tokenizeString<std::vector<string>>(instOutput); | ||||||
|  |                 } catch (ExecError & e) { | ||||||
|  |                     maybePrintExecError(e); | ||||||
|  |                 } | ||||||
|             } else { |             } else { | ||||||
|                 drvPaths.push_back(expr); |                 drvPaths.push_back(expr); | ||||||
|             } |             } | ||||||
|  | @ -370,7 +382,12 @@ int main(int argc, char ** argv) | ||||||
|                         nixStoreArgs.push_back(input.first); |                         nixStoreArgs.push_back(input.first); | ||||||
|                 for (const auto & src : drv.inputSrcs) |                 for (const auto & src : drv.inputSrcs) | ||||||
|                     nixStoreArgs.push_back(src); |                     nixStoreArgs.push_back(src); | ||||||
|                 runProgram(settings.nixBinDir + "/nix-store", false, nixStoreArgs); | 
 | ||||||
|  |                 try { | ||||||
|  |                     runProgram(settings.nixBinDir + "/nix-store", false, nixStoreArgs); | ||||||
|  |                 } catch (ExecError & e) { | ||||||
|  |                     maybePrintExecError(e); | ||||||
|  |                 } | ||||||
| 
 | 
 | ||||||
|                 // Set the environment.
 |                 // Set the environment.
 | ||||||
|                 auto env = getEnv(); |                 auto env = getEnv(); | ||||||
|  | @ -471,7 +488,14 @@ int main(int argc, char ** argv) | ||||||
|                 nixStoreArgs.push_back(arg); |                 nixStoreArgs.push_back(arg); | ||||||
|             for (const auto & path : drvPaths2) |             for (const auto & path : drvPaths2) | ||||||
|                 nixStoreArgs.push_back(path); |                 nixStoreArgs.push_back(path); | ||||||
|             auto nixStoreRes = runProgram(settings.nixBinDir + "/nix-store", false, nixStoreArgs); | 
 | ||||||
|  |             std::string nixStoreRes; | ||||||
|  |             try { | ||||||
|  |                 nixStoreRes = runProgram(settings.nixBinDir + "/nix-store", false, nixStoreArgs); | ||||||
|  |             } catch (ExecError & e) { | ||||||
|  |                 maybePrintExecError(e); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|             for (const auto & outpath : tokenizeString<std::vector<string>>(nixStoreRes)) |             for (const auto & outpath : tokenizeString<std::vector<string>>(nixStoreRes)) | ||||||
|                 outPaths.push_back(chomp(outpath)); |                 outPaths.push_back(chomp(outpath)); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue