aboutsummaryrefslogtreecommitdiff
path: root/src/libcmd
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcmd')
-rw-r--r--src/libcmd/command.cc67
-rw-r--r--src/libcmd/command.hh30
2 files changed, 43 insertions, 54 deletions
diff --git a/src/libcmd/command.cc b/src/libcmd/command.cc
index 5e6d4a857..6d183dfad 100644
--- a/src/libcmd/command.cc
+++ b/src/libcmd/command.cc
@@ -54,6 +54,36 @@ void StoreCommand::run()
run(getStore());
}
+CopyCommand::CopyCommand()
+{
+ addFlag({
+ .longName = "from",
+ .description = "URL of the source Nix store.",
+ .labels = {"store-uri"},
+ .handler = {&srcUri},
+ });
+
+ addFlag({
+ .longName = "to",
+ .description = "URL of the destination Nix store.",
+ .labels = {"store-uri"},
+ .handler = {&dstUri},
+ });
+}
+
+ref<Store> CopyCommand::createStore()
+{
+ return srcUri.empty() ? StoreCommand::createStore() : openStore(srcUri);
+}
+
+ref<Store> CopyCommand::getDstStore()
+{
+ if (srcUri.empty() && dstUri.empty())
+ throw UsageError("you must pass '--from' and/or '--to'");
+
+ return dstUri.empty() ? openStore() : openStore(dstUri);
+}
+
EvalCommand::EvalCommand()
{
}
@@ -159,43 +189,6 @@ void StorePathsCommand::run(ref<Store> store, BuiltPaths && paths)
run(store, std::move(sorted));
}
-CopyCommand::CopyCommand()
- : BuiltPathsCommand(true)
-{
- addFlag({
- .longName = "from",
- .description = "URL of the source Nix store.",
- .labels = {"store-uri"},
- .handler = {&srcUri},
- });
-
- addFlag({
- .longName = "to",
- .description = "URL of the destination Nix store.",
- .labels = {"store-uri"},
- .handler = {&dstUri},
- });
-}
-
-ref<Store> CopyCommand::createStore()
-{
- return srcUri.empty() ? StoreCommand::createStore() : openStore(srcUri);
-}
-
-void CopyCommand::run(ref<Store> store)
-{
- if (srcUri.empty() && dstUri.empty())
- throw UsageError("you must pass '--from' and/or '--to'");
-
- BuiltPathsCommand::run(store);
-}
-
-void CopyCommand::run(ref<Store> srcStore, BuiltPaths && paths)
-{
- ref<Store> dstStore = dstUri.empty() ? openStore() : openStore(dstUri);
- run(srcStore, dstStore, std::move(paths));
-}
-
void StorePathCommand::run(ref<Store> store, std::vector<StorePath> && storePaths)
{
if (storePaths.size() != 1)
diff --git a/src/libcmd/command.hh b/src/libcmd/command.hh
index 0c3e29e25..bd2a0a7ee 100644
--- a/src/libcmd/command.hh
+++ b/src/libcmd/command.hh
@@ -43,6 +43,19 @@ private:
std::shared_ptr<Store> _store;
};
+/* A command that copies something between `--from` and `--to`
+ stores. */
+struct CopyCommand : virtual StoreCommand
+{
+ std::string srcUri, dstUri;
+
+ CopyCommand();
+
+ ref<Store> createStore() override;
+
+ ref<Store> getDstStore();
+};
+
struct EvalCommand : virtual StoreCommand, MixEvalArgs
{
EvalCommand();
@@ -176,23 +189,6 @@ public:
bool useDefaultInstallables() override { return !all; }
};
-/* A command that copies something between `--from` and `--to`
- stores. */
-struct CopyCommand : virtual BuiltPathsCommand
-{
- std::string srcUri, dstUri;
-
- CopyCommand();
-
- ref<Store> createStore() override;
-
- void run(ref<Store> store) override;
-
- void run(ref<Store> srcStore, BuiltPaths && paths) override;
-
- virtual void run(ref<Store> srcStore, ref<Store> dstStore, BuiltPaths && paths) = 0;
-};
-
struct StorePathsCommand : public BuiltPathsCommand
{
StorePathsCommand(bool recursive = false);