aboutsummaryrefslogtreecommitdiff
path: root/src/nix/run.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2022-03-28 14:58:38 +0200
committerEelco Dolstra <edolstra@gmail.com>2022-03-28 14:58:38 +0200
commitb266fd53dda9c303c55ceb55752c2117011fce69 (patch)
tree7e06b7a643fa453da2508c207d25d6e82cb6b55f /src/nix/run.cc
parent0b33c9f9c39bef17de79dda3cfee2ddff4cb816d (diff)
nix {run,shell}: Print a better error message if the store is not local
Closes #6317
Diffstat (limited to 'src/nix/run.cc')
-rw-r--r--src/nix/run.cc7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/nix/run.cc b/src/nix/run.cc
index 033263c36..23e893fbf 100644
--- a/src/nix/run.cc
+++ b/src/nix/run.cc
@@ -38,9 +38,12 @@ void runProgramInStore(ref<Store> store,
unshare(CLONE_NEWUSER) doesn't work in a multithreaded program
(which "nix" is), so we exec() a single-threaded helper program
(chrootHelper() below) to do the work. */
- auto store2 = store.dynamic_pointer_cast<LocalStore>();
+ auto store2 = store.dynamic_pointer_cast<LocalFSStore>();
- if (store2 && store->storeDir != store2->getRealStoreDir()) {
+ if (!store2)
+ throw Error("store '%s' is not a local store so it does not support command execution", store->getUri());
+
+ if (store->storeDir != store2->getRealStoreDir()) {
Strings helperArgs = { chrootHelperName, store->storeDir, store2->getRealStoreDir(), program };
for (auto & arg : args) helperArgs.push_back(arg);