1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-25 10:41:16 +02:00

Make the store plugins more introspectable

Directly register the store classes rather than a function to build an
instance of them.
This gives the possibility to introspect static members of the class or
choose different ways of instantiating them.
This commit is contained in:
regnat 2020-09-08 14:50:23 +02:00
parent 609a6d6d9f
commit 7d5bdf8b56
18 changed files with 141 additions and 117 deletions

View file

@ -13,7 +13,8 @@ private:
public:
LocalBinaryCacheStore(
const Params & params, const Path & binaryCacheDir)
const Path & binaryCacheDir,
const Params & params)
: BinaryCacheStore(params)
, binaryCacheDir(binaryCacheDir)
{
@ -26,6 +27,8 @@ public:
return "file://" + binaryCacheDir;
}
static std::vector<std::string> uriPrefixes();
protected:
bool fileExists(const std::string & path) override;
@ -85,16 +88,14 @@ bool LocalBinaryCacheStore::fileExists(const std::string & path)
return pathExists(binaryCacheDir + "/" + path);
}
static RegisterStoreImplementation regStore([](
const std::string & uri, const Store::Params & params)
-> std::shared_ptr<Store>
std::vector<std::string> LocalBinaryCacheStore::uriPrefixes()
{
if (getEnv("_NIX_FORCE_HTTP_BINARY_CACHE_STORE") == "1" ||
std::string(uri, 0, 7) != "file://")
return 0;
auto store = std::make_shared<LocalBinaryCacheStore>(params, std::string(uri, 7));
store->init();
return store;
});
if (getEnv("_NIX_FORCE_HTTP_BINARY_CACHE_STORE") == "1")
return {};
else
return {"file"};
}
[[maybe_unused]] static RegisterStoreImplementation<LocalBinaryCacheStore> regStore();
}