aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/ssh-store.cc
diff options
context:
space:
mode:
authorregnat <rg@regnat.ovh>2020-09-10 10:55:51 +0200
committerregnat <rg@regnat.ovh>2020-09-16 13:53:08 +0200
commit22afa8fb4dd7e459faf531dd8a9c3580d02c7e2a (patch)
tree00b6b6e1eaaccb3a190ce5d558298d8c9b013692 /src/libstore/ssh-store.cc
parentaa4eac37881258797c241113a5602913e1a5371a (diff)
Separate store configs from the implems
Rework the `Store` hierarchy so that there's now one hierarchy for the store configs and one for the implementations (where each implementation extends the corresponding config). So a class hierarchy like ``` StoreConfig-------->Store | | v v SubStoreConfig----->SubStore | | v v SubSubStoreConfig-->SubSubStore ``` (with virtual inheritance to prevent DDD). The advantage of this architecture is that we can now introspect the configuration of a store without having to instantiate the store itself
Diffstat (limited to 'src/libstore/ssh-store.cc')
-rw-r--r--src/libstore/ssh-store.cc25
1 files changed, 12 insertions, 13 deletions
diff --git a/src/libstore/ssh-store.cc b/src/libstore/ssh-store.cc
index 85ddce8be..2b6e2a298 100644
--- a/src/libstore/ssh-store.cc
+++ b/src/libstore/ssh-store.cc
@@ -8,23 +8,22 @@
namespace nix {
-class SSHStore : public RemoteStore
+struct SSHStoreConfig : virtual RemoteStoreConfig
{
-public:
-
- const Setting<Path> sshKey{(Store*) this, "", "ssh-key", "path to an SSH private key"};
- const Setting<bool> compress{(Store*) this, false, "compress", "whether to compress the connection"};
- const Setting<Path> remoteProgram{(Store*) this, "nix-daemon", "remote-program", "path to the nix-daemon executable on the remote system"};
- const Setting<std::string> remoteStore{(Store*) this, "", "remote-store", "URI of the store on the remote system"};
+ using RemoteStoreConfig::RemoteStoreConfig;
+ 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<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"};
+};
- SSHStore(
- const Params & params)
- : SSHStore("dummy", params)
- {
- }
+class SSHStore : public RemoteStore, public virtual SSHStoreConfig
+{
+public:
SSHStore(const std::string & host, const Params & params)
: Store(params)
+ , RemoteStoreConfig(params)
, RemoteStore(params)
, host(host)
, master(
@@ -82,6 +81,6 @@ ref<RemoteStore::Connection> SSHStore::openConnection()
return conn;
}
-static RegisterStoreImplementation<SSHStore> regStore;
+static RegisterStoreImplementation<SSHStore, SSHStoreConfig> regStore;
}