aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/ssh-store.cc
diff options
context:
space:
mode:
authorDaiderd Jordan <daiderd@gmail.com>2020-02-03 23:18:34 +0100
committerDaiderd Jordan <daiderd@gmail.com>2020-02-03 23:22:28 +0100
commit8745c63d3c674871393aa3f56c8457b056af8c87 (patch)
tree2cb8ee512258b37372ec1e63da65e27f51ec5e3b /src/libstore/ssh-store.cc
parent8b09105db3869284ee7892f82155dda79f98d6e6 (diff)
ssh-store: add remote-store and remote-program query params
Brings the functionality of ssh-ng:// in sync with the legacy ssh:// implementation. Specifying the remote store uri enables various useful things. eg. $ nix copy --to ssh-ng://cache?remote-store=file://mnt/cache --all
Diffstat (limited to 'src/libstore/ssh-store.cc')
-rw-r--r--src/libstore/ssh-store.cc6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/libstore/ssh-store.cc b/src/libstore/ssh-store.cc
index 42ee06501..af99ad40a 100644
--- a/src/libstore/ssh-store.cc
+++ b/src/libstore/ssh-store.cc
@@ -16,6 +16,8 @@ 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{this, "nix-daemon", "remote-program", "path to the nix-daemon executable on the remote system"};
+ const Setting<std::string> remoteStore{this, "", "remote-store", "URI of the store on the remote system"};
SSHStore(const std::string & host, const Params & params)
: Store(params)
@@ -82,7 +84,9 @@ ref<FSAccessor> SSHStore::getFSAccessor()
ref<RemoteStore::Connection> SSHStore::openConnection()
{
auto conn = make_ref<Connection>();
- conn->sshConn = master.startCommand("nix-daemon --stdio");
+ conn->sshConn = master.startCommand(
+ fmt("%s --stdio", remoteProgram)
+ + (remoteStore.get() == "" ? "" : " --store " + shellEscape(remoteStore.get())));
conn->to = FdSink(conn->sshConn->in.get());
conn->from = FdSource(conn->sshConn->out.get());
initConnection(*conn);