about summary refs log tree commit diff
path: root/src/libstore/remote-store.cc
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2007-09-18T09·11+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2007-09-18T09·11+0000
commitf3441e6122c3ce8f81576bfe79897a638c8f82e2 (patch)
tree59351c47a2090ab04dda61c24059e8b4c7f8497f /src/libstore/remote-store.cc
parent26f981c2e52bb8dc91311f9a4ca53f7e37233e5c (diff)
* Pass various options to the worker so that flags like -K or -j work
  in multi-user Nix (NIX-72).
* Client/worker: exchange a protocol version number for future
  compatibility.

Diffstat (limited to 'src/libstore/remote-store.cc')
-rw-r--r--src/libstore/remote-store.cc23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc
index c5d13bf494..4d866071b1 100644
--- a/src/libstore/remote-store.cc
+++ b/src/libstore/remote-store.cc
@@ -53,18 +53,24 @@ RemoteStore::RemoteStore()
     from.fd = fdSocket;
     to.fd = fdSocket;
 
-    
     /* Send the magic greeting, check for the reply. */
     try {
         writeInt(WORKER_MAGIC_1, to);
-        writeInt(verbosity, to);
         unsigned int magic = readInt(from);
         if (magic != WORKER_MAGIC_2) throw Error("protocol mismatch");
+
+        unsigned int daemonVersion = readInt(from);
+        if (GET_PROTOCOL_MAJOR(daemonVersion) != GET_PROTOCOL_MAJOR(PROTOCOL_VERSION))
+            throw Error("Nix daemon protocol version not supported");
+        writeInt(PROTOCOL_VERSION, to);
         processStderr();
+
     } catch (Error & e) {
         throw Error(format("cannot start worker (%1%)")
             % e.msg());
     }
+
+    setOptions();
 }
 
 
@@ -154,6 +160,19 @@ RemoteStore::~RemoteStore()
 }
 
 
+void RemoteStore::setOptions()
+{
+    writeInt(wopSetOptions, to);
+    writeInt(keepFailed, to);
+    writeInt(keepGoing, to);
+    writeInt(tryFallback, to);
+    writeInt(verbosity, to);
+    writeInt(maxBuildJobs, to);
+    writeInt(maxSilentTime, to);
+    processStderr();
+}
+
+
 bool RemoteStore::isValidPath(const Path & path)
 {
     writeInt(wopIsValidPath, to);