From f155dffe5901172823b08814fd49dce3b3d8d2b4 Mon Sep 17 00:00:00 2001 From: John Ericson Date: Thu, 14 Aug 2025 00:30:26 -0400 Subject: [PATCH] `DerivationGoal::done` Clean up parameter types We don't need to ask all these callers to build these single-entry maps for us. --- src/libstore/build/derivation-goal.cc | 13 +++++++------ .../include/nix/store/build/derivation-goal.hh | 8 +++++++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/libstore/build/derivation-goal.cc b/src/libstore/build/derivation-goal.cc index 5407e6f60..13ea6019e 100644 --- a/src/libstore/build/derivation-goal.cc +++ b/src/libstore/build/derivation-goal.cc @@ -93,7 +93,7 @@ Goal::Co DerivationGoal::haveDerivation() /* If they are all valid, then we're done. */ if (checkResult && checkResult->second == PathStatus::Valid && buildMode == bmNormal) { - co_return done(BuildResult::AlreadyValid, {{wantedOutput, checkResult->first}}); + co_return done(BuildResult::AlreadyValid, checkResult->first); } Goals waitees; @@ -136,7 +136,7 @@ Goal::Co DerivationGoal::haveDerivation() bool allValid = checkResult && checkResult->second == PathStatus::Valid; if (buildMode == bmNormal && allValid) { - co_return done(BuildResult::Substituted, {{wantedOutput, checkResult->first}}); + co_return done(BuildResult::Substituted, checkResult->first); } if (buildMode == bmRepair && allValid) { co_return repairClosure(); @@ -280,7 +280,7 @@ Goal::Co DerivationGoal::repairClosure() "some paths in the output closure of derivation '%s' could not be repaired", worker.store.printStorePath(drvPath)); } - co_return done(BuildResult::AlreadyValid, {{wantedOutput, assertPathValidity()}}); + co_return done(BuildResult::AlreadyValid, assertPathValidity()); } std::optional> DerivationGoal::checkPathValidity() @@ -338,7 +338,8 @@ Realisation DerivationGoal::assertPathValidity() return checkResult->first; } -Goal::Done DerivationGoal::done(BuildResult::Status status, SingleDrvOutputs builtOutputs, std::optional ex) +Goal::Done +DerivationGoal::done(BuildResult::Status status, std::optional builtOutput, std::optional ex) { buildResult.status = status; if (ex) @@ -351,8 +352,8 @@ Goal::Done DerivationGoal::done(BuildResult::Status status, SingleDrvOutputs bui mcExpectedBuilds.reset(); if (buildResult.success()) { - assert(!builtOutputs.empty()); - buildResult.builtOutputs = std::move(builtOutputs); + assert(builtOutput); + buildResult.builtOutputs = {{wantedOutput, std::move(*builtOutput)}}; if (status == BuildResult::Built) worker.doneBuilds++; } else { diff --git a/src/libstore/include/nix/store/build/derivation-goal.hh b/src/libstore/include/nix/store/build/derivation-goal.hh index d0c069446..8417ea64f 100644 --- a/src/libstore/include/nix/store/build/derivation-goal.hh +++ b/src/libstore/include/nix/store/build/derivation-goal.hh @@ -102,7 +102,13 @@ private: Co repairClosure(); - Done done(BuildResult::Status status, SingleDrvOutputs builtOutputs = {}, std::optional ex = {}); + /** + * @param builtOutput Must be set if `status` is successful. + */ + Done done( + BuildResult::Status status, + std::optional builtOutput = std::nullopt, + std::optional ex = {}); }; } // namespace nix