aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nix/command.cc7
-rw-r--r--src/nix/command.hh1
-rw-r--r--src/nix/copy.cc10
3 files changed, 14 insertions, 4 deletions
diff --git a/src/nix/command.cc b/src/nix/command.cc
index 5a8288da9..a1b2c120a 100644
--- a/src/nix/command.cc
+++ b/src/nix/command.cc
@@ -79,9 +79,14 @@ StoreCommand::StoreCommand()
mkFlag(0, "store", "store-uri", "URI of the Nix store to use", &storeUri);
}
+ref<Store> StoreCommand::createStore()
+{
+ return openStore(storeUri);
+}
+
void StoreCommand::run()
{
- run(openStore(storeUri));
+ run(createStore());
}
StorePathsCommand::StorePathsCommand()
diff --git a/src/nix/command.hh b/src/nix/command.hh
index a29cdcf7f..fa6c21abf 100644
--- a/src/nix/command.hh
+++ b/src/nix/command.hh
@@ -33,6 +33,7 @@ struct StoreCommand : virtual Command
std::string storeUri;
StoreCommand();
void run() override;
+ virtual ref<Store> createStore();
virtual void run(ref<Store>) = 0;
};
diff --git a/src/nix/copy.cc b/src/nix/copy.cc
index 083dc3506..b2165cb8f 100644
--- a/src/nix/copy.cc
+++ b/src/nix/copy.cc
@@ -38,13 +38,17 @@ struct CmdCopy : StorePathsCommand
};
}
- void run(ref<Store> store, Paths storePaths) override
+ ref<Store> createStore() override
+ {
+ return srcUri.empty() ? StoreCommand::createStore() : openStore(srcUri);
+ }
+
+ void run(ref<Store> srcStore, Paths storePaths) override
{
if (srcUri.empty() && dstUri.empty())
throw UsageError("you must pass ‘--from’ and/or ‘--to’");
- ref<Store> srcStore = srcUri.empty() ? store : openStore(srcUri);
- ref<Store> dstStore = dstUri.empty() ? store : openStore(dstUri);
+ ref<Store> dstStore = dstUri.empty() ? openStore() : openStore(dstUri);
copyPaths(srcStore, dstStore, PathSet(storePaths.begin(), storePaths.end()));
}