From 3cfac9b0794cdd2ee80fc540f83feca15596c35c Mon Sep 17 00:00:00 2001 From: John Ericson Date: Mon, 15 Dec 2025 00:53:45 -0500 Subject: [PATCH] Allow `Worker` instances to be locally configured with substituters This will be useful for unit tests. --- src/libstore/build/drv-output-substitution-goal.cc | 4 +--- src/libstore/build/substitution-goal.cc | 3 +-- src/libstore/build/worker.cc | 2 ++ src/libstore/include/nix/store/build/worker.hh | 9 +++++++++ 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/libstore/build/drv-output-substitution-goal.cc b/src/libstore/build/drv-output-substitution-goal.cc index 8d0a307be..5b3a407d9 100644 --- a/src/libstore/build/drv-output-substitution-goal.cc +++ b/src/libstore/build/drv-output-substitution-goal.cc @@ -3,8 +3,6 @@ #include "nix/store/build/worker.hh" #include "nix/store/build/substitution-goal.hh" #include "nix/util/callback.hh" -#include "nix/store/store-open.hh" -#include "nix/store/globals.hh" namespace nix { @@ -25,7 +23,7 @@ Goal::Co DrvOutputSubstitutionGoal::init() co_return amDone(ecSuccess); } - auto subs = settings.useSubstitutes ? getDefaultSubstituters() : std::list>(); + auto subs = worker.getSubstituters(); bool substituterFailed = false; diff --git a/src/libstore/build/substitution-goal.cc b/src/libstore/build/substitution-goal.cc index ac18de304..f066f013d 100644 --- a/src/libstore/build/substitution-goal.cc +++ b/src/libstore/build/substitution-goal.cc @@ -1,5 +1,4 @@ #include "nix/store/build/worker.hh" -#include "nix/store/store-open.hh" #include "nix/store/build/substitution-goal.hh" #include "nix/store/nar-info.hh" #include "nix/util/finally.hh" @@ -60,7 +59,7 @@ Goal::Co PathSubstitutionGoal::init() throw Error( "cannot substitute path '%s' - no write access to the Nix store", worker.store.printStorePath(storePath)); - auto subs = settings.useSubstitutes ? getDefaultSubstituters() : std::list>(); + auto subs = worker.getSubstituters(); bool substituterFailed = false; std::optional lastStoresException = std::nullopt; diff --git a/src/libstore/build/worker.cc b/src/libstore/build/worker.cc index 3663a2c91..c066fe206 100644 --- a/src/libstore/build/worker.cc +++ b/src/libstore/build/worker.cc @@ -1,5 +1,6 @@ #include "nix/store/local-store.hh" #include "nix/store/machines.hh" +#include "nix/store/store-open.hh" #include "nix/store/build/worker.hh" #include "nix/store/build/substitution-goal.hh" #include "nix/store/build/drv-output-substitution-goal.hh" @@ -21,6 +22,7 @@ Worker::Worker(Store & store, Store & evalStore) , actSubstitutions(*logger, actCopyPaths) , store(store) , evalStore(evalStore) + , getSubstituters{[] { return settings.useSubstitutes ? getDefaultSubstituters() : std::list>{}; }} { nrLocalBuilds = 0; nrSubstitutions = 0; diff --git a/src/libstore/include/nix/store/build/worker.hh b/src/libstore/include/nix/store/build/worker.hh index 173f7b222..65408429c 100644 --- a/src/libstore/include/nix/store/build/worker.hh +++ b/src/libstore/include/nix/store/build/worker.hh @@ -8,6 +8,7 @@ #include "nix/store/realisation.hh" #include "nix/util/muxable-pipe.hh" +#include #include #include @@ -171,6 +172,14 @@ public: Store & store; Store & evalStore; + /** + * Function to get the substituters to use for path substitution. + * + * Defaults to `getDefaultSubstituters`. This allows tests to + * inject custom substituters. + */ + std::function>()> getSubstituters; + #ifndef _WIN32 // TODO Enable building on Windows std::unique_ptr hook; #endif