libmain/main: propagate status codes via return values for mainWrapped
This also prevent `legacy` to return nothing as it's void. Change-Id: Ic797544a59b04b41ad9e1c46af4cad3a1cb6fdc8 Signed-off-by: Raito Bezarius <raito@lix.systems>
This commit is contained in:
@@ -313,8 +313,7 @@ void showManPage(const std::string & name)
|
||||
throw SysError("command 'man %1%' failed", name.c_str());
|
||||
}
|
||||
|
||||
|
||||
int handleExceptions(const std::string & programName, std::function<void()> fun)
|
||||
int handleExceptions(const std::string & programName, std::function<int()> fun)
|
||||
{
|
||||
ReceiveInterrupts receiveInterrupts; // FIXME: need better place for this
|
||||
|
||||
@@ -324,7 +323,7 @@ int handleExceptions(const std::string & programName, std::function<void()> fun)
|
||||
bool onlyForSubcommands = baseNameOf(programName) == "lix";
|
||||
|
||||
try {
|
||||
fun();
|
||||
return fun();
|
||||
} catch (Exit & e) {
|
||||
return e.status;
|
||||
} catch (UsageError & e) {
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
namespace nix {
|
||||
|
||||
int handleExceptions(const std::string & programName, std::function<void()> fun);
|
||||
int handleExceptions(const std::string & programName, std::function<int()> fun);
|
||||
|
||||
/**
|
||||
* Don't forget to call initPlugins() after settings are initialized!
|
||||
|
||||
+14
-11
@@ -453,7 +453,7 @@ void registerNixHelp()
|
||||
registerCommand<CmdHelpStores>("help-stores");
|
||||
}
|
||||
|
||||
void mainWrapped(AsyncIoRoot & aio, int argc, char * * argv)
|
||||
int mainWrapped(AsyncIoRoot & aio, int argc, char ** argv)
|
||||
{
|
||||
savedArgv = argv;
|
||||
|
||||
@@ -461,7 +461,7 @@ void mainWrapped(AsyncIoRoot & aio, int argc, char * * argv)
|
||||
started. */
|
||||
if (argc > 0 && argv[0] == chrootHelperName) {
|
||||
chrootHelper(argc, argv);
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
initNix();
|
||||
@@ -493,7 +493,8 @@ void mainWrapped(AsyncIoRoot & aio, int argc, char * * argv)
|
||||
registerLegacyCommands();
|
||||
auto legacy = (*LegacyCommandRegistry::commands)[programName];
|
||||
if (legacy) {
|
||||
return legacy(aio, std::string(baseNameOf(argv[0])), Strings(argv + 1, argv + argc));
|
||||
legacy(aio, std::string(baseNameOf(argv[0])), Strings(argv + 1, argv + argc));
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -516,7 +517,7 @@ void mainWrapped(AsyncIoRoot & aio, int argc, char * * argv)
|
||||
|
||||
if (argc == 2 && std::string(argv[1]) == "__dump-cli") {
|
||||
logger->cout(args.dumpCli());
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (argc == 2 && std::string(argv[1]) == "__dump-language") {
|
||||
@@ -559,17 +560,17 @@ void mainWrapped(AsyncIoRoot & aio, int argc, char * * argv)
|
||||
std::move(constantsJson);
|
||||
});
|
||||
logger->cout("%s", res);
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (argc == 2 && std::string(argv[1]) == "__dump-xp-features") {
|
||||
logger->cout(documentExperimentalFeatures().dump());
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (argc == 2 && std::string(argv[1]) == "__dump-dp-features") {
|
||||
logger->cout(documentDeprecatedFeatures().dump());
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -589,7 +590,7 @@ void mainWrapped(AsyncIoRoot & aio, int argc, char * * argv)
|
||||
}
|
||||
for (auto & s : args.completions->completions)
|
||||
logger->cout(s.completion + "\t" + trim(s.description));
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (args.helpRequested) {
|
||||
@@ -603,12 +604,12 @@ void mainWrapped(AsyncIoRoot & aio, int argc, char * * argv)
|
||||
break;
|
||||
}
|
||||
showHelp(aio, subcommand, args);
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (args.showVersion) {
|
||||
printVersion(programName);
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!args.command)
|
||||
@@ -643,6 +644,8 @@ void mainWrapped(AsyncIoRoot & aio, int argc, char * * argv)
|
||||
evalSettings.pureEval.setDefault(false);
|
||||
}
|
||||
args.run();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -660,6 +663,6 @@ int main(int argc, char * * argv)
|
||||
|
||||
return nix::handleExceptions(argv[0], [&]() {
|
||||
nix::AsyncIoRoot aio;
|
||||
nix::mainWrapped(aio, argc, argv);
|
||||
return nix::mainWrapped(aio, argc, argv);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -423,5 +423,7 @@ int main(int argc, char **argv) {
|
||||
},
|
||||
resolveNamedConstituents(state->jobs));
|
||||
}
|
||||
|
||||
return 0;
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user