about summary refs log tree commit diff
path: root/src/libstore
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2017-10-17T19·39+0200
committerEelco Dolstra <edolstra@gmail.com>2017-10-17T19·39+0200
commitb24b8ef77c63727b9d6494fe25cfce45d57581be (patch)
tree465fd499ec54aa0cb26ec5039d14241a3c1783f8 /src/libstore
parentca580bec35ea4d1984e36864158d7be99cfcb34b (diff)
BinaryCacheStore::addToStore(): Add NARs to the local cache
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/binary-cache-store.cc8
-rw-r--r--src/libstore/remote-fs-accessor.cc24
-rw-r--r--src/libstore/remote-fs-accessor.hh4
3 files changed, 26 insertions, 10 deletions
diff --git a/src/libstore/binary-cache-store.cc b/src/libstore/binary-cache-store.cc
index f1179f1890a0..67607ab3d43a 100644
--- a/src/libstore/binary-cache-store.cc
+++ b/src/libstore/binary-cache-store.cc
@@ -114,8 +114,10 @@ void BinaryCacheStore::addToStore(const ValidPathInfo & info, const ref<std::str
 
             auto narAccessor = makeNarAccessor(nar);
 
-            if (accessor_)
+            if (accessor_) {
                 accessor_->nars.emplace(info.path, narAccessor);
+                accessor_->addToCache(info.path, *nar);
+            }
 
             std::function<void(const Path &, JSONPlaceholder &)> recurse;
 
@@ -160,8 +162,10 @@ void BinaryCacheStore::addToStore(const ValidPathInfo & info, const ref<std::str
     }
 
     else {
-        if (accessor_)
+        if (accessor_) {
             accessor_->nars.emplace(info.path, makeNarAccessor(nar));
+            accessor_->addToCache(info.path, *nar);
+        }
     }
 
     /* Compress the NAR. */
diff --git a/src/libstore/remote-fs-accessor.cc b/src/libstore/remote-fs-accessor.cc
index da4e30b22633..93969120462f 100644
--- a/src/libstore/remote-fs-accessor.cc
+++ b/src/libstore/remote-fs-accessor.cc
@@ -11,6 +11,19 @@ RemoteFSAccessor::RemoteFSAccessor(ref<Store> store, const Path & cacheDir)
         createDirs(cacheDir);
 }
 
+Path RemoteFSAccessor::makeCacheFile(const Path & storePath)
+{
+    assert(cacheDir != "");
+    return fmt("%s/%s.nar", cacheDir, storePathToHash(storePath));
+}
+
+void RemoteFSAccessor::addToCache(const Path & storePath, const std::string & nar)
+{
+    if (cacheDir != "")
+        /* FIXME: do this asynchronously. */
+        writeFile(makeCacheFile(storePath), nar);
+}
+
 std::pair<ref<FSAccessor>, Path> RemoteFSAccessor::fetch(const Path & path_)
 {
     auto path = canonPath(path_);
@@ -26,19 +39,14 @@ std::pair<ref<FSAccessor>, Path> RemoteFSAccessor::fetch(const Path & path_)
 
     StringSink sink;
 
-    Path cacheFile = cacheDir != "" ? fmt("%s/%s.nar", cacheDir, storePathToHash(storePath)) : "";
-
     try {
-        if (cacheFile != "")
-            *sink.s = nix::readFile(cacheFile);
+        if (cacheDir != "")
+            *sink.s = nix::readFile(makeCacheFile(storePath));
     } catch (SysError &) { }
 
     if (sink.s->empty()) {
         store->narFromPath(storePath, sink);
-
-        if (cacheFile != "")
-            /* FIXME: do this asynchronously. */
-            writeFile(cacheFile, *sink.s);
+        addToCache(storePath, *sink.s);
     }
 
     auto accessor = makeNarAccessor(sink.s);
diff --git a/src/libstore/remote-fs-accessor.hh b/src/libstore/remote-fs-accessor.hh
index d359ecc9c871..2a3fc01eff58 100644
--- a/src/libstore/remote-fs-accessor.hh
+++ b/src/libstore/remote-fs-accessor.hh
@@ -18,6 +18,10 @@ class RemoteFSAccessor : public FSAccessor
 
     friend class BinaryCacheStore;
 
+    Path makeCacheFile(const Path & storePath);
+
+    void addToCache(const Path & storePath, const std::string & nar);
+
 public:
 
     RemoteFSAccessor(ref<Store> store,