1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-26 20:01:15 +02:00

Simplify Implementations registration

This commit is contained in:
Eelco Dolstra 2025-05-05 08:41:23 +02:00
parent 93844a5998
commit f59ccb468e
3 changed files with 8 additions and 7 deletions

View file

@ -902,12 +902,15 @@ struct StoreFactory
struct Implementations
{
static std::vector<StoreFactory> * registered;
static std::vector<StoreFactory> & registered()
{
static std::vector<StoreFactory> registered;
return registered;
}
template<typename T, typename TConfig>
static void add()
{
if (!registered) registered = new std::vector<StoreFactory>();
StoreFactory factory{
.uriSchemes = TConfig::uriSchemes(),
.create =
@ -919,7 +922,7 @@ struct Implementations
-> std::shared_ptr<StoreConfig>
{ return std::make_shared<TConfig>(StringMap({})); })
};
registered->push_back(factory);
registered().push_back(factory);
}
};

View file

@ -1355,7 +1355,7 @@ ref<Store> openStore(StoreReference && storeURI)
return std::make_shared<LocalStore>(params);
},
[&](const StoreReference::Specified & g) {
for (const auto & implem : *Implementations::registered)
for (const auto & implem : Implementations::registered())
if (implem.uriSchemes.count(g.scheme))
return implem.create(g.scheme, g.authority, params);
@ -1399,6 +1399,4 @@ std::list<ref<Store>> getDefaultSubstituters()
return stores;
}
std::vector<StoreFactory> * Implementations::registered = 0;
}

View file

@ -193,7 +193,7 @@ struct NixArgs : virtual MultiCommand, virtual MixCommonArgs, virtual RootArgs
res["args"] = toJSON();
auto stores = nlohmann::json::object();
for (auto & implem : *Implementations::registered) {
for (auto & implem : Implementations::registered()) {
auto storeConfig = implem.getConfig();
auto storeName = storeConfig->name();
auto & j = stores[storeName];