diff --git a/lix/libcmd/repl.cc b/lix/libcmd/repl.cc index 7799ef20c..a8878ea26 100644 --- a/lix/libcmd/repl.cc +++ b/lix/libcmd/repl.cc @@ -729,7 +729,7 @@ ProcessLineResult NixRepl::processLine(std::string line) Finally roModeReset([&]() { settings.readOnlyMode = false; }); - auto subs = getDefaultSubstituters(); + auto subs = state.aio.blockOn(getDefaultSubstituters()); subs.push_front(evaluator.store); diff --git a/lix/libstore/build/drv-output-substitution-goal.cc b/lix/libstore/build/drv-output-substitution-goal.cc index ace2f5161..2fd43d5bc 100644 --- a/lix/libstore/build/drv-output-substitution-goal.cc +++ b/lix/libstore/build/drv-output-substitution-goal.cc @@ -34,7 +34,7 @@ try { co_return WorkResult{ecSuccess}; } - subs = settings.useSubstitutes ? getDefaultSubstituters() : std::list>(); + subs = settings.useSubstitutes ? TRY_AWAIT(getDefaultSubstituters()) : std::list>(); co_return co_await tryNext(); } catch (...) { co_return result::current_exception(); diff --git a/lix/libstore/build/substitution-goal.cc b/lix/libstore/build/substitution-goal.cc index 2501495f9..55721ca42 100644 --- a/lix/libstore/build/substitution-goal.cc +++ b/lix/libstore/build/substitution-goal.cc @@ -62,7 +62,7 @@ try { if (settings.readOnlyMode) throw Error("cannot substitute path '%s' - no write access to the Nix store", worker.store.printStorePath(storePath)); - subs = settings.useSubstitutes ? getDefaultSubstituters() : std::list>(); + subs = settings.useSubstitutes ? TRY_AWAIT(getDefaultSubstituters()) : std::list>(); BOOST_OUTCOME_CO_TRY(auto result, co_await tryNext()); result.storePath = storePath; diff --git a/lix/libstore/local-store.cc b/lix/libstore/local-store.cc index 5cde2ff6c..b206e2ffa 100644 --- a/lix/libstore/local-store.cc +++ b/lix/libstore/local-store.cc @@ -1072,7 +1072,7 @@ try { StorePathSet res; - for (auto & sub : getDefaultSubstituters()) { + for (auto & sub : TRY_AWAIT(getDefaultSubstituters())) { if (remaining.empty()) break; if (sub->config().storeDir != config_.storeDir) continue; if (!sub->config().wantMassQuery) continue; diff --git a/lix/libstore/misc.cc b/lix/libstore/misc.cc index 336c69d03..368d3d106 100644 --- a/lix/libstore/misc.cc +++ b/lix/libstore/misc.cc @@ -251,7 +251,7 @@ struct QueryMissingContext continue; bool found = false; - for (auto &sub : getDefaultSubstituters()) { + for (auto &sub : aio.blockOn(getDefaultSubstituters())) { auto realisation = sub->queryRealisation({hash, outputName}); if (!realisation) continue; diff --git a/lix/libstore/store-api.cc b/lix/libstore/store-api.cc index 7a686bbe1..ecc0a8ca3 100644 --- a/lix/libstore/store-api.cc +++ b/lix/libstore/store-api.cc @@ -607,7 +607,7 @@ StorePathSet Store::queryDerivationOutputs(const StorePath & path) kj::Promise> Store::querySubstitutablePathInfos(const StorePathCAMap & paths, SubstitutablePathInfos & infos) try { if (!settings.useSubstitutes) co_return result::success(); - for (auto & sub : getDefaultSubstituters()) { + for (auto & sub : TRY_AWAIT(getDefaultSubstituters())) { for (auto & path : paths) { if (infos.count(path.first)) // Choose first succeeding substituter. @@ -1566,8 +1566,8 @@ ref openStore(const std::string & uri_, throw Error("don't know how to open Nix store '%s'", uri_); } -std::list> getDefaultSubstituters() -{ +kj::Promise>>> getDefaultSubstituters() +try { static auto stores([]() { std::list> stores; @@ -1592,7 +1592,9 @@ std::list> getDefaultSubstituters() return stores; } ()); - return stores; + co_return stores; +} catch (...) { + co_return result::current_exception(); } std::vector * StoreImplementations::registered = 0; diff --git a/lix/libstore/store-api.hh b/lix/libstore/store-api.hh index cdd491d32..dece1f90c 100644 --- a/lix/libstore/store-api.hh +++ b/lix/libstore/store-api.hh @@ -1008,7 +1008,7 @@ ref openStore(const std::string & uri = settings.storeUri.get(), * @return the default substituter stores, defined by the * ‘substituters’ option and various legacy options. */ -std::list> getDefaultSubstituters(); +kj::Promise>>> getDefaultSubstituters(); struct StoreFactory { diff --git a/lix/nix/log.cc b/lix/nix/log.cc index b15ec63e5..0e0000002 100644 --- a/lix/nix/log.cc +++ b/lix/nix/log.cc @@ -26,7 +26,7 @@ struct CmdLog : InstallableCommand { settings.readOnlyMode = true; - auto subs = getDefaultSubstituters(); + auto subs = aio().blockOn(getDefaultSubstituters()); subs.push_front(store);