Skip to content

Commit f59ccb4

Browse files
committed
Simplify Implementations registration
1 parent 93844a5 commit f59ccb4

File tree

3 files changed

+8
-7
lines changed

3 files changed

+8
-7
lines changed

src/libstore/include/nix/store/store-api.hh

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -902,12 +902,15 @@ struct StoreFactory
902902

903903
struct Implementations
904904
{
905-
static std::vector<StoreFactory> * registered;
905+
static std::vector<StoreFactory> & registered()
906+
{
907+
static std::vector<StoreFactory> registered;
908+
return registered;
909+
}
906910

907911
template<typename T, typename TConfig>
908912
static void add()
909913
{
910-
if (!registered) registered = new std::vector<StoreFactory>();
911914
StoreFactory factory{
912915
.uriSchemes = TConfig::uriSchemes(),
913916
.create =
@@ -919,7 +922,7 @@ struct Implementations
919922
-> std::shared_ptr<StoreConfig>
920923
{ return std::make_shared<TConfig>(StringMap({})); })
921924
};
922-
registered->push_back(factory);
925+
registered().push_back(factory);
923926
}
924927
};
925928

src/libstore/store-api.cc

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1355,7 +1355,7 @@ ref<Store> openStore(StoreReference && storeURI)
13551355
return std::make_shared<LocalStore>(params);
13561356
},
13571357
[&](const StoreReference::Specified & g) {
1358-
for (const auto & implem : *Implementations::registered)
1358+
for (const auto & implem : Implementations::registered())
13591359
if (implem.uriSchemes.count(g.scheme))
13601360
return implem.create(g.scheme, g.authority, params);
13611361

@@ -1399,6 +1399,4 @@ std::list<ref<Store>> getDefaultSubstituters()
13991399
return stores;
14001400
}
14011401

1402-
std::vector<StoreFactory> * Implementations::registered = 0;
1403-
14041402
}

src/nix/main.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ struct NixArgs : virtual MultiCommand, virtual MixCommonArgs, virtual RootArgs
193193
res["args"] = toJSON();
194194

195195
auto stores = nlohmann::json::object();
196-
for (auto & implem : *Implementations::registered) {
196+
for (auto & implem : Implementations::registered()) {
197197
auto storeConfig = implem.getConfig();
198198
auto storeName = storeConfig->name();
199199
auto & j = stores[storeName];

0 commit comments

Comments
 (0)