about summary refs log tree commit diff
path: root/src/libstore/binary-cache-store.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore/binary-cache-store.cc')
-rw-r--r--src/libstore/binary-cache-store.cc21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/libstore/binary-cache-store.cc b/src/libstore/binary-cache-store.cc
index 642da9f0477e..58cb87a516b9 100644
--- a/src/libstore/binary-cache-store.cc
+++ b/src/libstore/binary-cache-store.cc
@@ -29,8 +29,27 @@ BinaryCacheStore::BinaryCacheStore(const StoreParams & params)
 void BinaryCacheStore::init()
 {
     std::string cacheInfoFile = "nix-cache-info";
-    if (!fileExists(cacheInfoFile))
+
+    auto cacheInfo = getFile(cacheInfoFile);
+    if (!cacheInfo) {
         upsertFile(cacheInfoFile, "StoreDir: " + settings.nixStore + "\n");
+    } else {
+        for (auto & line : tokenizeString<Strings>(*cacheInfo, "\n")) {
+            size_t colon = line.find(':');
+            if (colon == std::string::npos) continue;
+            auto name = line.substr(0, colon);
+            auto value = trim(line.substr(colon + 1, std::string::npos));
+            if (name == "StoreDir") {
+                if (value != settings.nixStore)
+                    throw Error(format("binary cache ‘%s’ is for Nix stores with prefix ‘%s’, not ‘%s’")
+                        % getUri() % value % settings.nixStore);
+            } else if (name == "WantMassQuery") {
+                wantMassQuery_ = value == "1";
+            } else if (name == "Priority") {
+                string2Int(value, priority);
+            }
+        }
+    }
 }
 
 void BinaryCacheStore::notImpl()