1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-11-09 03:56:01 +01:00

Merge pull request #14343 from NixOS/epipe-graceful

Revert "libmain: Catch logger exceptions in `handleExceptions`"
This commit is contained in:
Sergei Zimmerman 2025-10-24 22:52:29 +00:00 committed by GitHub
commit 04606d50d1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -320,34 +320,29 @@ int handleExceptions(const std::string & programName, std::function<void()> fun)
std::string error = ANSI_RED "error:" ANSI_NORMAL " "; std::string error = ANSI_RED "error:" ANSI_NORMAL " ";
try { try {
try { try {
try { fun();
fun(); } catch (...) {
} catch (...) { /* Subtle: we have to make sure that any `interrupted'
/* Subtle: we have to make sure that any `interrupted' condition is discharged before we reach printMsg()
condition is discharged before we reach printMsg() below, since otherwise it will throw an (uncaught)
below, since otherwise it will throw an (uncaught) exception. */
exception. */ setInterruptThrown();
setInterruptThrown(); throw;
throw;
}
} catch (Exit & e) {
return e.status;
} catch (UsageError & e) {
logError(e.info());
printError("Try '%1% --help' for more information.", programName);
return 1;
} catch (BaseError & e) {
logError(e.info());
return e.info().status;
} catch (std::bad_alloc & e) {
printError(error + "out of memory");
return 1;
} catch (std::exception & e) {
printError(error + e.what());
return 1;
} }
} catch (...) { } catch (Exit & e) {
/* In case logger also throws just give up. */ return e.status;
} catch (UsageError & e) {
logError(e.info());
printError("Try '%1% --help' for more information.", programName);
return 1;
} catch (BaseError & e) {
logError(e.info());
return e.info().status;
} catch (std::bad_alloc & e) {
printError(error + "out of memory");
return 1;
} catch (std::exception & e) {
printError(error + e.what());
return 1; return 1;
} }