aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/store-api.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore/store-api.cc')
-rw-r--r--src/libstore/store-api.cc35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc
index 14932f9b0..2763f5ad4 100644
--- a/src/libstore/store-api.cc
+++ b/src/libstore/store-api.cc
@@ -501,4 +501,39 @@ static RegisterStoreImplementation regStore([](const std::string & uri) -> std::
});
+std::list<ref<Store>> getDefaultSubstituters()
+{
+ struct State {
+ bool done = false;
+ std::list<ref<Store>> stores;
+ };
+ static Sync<State> state_;
+
+ auto state(state_.lock());
+
+ if (state->done) return state->stores;
+
+ StringSet done;
+
+ auto addStore = [&](const std::string & uri) {
+ if (done.count(uri)) return;
+ done.insert(uri);
+ state->stores.push_back(openStoreAt(uri));
+ };
+
+ for (auto uri : settings.get("substituters", Strings()))
+ addStore(uri);
+
+ for (auto uri : settings.get("binary-caches", Strings()))
+ addStore(uri);
+
+ for (auto uri : settings.get("extra-binary-caches", Strings()))
+ addStore(uri);
+
+ state->done = true;
+
+ return state->stores;
+}
+
+
}