about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/nix/command.cc22
-rw-r--r--src/nix/command.hh1
-rw-r--r--src/nix/verify.cc68
3 files changed, 31 insertions, 60 deletions
diff --git a/src/nix/command.cc b/src/nix/command.cc
index a89246a937c1..986953fd845d 100644
--- a/src/nix/command.cc
+++ b/src/nix/command.cc
@@ -73,18 +73,28 @@ StorePathsCommand::StorePathsCommand()
 {
     expectArgs("paths", &storePaths);
     mkFlag('r', "recursive", "apply operation to closure of the specified paths", &recursive);
+    mkFlag(0, "all", "apply operation to the entire store", &all);
 }
 
 void StorePathsCommand::run(ref<Store> store)
 {
-    for (auto & storePath : storePaths)
-        storePath = followLinksToStorePath(storePath);
+    if (all) {
+        if (storePaths.size())
+            throw UsageError("‘--all’ does not expect arguments");
+        for (auto & p : store->queryAllValidPaths())
+            storePaths.push_back(p);
+    }
 
-    if (recursive) {
-        PathSet closure;
+    else {
         for (auto & storePath : storePaths)
-            store->computeFSClosure(storePath, closure, false, false);
-        storePaths = store->topoSortPaths(closure);
+            storePath = followLinksToStorePath(storePath);
+
+        if (recursive) {
+            PathSet closure;
+            for (auto & storePath : storePaths)
+                store->computeFSClosure(storePath, closure, false, false);
+            storePaths = store->topoSortPaths(closure);
+        }
     }
 
     run(store, storePaths);
diff --git a/src/nix/command.hh b/src/nix/command.hh
index 8397244ca177..a6adb5f65491 100644
--- a/src/nix/command.hh
+++ b/src/nix/command.hh
@@ -31,6 +31,7 @@ private:
 
     Paths storePaths;
     bool recursive = false;
+    bool all = false;
 
 public:
 
diff --git a/src/nix/verify.cc b/src/nix/verify.cc
index 9214d3b651d1..39a4395cfe5b 100644
--- a/src/nix/verify.cc
+++ b/src/nix/verify.cc
@@ -10,14 +10,14 @@
 
 using namespace nix;
 
-struct MixVerify : virtual Args
+struct CmdVerify : StorePathsCommand
 {
     bool noContents = false;
     bool noTrust = false;
     Strings substituterUris;
     size_t sigsNeeded;
 
-    MixVerify()
+    CmdVerify()
     {
         mkFlag(0, "no-contents", "do not verify the contents of each store path", &noContents);
         mkFlag(0, "no-trust", "do not verify whether each store path is trusted", &noTrust);
@@ -26,7 +26,17 @@ struct MixVerify : virtual Args
         mkIntFlag('n', "sigs-needed", "require that each path has at least N valid signatures", &sigsNeeded);
     }
 
-    void verifyPaths(ref<Store> store, const Paths & storePaths)
+    std::string name() override
+    {
+        return "verify";
+    }
+
+    std::string description() override
+    {
+        return "verify the integrity of store paths";
+    }
+
+    void run(ref<Store> store, Paths storePaths) override
     {
         restoreAffinity(); // FIXME
 
@@ -158,54 +168,4 @@ struct MixVerify : virtual Args
     }
 };
 
-struct CmdVerifyPaths : StorePathsCommand, MixVerify
-{
-    CmdVerifyPaths()
-    {
-    }
-
-    std::string name() override
-    {
-        return "verify-paths";
-    }
-
-    std::string description() override
-    {
-        return "verify the integrity of store paths";
-    }
-
-    void run(ref<Store> store, Paths storePaths) override
-    {
-        verifyPaths(store, storePaths);
-    }
-};
-
-static RegisterCommand r1(make_ref<CmdVerifyPaths>());
-
-struct CmdVerifyStore : StoreCommand, MixVerify
-{
-    CmdVerifyStore()
-    {
-    }
-
-    std::string name() override
-    {
-        return "verify-store";
-    }
-
-    std::string description() override
-    {
-        return "verify the integrity of all paths in the Nix store";
-    }
-
-    void run(ref<Store> store) override
-    {
-        // FIXME: use store->verifyStore()?
-
-        PathSet validPaths = store->queryAllValidPaths();
-
-        verifyPaths(store, Paths(validPaths.begin(), validPaths.end()));
-    }
-};
-
-static RegisterCommand r2(make_ref<CmdVerifyStore>());
+static RegisterCommand r1(make_ref<CmdVerify>());