forked from lix-project/lix
Document the new store hierarchy
This commit is contained in:
parent
d65962db4d
commit
f24f0888f9
|
@ -2883,7 +2883,7 @@ struct RestrictedStore : public LocalFSStore
|
||||||
DerivationGoal & goal;
|
DerivationGoal & goal;
|
||||||
|
|
||||||
RestrictedStore(const Params & params, ref<LocalStore> next, DerivationGoal & goal)
|
RestrictedStore(const Params & params, ref<LocalStore> next, DerivationGoal & goal)
|
||||||
: StoreConfig(params), LocalFSStoreConfig(params), Store(params), LocalFSStore(params), next(next), goal(goal)
|
: StoreConfig(params), Store(params), LocalFSStore(params), next(next), goal(goal)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
Path getRealStoreDir() override
|
Path getRealStoreDir() override
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
struct DummyStoreConfig : StoreConfig {
|
struct DummyStoreConfig : virtual StoreConfig {
|
||||||
using StoreConfig::StoreConfig;
|
using StoreConfig::StoreConfig;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -14,7 +14,6 @@ struct DummyStore : public Store, public virtual DummyStoreConfig
|
||||||
|
|
||||||
DummyStore(const Params & params)
|
DummyStore(const Params & params)
|
||||||
: StoreConfig(params)
|
: StoreConfig(params)
|
||||||
, DummyStoreConfig(params)
|
|
||||||
, Store(params)
|
, Store(params)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,9 +33,7 @@ public:
|
||||||
const Path & _cacheUri,
|
const Path & _cacheUri,
|
||||||
const Params & params)
|
const Params & params)
|
||||||
: StoreConfig(params)
|
: StoreConfig(params)
|
||||||
, BinaryCacheStoreConfig(params)
|
|
||||||
, BinaryCacheStore(params)
|
, BinaryCacheStore(params)
|
||||||
, HttpBinaryCacheStoreConfig(params)
|
|
||||||
, cacheUri(scheme + "://" + _cacheUri)
|
, cacheUri(scheme + "://" + _cacheUri)
|
||||||
{
|
{
|
||||||
if (cacheUri.back() == '/')
|
if (cacheUri.back() == '/')
|
||||||
|
|
|
@ -45,7 +45,6 @@ struct LegacySSHStore : public Store, public virtual LegacySSHStoreConfig
|
||||||
|
|
||||||
LegacySSHStore(const string & scheme, const string & host, const Params & params)
|
LegacySSHStore(const string & scheme, const string & host, const Params & params)
|
||||||
: StoreConfig(params)
|
: StoreConfig(params)
|
||||||
, LegacySSHStoreConfig(params)
|
|
||||||
, Store(params)
|
, Store(params)
|
||||||
, host(host)
|
, host(host)
|
||||||
, connections(make_ref<Pool<Connection>>(
|
, connections(make_ref<Pool<Connection>>(
|
||||||
|
|
|
@ -22,8 +22,6 @@ public:
|
||||||
const Path & binaryCacheDir,
|
const Path & binaryCacheDir,
|
||||||
const Params & params)
|
const Params & params)
|
||||||
: StoreConfig(params)
|
: StoreConfig(params)
|
||||||
, BinaryCacheStoreConfig(params)
|
|
||||||
, LocalBinaryCacheStoreConfig(params)
|
|
||||||
, BinaryCacheStore(params)
|
, BinaryCacheStore(params)
|
||||||
, binaryCacheDir(binaryCacheDir)
|
, binaryCacheDir(binaryCacheDir)
|
||||||
{
|
{
|
||||||
|
|
|
@ -44,8 +44,6 @@ namespace nix {
|
||||||
LocalStore::LocalStore(const Params & params)
|
LocalStore::LocalStore(const Params & params)
|
||||||
: StoreConfig(params)
|
: StoreConfig(params)
|
||||||
, Store(params)
|
, Store(params)
|
||||||
, LocalFSStoreConfig(params)
|
|
||||||
, LocalStoreConfig(params)
|
|
||||||
, LocalFSStore(params)
|
, LocalFSStore(params)
|
||||||
, realStoreDir_{this, false, rootDir != "" ? rootDir + "/nix/store" : storeDir, "real",
|
, realStoreDir_{this, false, rootDir != "" ? rootDir + "/nix/store" : storeDir, "real",
|
||||||
"physical path to the Nix store"}
|
"physical path to the Nix store"}
|
||||||
|
|
|
@ -126,9 +126,6 @@ ref<RemoteStore::Connection> RemoteStore::openConnectionWrapper()
|
||||||
UDSRemoteStore::UDSRemoteStore(const Params & params)
|
UDSRemoteStore::UDSRemoteStore(const Params & params)
|
||||||
: StoreConfig(params)
|
: StoreConfig(params)
|
||||||
, Store(params)
|
, Store(params)
|
||||||
, LocalFSStoreConfig(params)
|
|
||||||
, RemoteStoreConfig(params)
|
|
||||||
, UDSRemoteStoreConfig(params)
|
|
||||||
, LocalFSStore(params)
|
, LocalFSStore(params)
|
||||||
, RemoteStore(params)
|
, RemoteStore(params)
|
||||||
{
|
{
|
||||||
|
|
|
@ -201,8 +201,6 @@ struct S3BinaryCacheStoreImpl : public S3BinaryCacheStore, virtual S3BinaryCache
|
||||||
const std::string & bucketName,
|
const std::string & bucketName,
|
||||||
const Params & params)
|
const Params & params)
|
||||||
: StoreConfig(params)
|
: StoreConfig(params)
|
||||||
, BinaryCacheStoreConfig(params)
|
|
||||||
, S3BinaryCacheStoreConfig(params)
|
|
||||||
, S3BinaryCacheStore(params)
|
, S3BinaryCacheStore(params)
|
||||||
, bucketName(bucketName)
|
, bucketName(bucketName)
|
||||||
, s3Helper(profile, region, scheme, endpoint)
|
, s3Helper(profile, region, scheme, endpoint)
|
||||||
|
|
|
@ -25,9 +25,7 @@ public:
|
||||||
SSHStore([[maybe_unused]] const std::string & scheme, const std::string & host, const Params & params)
|
SSHStore([[maybe_unused]] const std::string & scheme, const std::string & host, const Params & params)
|
||||||
: StoreConfig(params)
|
: StoreConfig(params)
|
||||||
, Store(params)
|
, Store(params)
|
||||||
, RemoteStoreConfig(params)
|
|
||||||
, RemoteStore(params)
|
, RemoteStore(params)
|
||||||
, SSHStoreConfig(params)
|
|
||||||
, host(host)
|
, host(host)
|
||||||
, master(
|
, master(
|
||||||
host,
|
host,
|
||||||
|
|
|
@ -24,6 +24,31 @@
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* About the class hierarchy of the store implementations:
|
||||||
|
*
|
||||||
|
* Each store type `Foo` consists of two classes:
|
||||||
|
*
|
||||||
|
* 1. A class `FooConfig : virtual StoreConfig` that contains the configuration
|
||||||
|
* for the store
|
||||||
|
*
|
||||||
|
* It should only contain members of type `const Setting<T>` (or subclasses
|
||||||
|
* of it) and inherit the constructors of `StoreConfig`
|
||||||
|
* (`using StoreConfig::StoreConfig`).
|
||||||
|
*
|
||||||
|
* 2. A class `Foo : virtual Store, virtual FooConfig` that contains the
|
||||||
|
* implementation of the store.
|
||||||
|
*
|
||||||
|
* This class is expected to have a constructor `Foo(const Params & params)`
|
||||||
|
* that calls `StoreConfig(params)` (otherwise you're gonna encounter an
|
||||||
|
* `assertion failure` when trying to instantiate it).
|
||||||
|
*
|
||||||
|
* You can then register the new store using:
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* cpp static RegisterStoreImplementation<Foo, FooConfig> regStore;
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
|
||||||
MakeError(SubstError, Error);
|
MakeError(SubstError, Error);
|
||||||
MakeError(BuildError, Error); // denotes a permanent build failure
|
MakeError(BuildError, Error); // denotes a permanent build failure
|
||||||
|
@ -148,7 +173,26 @@ struct BuildResult
|
||||||
struct StoreConfig : public Config
|
struct StoreConfig : public Config
|
||||||
{
|
{
|
||||||
using Config::Config;
|
using Config::Config;
|
||||||
StoreConfig() = delete;
|
|
||||||
|
/**
|
||||||
|
* When constructing a store implementation, we pass in a map `params` of
|
||||||
|
* parameters that's supposed to initialize the associated config.
|
||||||
|
* To do that, we must use the `StoreConfig(StringMap & params)`
|
||||||
|
* constructor, so we'd like to `delete` its default constructor to enforce
|
||||||
|
* it.
|
||||||
|
*
|
||||||
|
* However, actually deleting it means that all the subclasses of
|
||||||
|
* `StoreConfig` will have their default constructor deleted (because it's
|
||||||
|
* supposed to call the deleted default constructor of `StoreConfig`). But
|
||||||
|
* because we're always using virtual inheritance, the constructors of
|
||||||
|
* child classes will never implicitely call this one, so deleting it will
|
||||||
|
* be more painful than anything else.
|
||||||
|
*
|
||||||
|
* So we `assert(false)` here to ensure at runtime that the right
|
||||||
|
* constructor is always called without having to redefine a custom
|
||||||
|
* constructor for each `*Config` class.
|
||||||
|
*/
|
||||||
|
StoreConfig() { assert(false); }
|
||||||
|
|
||||||
|
|
||||||
const PathSetting storeDir_{this, false, settings.nixStore,
|
const PathSetting storeDir_{this, false, settings.nixStore,
|
||||||
|
|
Loading…
Reference in a new issue