BinaryCacheStore::addToStore(): Add NARs to the local cache

This commit is contained in:
Eelco Dolstra 2017-10-17 21:39:48 +02:00
parent ca580bec35
commit b24b8ef77c
3 changed files with 26 additions and 10 deletions

View file

@ -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);