aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2018-01-31 23:12:39 +0100
committerGitHub <noreply@github.com>2018-01-31 23:12:39 +0100
commitc129fc6ee8a8bf6de633dc1b91869a0c428ca75c (patch)
treea8260a4989b7ff4b248cf09e246b40355e57be0c /src
parent88f4f0231b805d4d57ab4c03bd56650fe8b8fd4c (diff)
parent746f8aed86a990a6a8277cd2596f83166a73d718 (diff)
Merge pull request #1801 from catern/master
remote_store: register for NIX_REMOTE=unix://path
Diffstat (limited to 'src')
-rw-r--r--src/libstore/remote-store.cc26
-rw-r--r--src/libstore/remote-store.hh2
2 files changed, 26 insertions, 2 deletions
diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc
index 77b41b6bf..8f0b65557 100644
--- a/src/libstore/remote-store.cc
+++ b/src/libstore/remote-store.cc
@@ -78,9 +78,22 @@ UDSRemoteStore::UDSRemoteStore(const Params & params)
}
+UDSRemoteStore::UDSRemoteStore(std::string socket_path, const Params & params)
+ : Store(params)
+ , LocalFSStore(params)
+ , RemoteStore(params)
+ , path(socket_path)
+{
+}
+
+
std::string UDSRemoteStore::getUri()
{
- return "daemon";
+ if (path) {
+ return std::string("unix://") + *path;
+ } else {
+ return "daemon";
+ }
}
@@ -98,7 +111,7 @@ ref<RemoteStore::Connection> UDSRemoteStore::openConnection()
throw SysError("cannot create Unix domain socket");
closeOnExec(conn->fd.get());
- string socketPath = settings.nixDaemonSocketFile;
+ string socketPath = path ? *path : settings.nixDaemonSocketFile;
struct sockaddr_un addr;
addr.sun_family = AF_UNIX;
@@ -721,5 +734,14 @@ void RemoteStore::Connection::processStderr(Sink * sink, Source * source)
}
}
+static std::string uriScheme = "unix://";
+
+static RegisterStoreImplementation regStore([](
+ const std::string & uri, const Store::Params & params)
+ -> std::shared_ptr<Store>
+{
+ if (std::string(uri, 0, uriScheme.size()) != uriScheme) return 0;
+ return std::make_shared<UDSRemoteStore>(std::string(uri, uriScheme.size()), params);
+});
}
diff --git a/src/libstore/remote-store.hh b/src/libstore/remote-store.hh
index 30c6beae6..7f36e2064 100644
--- a/src/libstore/remote-store.hh
+++ b/src/libstore/remote-store.hh
@@ -134,6 +134,7 @@ class UDSRemoteStore : public LocalFSStore, public RemoteStore
public:
UDSRemoteStore(const Params & params);
+ UDSRemoteStore(std::string path, const Params & params);
std::string getUri() override;
@@ -145,6 +146,7 @@ private:
};
ref<RemoteStore::Connection> openConnection() override;
+ std::experimental::optional<std::string> path;
};