diff options
author | Daiderd Jordan <daiderd@gmail.com> | 2018-10-29 12:09:22 +0000 |
---|---|---|
committer | Daiderd Jordan <daiderd@gmail.com> | 2018-10-29 12:09:22 +0000 |
commit | 8e6bf492971347e18c1b5800e9e8fa5191a0839b (patch) | |
tree | 6e927014e43e034c427babd2bac88c67b3f3799d /src/nix | |
parent | 18b4c53f71dfc626f5f5ffa0282afd1b9faad6a4 (diff) |
nix doctor: return nonzero exitcode if a check fails
This makes it easier to use this when testing the installer or when
running the checks with other automated tooling.
Diffstat (limited to 'src/nix')
-rw-r--r-- | src/nix/doctor.cc | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/src/nix/doctor.cc b/src/nix/doctor.cc index 1ce3efcb0..7b5444619 100644 --- a/src/nix/doctor.cc +++ b/src/nix/doctor.cc @@ -18,6 +18,8 @@ std::string formatProtocol(unsigned int proto) struct CmdDoctor : StoreCommand { + bool success = true; + std::string name() override { return "doctor"; @@ -36,13 +38,16 @@ struct CmdDoctor : StoreCommand auto type = getStoreType(); if (type < tOther) { - checkNixInPath(); - checkProfileRoots(store); + success &= checkNixInPath(); + success &= checkProfileRoots(store); } - checkStoreProtocol(store->getProtocol()); + success &= checkStoreProtocol(store->getProtocol()); + + if (!success) + throw Exit(2); } - void checkNixInPath() + bool checkNixInPath() { PathSet dirs; @@ -56,10 +61,13 @@ struct CmdDoctor : StoreCommand for (auto & dir : dirs) std::cout << " " << dir << std::endl; std::cout << std::endl; + return false; } + + return true; } - void checkProfileRoots(ref<Store> store) + bool checkProfileRoots(ref<Store> store) { PathSet dirs; @@ -86,10 +94,13 @@ struct CmdDoctor : StoreCommand for (auto & dir : dirs) std::cout << " " << dir << std::endl; std::cout << std::endl; + return false; } + + return true; } - void checkStoreProtocol(unsigned int storeProto) + bool checkStoreProtocol(unsigned int storeProto) { unsigned int clientProto = GET_PROTOCOL_MAJOR(SERVE_PROTOCOL_VERSION) == GET_PROTOCOL_MAJOR(storeProto) ? SERVE_PROTOCOL_VERSION @@ -103,7 +114,10 @@ struct CmdDoctor : StoreCommand std::cout << "Client protocol: " << formatProtocol(clientProto) << std::endl; std::cout << "Store protocol: " << formatProtocol(storeProto) << std::endl; std::cout << std::endl; + return false; } + + return true; } }; |