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.
This commit is contained in:
Daiderd Jordan 2018-10-29 12:09:22 +00:00
parent 18b4c53f71
commit 8e6bf49297
No known key found for this signature in database
GPG key ID: D02435D05B810C96

View file

@ -18,6 +18,8 @@ std::string formatProtocol(unsigned int proto)
struct CmdDoctor : StoreCommand struct CmdDoctor : StoreCommand
{ {
bool success = true;
std::string name() override std::string name() override
{ {
return "doctor"; return "doctor";
@ -36,13 +38,16 @@ struct CmdDoctor : StoreCommand
auto type = getStoreType(); auto type = getStoreType();
if (type < tOther) { if (type < tOther) {
checkNixInPath(); success &= checkNixInPath();
checkProfileRoots(store); success &= checkProfileRoots(store);
} }
checkStoreProtocol(store->getProtocol()); success &= checkStoreProtocol(store->getProtocol());
if (!success)
throw Exit(2);
} }
void checkNixInPath() bool checkNixInPath()
{ {
PathSet dirs; PathSet dirs;
@ -56,10 +61,13 @@ struct CmdDoctor : StoreCommand
for (auto & dir : dirs) for (auto & dir : dirs)
std::cout << " " << dir << std::endl; std::cout << " " << dir << std::endl;
std::cout << std::endl; std::cout << std::endl;
return false;
} }
return true;
} }
void checkProfileRoots(ref<Store> store) bool checkProfileRoots(ref<Store> store)
{ {
PathSet dirs; PathSet dirs;
@ -86,10 +94,13 @@ struct CmdDoctor : StoreCommand
for (auto & dir : dirs) for (auto & dir : dirs)
std::cout << " " << dir << std::endl; std::cout << " " << dir << std::endl;
std::cout << 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) unsigned int clientProto = GET_PROTOCOL_MAJOR(SERVE_PROTOCOL_VERSION) == GET_PROTOCOL_MAJOR(storeProto)
? SERVE_PROTOCOL_VERSION ? SERVE_PROTOCOL_VERSION
@ -103,7 +114,10 @@ struct CmdDoctor : StoreCommand
std::cout << "Client protocol: " << formatProtocol(clientProto) << std::endl; std::cout << "Client protocol: " << formatProtocol(clientProto) << std::endl;
std::cout << "Store protocol: " << formatProtocol(storeProto) << std::endl; std::cout << "Store protocol: " << formatProtocol(storeProto) << std::endl;
std::cout << std::endl; std::cout << std::endl;
return false;
} }
return true;
} }
}; };