From 4f34c403980e7f5ae3d5257b742af6fd6452c6cf Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 29 Mar 2016 14:49:18 +0200 Subject: [PATCH] Add "nix verify-store" command Like "nix-store --verify --check-contents", but with the same advantages as "nix verify-paths". --- src/nix/verify.cc | 66 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 53 insertions(+), 13 deletions(-) diff --git a/src/nix/verify.cc b/src/nix/verify.cc index ef3e9fcc2..1bd2a000a 100644 --- a/src/nix/verify.cc +++ b/src/nix/verify.cc @@ -10,28 +10,18 @@ using namespace nix; -struct CmdVerifyPaths : StorePathsCommand +struct MixVerify : virtual Args { bool noContents = false; bool noSigs = false; - CmdVerifyPaths() + MixVerify() { mkFlag(0, "no-contents", "do not verify the contents of each store path", &noContents); mkFlag(0, "no-sigs", "do not verify whether each store path has a valid signature", &noSigs); } - std::string name() override - { - return "verify-paths"; - } - - std::string description() override - { - return "verify the integrity of store paths"; - } - - void run(ref store, Paths storePaths) override + void verifyPaths(ref store, const Paths & storePaths) { restoreAffinity(); // FIXME @@ -121,4 +111,54 @@ struct CmdVerifyPaths : StorePathsCommand } }; +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, Paths storePaths) override + { + verifyPaths(store, storePaths); + } +}; + static RegisterCommand r1(make_ref()); + +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) override + { + // FIXME: use store->verifyStore()? + + PathSet validPaths = store->queryAllValidPaths(); + + verifyPaths(store, Paths(validPaths.begin(), validPaths.end())); + } +}; + +static RegisterCommand r2(make_ref());