forked from lix-project/lix
BinaryCacheStore::addToStore(): Add NARs to the local cache
This commit is contained in:
parent
ca580bec35
commit
b24b8ef77c
3 changed files with 26 additions and 10 deletions
|
@ -114,8 +114,10 @@ void BinaryCacheStore::addToStore(const ValidPathInfo & info, const ref<std::str
|
||||||
|
|
||||||
auto narAccessor = makeNarAccessor(nar);
|
auto narAccessor = makeNarAccessor(nar);
|
||||||
|
|
||||||
if (accessor_)
|
if (accessor_) {
|
||||||
accessor_->nars.emplace(info.path, narAccessor);
|
accessor_->nars.emplace(info.path, narAccessor);
|
||||||
|
accessor_->addToCache(info.path, *nar);
|
||||||
|
}
|
||||||
|
|
||||||
std::function<void(const Path &, JSONPlaceholder &)> recurse;
|
std::function<void(const Path &, JSONPlaceholder &)> recurse;
|
||||||
|
|
||||||
|
@ -160,8 +162,10 @@ void BinaryCacheStore::addToStore(const ValidPathInfo & info, const ref<std::str
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
if (accessor_)
|
if (accessor_) {
|
||||||
accessor_->nars.emplace(info.path, makeNarAccessor(nar));
|
accessor_->nars.emplace(info.path, makeNarAccessor(nar));
|
||||||
|
accessor_->addToCache(info.path, *nar);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Compress the NAR. */
|
/* Compress the NAR. */
|
||||||
|
|
|
@ -11,6 +11,19 @@ RemoteFSAccessor::RemoteFSAccessor(ref<Store> store, const Path & cacheDir)
|
||||||
createDirs(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_)
|
std::pair<ref<FSAccessor>, Path> RemoteFSAccessor::fetch(const Path & path_)
|
||||||
{
|
{
|
||||||
auto path = canonPath(path_);
|
auto path = canonPath(path_);
|
||||||
|
@ -26,19 +39,14 @@ std::pair<ref<FSAccessor>, Path> RemoteFSAccessor::fetch(const Path & path_)
|
||||||
|
|
||||||
StringSink sink;
|
StringSink sink;
|
||||||
|
|
||||||
Path cacheFile = cacheDir != "" ? fmt("%s/%s.nar", cacheDir, storePathToHash(storePath)) : "";
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (cacheFile != "")
|
if (cacheDir != "")
|
||||||
*sink.s = nix::readFile(cacheFile);
|
*sink.s = nix::readFile(makeCacheFile(storePath));
|
||||||
} catch (SysError &) { }
|
} catch (SysError &) { }
|
||||||
|
|
||||||
if (sink.s->empty()) {
|
if (sink.s->empty()) {
|
||||||
store->narFromPath(storePath, sink);
|
store->narFromPath(storePath, sink);
|
||||||
|
addToCache(storePath, *sink.s);
|
||||||
if (cacheFile != "")
|
|
||||||
/* FIXME: do this asynchronously. */
|
|
||||||
writeFile(cacheFile, *sink.s);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
auto accessor = makeNarAccessor(sink.s);
|
auto accessor = makeNarAccessor(sink.s);
|
||||||
|
|
|
@ -18,6 +18,10 @@ class RemoteFSAccessor : public FSAccessor
|
||||||
|
|
||||||
friend class BinaryCacheStore;
|
friend class BinaryCacheStore;
|
||||||
|
|
||||||
|
Path makeCacheFile(const Path & storePath);
|
||||||
|
|
||||||
|
void addToCache(const Path & storePath, const std::string & nar);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RemoteFSAccessor(ref<Store> store,
|
RemoteFSAccessor(ref<Store> store,
|
||||||
|
|
Loading…
Reference in a new issue