diff --git a/src/libstore/build/derivation-goal.cc b/src/libstore/build/derivation-goal.cc index 2e57c1708..cd4a2df6f 100644 --- a/src/libstore/build/derivation-goal.cc +++ b/src/libstore/build/derivation-goal.cc @@ -182,7 +182,19 @@ Goal::Co DerivationGoal::haveDerivation() } } - assert(success.builtOutputs.count(wantedOutput) > 0); + /* If the wanted output is not in builtOutputs (e.g., because it + was already valid and therefore not re-registered), we need to + add it ourselves to ensure we return the correct information. */ + if (success.builtOutputs.count(wantedOutput) == 0) { + debug( + "BUG! wanted output '%s' not in builtOutputs, working around by adding it manually", wantedOutput); + auto realisation = assertPathValidity(); + realisation.id = DrvOutput{ + .drvHash = outputHash, + .outputName = wantedOutput, + }; + success.builtOutputs.emplace(wantedOutput, std::move(realisation)); + } } }