forked from lix-project/lix
Correctly call all the parent contructors of the stores
Using virtual inheritance means that only the default constructors of the parent classes will be called, which isn't what we want
This commit is contained in:
parent
d184ad1d27
commit
5895184df4
|
@ -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)
|
||||||
: Store(params), LocalFSStore(params), next(next), goal(goal)
|
: StoreConfig(params), LocalFSStoreConfig(params), Store(params), LocalFSStore(params), next(next), goal(goal)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
Path getRealStoreDir() override
|
Path getRealStoreDir() override
|
||||||
|
|
|
@ -2,17 +2,22 @@
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
struct DummyStoreConfig : StoreConfig {};
|
struct DummyStoreConfig : StoreConfig {
|
||||||
|
using StoreConfig::StoreConfig;
|
||||||
|
};
|
||||||
|
|
||||||
struct DummyStore : public Store
|
struct DummyStore : public Store, public virtual DummyStoreConfig
|
||||||
{
|
{
|
||||||
DummyStore(const std::string uri, const Params & params)
|
DummyStore(const std::string uri, const Params & params)
|
||||||
: DummyStore(params)
|
: DummyStore(params)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
DummyStore(const Params & params)
|
DummyStore(const Params & params)
|
||||||
: Store(params)
|
: StoreConfig(params)
|
||||||
{ }
|
, DummyStoreConfig(params)
|
||||||
|
, Store(params)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
string getUri() override
|
string getUri() override
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,7 +31,9 @@ public:
|
||||||
HttpBinaryCacheStore(
|
HttpBinaryCacheStore(
|
||||||
const Path & _cacheUri,
|
const Path & _cacheUri,
|
||||||
const Params & params)
|
const Params & params)
|
||||||
: BinaryCacheStore(params)
|
: StoreConfig(params)
|
||||||
|
, BinaryCacheStoreConfig(params)
|
||||||
|
, BinaryCacheStore(params)
|
||||||
, HttpBinaryCacheStoreConfig(params)
|
, HttpBinaryCacheStoreConfig(params)
|
||||||
, cacheUri(_cacheUri)
|
, cacheUri(_cacheUri)
|
||||||
{
|
{
|
||||||
|
|
|
@ -44,7 +44,8 @@ struct LegacySSHStore : public Store, public virtual LegacySSHStoreConfig
|
||||||
static std::vector<std::string> uriPrefixes() { return {"ssh"}; }
|
static std::vector<std::string> uriPrefixes() { return {"ssh"}; }
|
||||||
|
|
||||||
LegacySSHStore(const string & host, const Params & params)
|
LegacySSHStore(const string & host, const Params & params)
|
||||||
: LegacySSHStoreConfig(params)
|
: StoreConfig(params)
|
||||||
|
, LegacySSHStoreConfig(params)
|
||||||
, Store(params)
|
, Store(params)
|
||||||
, host(host)
|
, host(host)
|
||||||
, connections(make_ref<Pool<Connection>>(
|
, connections(make_ref<Pool<Connection>>(
|
||||||
|
|
|
@ -20,7 +20,9 @@ public:
|
||||||
LocalBinaryCacheStore(
|
LocalBinaryCacheStore(
|
||||||
const Path & binaryCacheDir,
|
const Path & binaryCacheDir,
|
||||||
const Params & params)
|
const Params & params)
|
||||||
: LocalBinaryCacheStoreConfig(params)
|
: StoreConfig(params)
|
||||||
|
, BinaryCacheStoreConfig(params)
|
||||||
|
, LocalBinaryCacheStoreConfig(params)
|
||||||
, BinaryCacheStore(params)
|
, BinaryCacheStore(params)
|
||||||
, binaryCacheDir(binaryCacheDir)
|
, binaryCacheDir(binaryCacheDir)
|
||||||
{
|
{
|
||||||
|
|
|
@ -42,7 +42,10 @@ namespace nix {
|
||||||
|
|
||||||
|
|
||||||
LocalStore::LocalStore(const Params & params)
|
LocalStore::LocalStore(const Params & params)
|
||||||
: Store(params)
|
: StoreConfig(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"}
|
||||||
|
|
|
@ -30,8 +30,17 @@ struct OptimiseStats
|
||||||
uint64_t blocksFreed = 0;
|
uint64_t blocksFreed = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct LocalStoreConfig : virtual LocalFSStoreConfig
|
||||||
|
{
|
||||||
|
using LocalFSStoreConfig::LocalFSStoreConfig;
|
||||||
|
|
||||||
class LocalStore : public LocalFSStore
|
Setting<bool> requireSigs{(StoreConfig*) this,
|
||||||
|
settings.requireSigs,
|
||||||
|
"require-sigs", "whether store paths should have a trusted signature on import"};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class LocalStore : public LocalFSStore, public virtual LocalStoreConfig
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -95,10 +104,6 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
Setting<bool> requireSigs{(StoreConfig*) this,
|
|
||||||
settings.requireSigs,
|
|
||||||
"require-sigs", "whether store paths should have a trusted signature on import"};
|
|
||||||
|
|
||||||
const PublicKeys & getPublicKeys();
|
const PublicKeys & getPublicKeys();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -124,7 +124,10 @@ ref<RemoteStore::Connection> RemoteStore::openConnectionWrapper()
|
||||||
|
|
||||||
|
|
||||||
UDSRemoteStore::UDSRemoteStore(const Params & params)
|
UDSRemoteStore::UDSRemoteStore(const Params & params)
|
||||||
: Store(params)
|
: StoreConfig(params)
|
||||||
|
, Store(params)
|
||||||
|
, LocalFSStoreConfig(params)
|
||||||
|
, RemoteStoreConfig(params)
|
||||||
, UDSRemoteStoreConfig(params)
|
, UDSRemoteStoreConfig(params)
|
||||||
, LocalFSStore(params)
|
, LocalFSStore(params)
|
||||||
, RemoteStore(params)
|
, RemoteStore(params)
|
||||||
|
|
|
@ -148,7 +148,8 @@ private:
|
||||||
struct UDSRemoteStoreConfig : virtual LocalFSStoreConfig, virtual RemoteStoreConfig
|
struct UDSRemoteStoreConfig : virtual LocalFSStoreConfig, virtual RemoteStoreConfig
|
||||||
{
|
{
|
||||||
UDSRemoteStoreConfig(const Store::Params & params)
|
UDSRemoteStoreConfig(const Store::Params & params)
|
||||||
: LocalFSStoreConfig(params)
|
: StoreConfig(params)
|
||||||
|
, LocalFSStoreConfig(params)
|
||||||
, RemoteStoreConfig(params)
|
, RemoteStoreConfig(params)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -199,7 +199,9 @@ struct S3BinaryCacheStoreImpl : public S3BinaryCacheStore, virtual S3BinaryCache
|
||||||
S3BinaryCacheStoreImpl(
|
S3BinaryCacheStoreImpl(
|
||||||
const std::string & bucketName,
|
const std::string & bucketName,
|
||||||
const Params & params)
|
const Params & params)
|
||||||
: S3BinaryCacheStoreConfig(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)
|
||||||
|
|
|
@ -11,20 +11,23 @@ namespace nix {
|
||||||
struct SSHStoreConfig : virtual RemoteStoreConfig
|
struct SSHStoreConfig : virtual RemoteStoreConfig
|
||||||
{
|
{
|
||||||
using RemoteStoreConfig::RemoteStoreConfig;
|
using RemoteStoreConfig::RemoteStoreConfig;
|
||||||
|
|
||||||
const Setting<Path> sshKey{(StoreConfig*) this, "", "ssh-key", "path to an SSH private key"};
|
const Setting<Path> sshKey{(StoreConfig*) this, "", "ssh-key", "path to an SSH private key"};
|
||||||
const Setting<bool> compress{(StoreConfig*) this, false, "compress", "whether to compress the connection"};
|
const Setting<bool> compress{(StoreConfig*) this, false, "compress", "whether to compress the connection"};
|
||||||
const Setting<Path> remoteProgram{(StoreConfig*) this, "nix-daemon", "remote-program", "path to the nix-daemon executable on the remote system"};
|
const Setting<Path> remoteProgram{(StoreConfig*) this, "nix-daemon", "remote-program", "path to the nix-daemon executable on the remote system"};
|
||||||
const Setting<std::string> remoteStore{(StoreConfig*) this, "", "remote-store", "URI of the store on the remote system"};
|
const Setting<std::string> remoteStore{(StoreConfig*) this, "", "remote-store", "URI of the store on the remote system"};
|
||||||
};
|
};
|
||||||
|
|
||||||
class SSHStore : public RemoteStore, public virtual SSHStoreConfig
|
class SSHStore : public virtual RemoteStore, public virtual SSHStoreConfig
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
SSHStore(const std::string & host, const Params & params)
|
SSHStore(const std::string & host, const Params & params)
|
||||||
: Store(params)
|
: StoreConfig(params)
|
||||||
|
, Store(params)
|
||||||
, RemoteStoreConfig(params)
|
, RemoteStoreConfig(params)
|
||||||
, RemoteStore(params)
|
, RemoteStore(params)
|
||||||
|
, SSHStoreConfig(params)
|
||||||
, host(host)
|
, host(host)
|
||||||
, master(
|
, master(
|
||||||
host,
|
host,
|
||||||
|
|
|
@ -653,7 +653,7 @@ struct LocalFSStoreConfig : virtual StoreConfig
|
||||||
"log", "directory where Nix will store state"};
|
"log", "directory where Nix will store state"};
|
||||||
};
|
};
|
||||||
|
|
||||||
class LocalFSStore : public virtual Store, public LocalFSStoreConfig
|
class LocalFSStore : public virtual Store, public virtual LocalFSStoreConfig
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue