diff --git a/src/libstore/build-result.cc b/src/libstore/build-result.cc index f01911bcd00..d99b1e74d2f 100644 --- a/src/libstore/build-result.cc +++ b/src/libstore/build-result.cc @@ -4,6 +4,13 @@ namespace nix { +unsigned int BuildError::exitCodeFromStatus(Status status) +{ + ExitStatusFlags flags{}; + flags.updateFromStatus(status); + return flags.failingExitStatus(); +} + void ExitStatusFlags::updateFromStatus(BuildResult::Failure::Status status) { // Allow selecting a subset of enum values diff --git a/src/libstore/include/nix/store/build-result.hh b/src/libstore/include/nix/store/build-result.hh index ce63d099960..6c1961c66a9 100644 --- a/src/libstore/include/nix/store/build-result.hh +++ b/src/libstore/include/nix/store/build-result.hh @@ -73,14 +73,22 @@ struct BuildError : public Error */ bool isNonDeterministic = false; +private: + + /** + * Used in the constructors + */ + static unsigned int exitCodeFromStatus(Status status); + public: + /** * Variadic constructor for throwing with format strings. * Delegates to the string constructor after formatting. */ template BuildError(Status status, const Args &... args) - : Error(args...) + : Error(exitCodeFromStatus(status), args...) , status{status} { } @@ -97,10 +105,9 @@ public: * Also used for deserialization. */ BuildError(Args args) - : Error(std::move(args.msg)) + : Error(exitCodeFromStatus(args.status), std::move(args.msg)) , status{args.status} , isNonDeterministic{args.isNonDeterministic} - { } diff --git a/tests/functional/timeout.sh b/tests/functional/timeout.sh index 1bd23118f1a..79dc3b9cd7d 100755 --- a/tests/functional/timeout.sh +++ b/tests/functional/timeout.sh @@ -17,4 +17,4 @@ expectStderr 101 nix-build timeout.nix -A silent --max-silent-time 2 | grepQuiet expectStderr 100 nix-build timeout.nix -A closeLog | grepQuiet "builder failed due to signal" -expectStderr 1 nix build -f timeout.nix silent --max-silent-time 2 | grepQuiet "timed out after 2 seconds" +expectStderr 101 nix build -f timeout.nix silent --max-silent-time 2 | grepQuiet "timed out after 2 seconds"