about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/nix/doctor.cc26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/nix/doctor.cc b/src/nix/doctor.cc
index 1ce3efcb0415..7b5444619470 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;
     }
 };