aboutsummaryrefslogtreecommitdiff
path: root/src/libstore
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2017-10-24 15:16:18 +0200
committerEelco Dolstra <edolstra@gmail.com>2017-10-24 15:32:38 +0200
commitd16fd2497374671c92cb877f9570d65783a77d99 (patch)
treece2a871f4d9e5a65108768f1f8584cd545cbd6ac /src/libstore
parent3460e4cf007017e89096b4fad083692666b87a20 (diff)
Allow shorter syntax for chroot stores
You can now say '--store /tmp/nix' instead of '--store local?root=/tmp/nix'.
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/machines.cc6
-rw-r--r--src/libstore/store-api.cc10
2 files changed, 12 insertions, 4 deletions
diff --git a/src/libstore/machines.cc b/src/libstore/machines.cc
index d2faf4535..edd03d147 100644
--- a/src/libstore/machines.cc
+++ b/src/libstore/machines.cc
@@ -17,7 +17,11 @@ Machine::Machine(decltype(storeUri) storeUri,
storeUri(
// Backwards compatibility: if the URI is a hostname,
// prepend ssh://.
- storeUri.find("://") != std::string::npos || hasPrefix(storeUri, "local") || hasPrefix(storeUri, "remote") || hasPrefix(storeUri, "auto")
+ storeUri.find("://") != std::string::npos
+ || hasPrefix(storeUri, "local")
+ || hasPrefix(storeUri, "remote")
+ || hasPrefix(storeUri, "auto")
+ || hasPrefix(storeUri, "/")
? storeUri
: "ssh://" + storeUri),
systemTypes(systemTypes),
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc
index 17237a035..c57e42fec 100644
--- a/src/libstore/store-api.cc
+++ b/src/libstore/store-api.cc
@@ -843,7 +843,7 @@ StoreType getStoreType(const std::string & uri, const std::string & stateDir)
{
if (uri == "daemon") {
return tDaemon;
- } else if (uri == "local") {
+ } else if (uri == "local" || hasPrefix(uri, "/")) {
return tLocal;
} else if (uri == "" || uri == "auto") {
if (access(stateDir.c_str(), R_OK | W_OK) == 0)
@@ -865,8 +865,12 @@ static RegisterStoreImplementation regStore([](
switch (getStoreType(uri, get(params, "state", settings.nixStateDir))) {
case tDaemon:
return std::shared_ptr<Store>(std::make_shared<UDSRemoteStore>(params));
- case tLocal:
- return std::shared_ptr<Store>(std::make_shared<LocalStore>(params));
+ case tLocal: {
+ Store::Params params2 = params;
+ if (hasPrefix(uri, "/"))
+ params2["root"] = uri;
+ return std::shared_ptr<Store>(std::make_shared<LocalStore>(params2));
+ }
default:
return nullptr;
}