diff --git a/doc/manual/command-ref/nix-store.xml b/doc/manual/command-ref/nix-store.xml
index bf12d06f1..2ecc63db7 100644
--- a/doc/manual/command-ref/nix-store.xml
+++ b/doc/manual/command-ref/nix-store.xml
@@ -247,8 +247,15 @@ printed.)
With the flag it's possible for
-multiple build failures to occur, in this case the 1xx status codes
-are or combined.
+multiple failures to occur, in this case the 1xx status codes are or combined
+using binary or.
+1100100
+ ^^^^
+ |||`- timeout
+ ||`-- output hash mismatch
+ |`--- build failure
+ `---- not deterministic
+
diff --git a/src/libstore/build.cc b/src/libstore/build.cc
index abfae3c7c..350ac4092 100644
--- a/src/libstore/build.cc
+++ b/src/libstore/build.cc
@@ -4471,15 +4471,29 @@ void Worker::waitForInput()
unsigned int Worker::exitStatus()
{
+ /*
+ * 1100100
+ * ^^^^
+ * |||`- timeout
+ * ||`-- output hash mismatch
+ * |`--- build failure
+ * `---- not deterministic
+ */
unsigned int mask = 0;
+ bool buildFailure = permanentFailure || timedOut || hashMismatch;
+ if (buildFailure)
+ mask |= 0x04; // 100
if (timedOut)
- mask |= 1;
+ mask |= 0x01; // 101
if (hashMismatch)
- mask |= 2;
- if (checkMismatch)
- mask |= 4;
+ mask |= 0x02; // 102
+ if (checkMismatch) {
+ mask |= 0x08; // 104
+ }
- return mask ? 100 + mask : 1;
+ if (mask)
+ mask |= 0x60;
+ return mask ? mask : 1;
}
diff --git a/tests/check.sh b/tests/check.sh
index aa1e5cd26..bc23a6634 100644
--- a/tests/check.sh
+++ b/tests/check.sh
@@ -7,8 +7,8 @@ nix-build dependencies.nix --no-out-link --check
nix-build check.nix -A nondeterministic --no-out-link
nix-build check.nix -A nondeterministic --no-out-link --check 2> $TEST_ROOT/log || status=$?
-[ "$status" = "104" ]
grep 'may not be deterministic' $TEST_ROOT/log
+[ "$status" = "104" ]
clearStore
@@ -44,4 +44,4 @@ nix-build check.nix -A hashmismatch --no-out-link --check --hashed-mirrors '' ||
# Multiple failures with --keep-going
nix-build check.nix -A nondeterministic --no-out-link
nix-build check.nix -A nondeterministic -A hashmismatch --no-out-link --check --keep-going --hashed-mirrors '' || status=$?
-[ "$status" = "106" ]
+[ "$status" = "110" ]