nix doctor: add warning for multiple versions

It's pretty easy to unintentionally install a second version of nix
into the user profile when using a daemon install.  In this case it
looks like nix was upgraded while the nix-daemon is probably still
unning an older version.
This commit is contained in:
Daiderd Jordan 2018-09-02 01:01:23 +02:00
parent 246acf93f2
commit 0f18dc5479
No known key found for this signature in database
GPG key ID: D02435D05B810C96

View file

@ -33,9 +33,26 @@ struct CmdDoctor : StoreCommand
std::cout << "Store uri: " << store->getUri() << std::endl; std::cout << "Store uri: " << store->getUri() << std::endl;
std::cout << std::endl; std::cout << std::endl;
checkNixInPath();
checkStoreProtocol(store->getProtocol()); checkStoreProtocol(store->getProtocol());
} }
void checkNixInPath() {
PathSet dirs;
for (auto & dir : tokenizeString<Strings>(getEnv("PATH"), ":"))
if (pathExists(dir + "/nix-env"))
dirs.insert(dirOf(canonPath(dir + "/nix-env", true)));
if (dirs.size() != 1) {
std::cout << "Warning: multiple versions of nix found in PATH." << std::endl;
std::cout << std::endl;
for (auto & dir : dirs)
std::cout << " " << dir << std::endl;
std::cout << std::endl;
}
}
void checkStoreProtocol(unsigned int storeProto) { void checkStoreProtocol(unsigned int storeProto) {
auto clientProto = GET_PROTOCOL_MAJOR(SERVE_PROTOCOL_VERSION) == GET_PROTOCOL_MAJOR(storeProto) auto clientProto = GET_PROTOCOL_MAJOR(SERVE_PROTOCOL_VERSION) == GET_PROTOCOL_MAJOR(storeProto)
? SERVE_PROTOCOL_VERSION ? SERVE_PROTOCOL_VERSION