diff options
author | Shea Levy <shea@shealevy.com> | 2016-09-02T18·24-0400 |
---|---|---|
committer | Shea Levy <shea@shealevy.com> | 2016-09-02T18·24-0400 |
commit | a705e8ce0a8aaf3afe885892834468e95c197a16 (patch) | |
tree | 69703f6498c8e5047f90f1dcc26cdb3ae45c6e29 /src/libstore/binary-cache-store.cc | |
parent | 0f3963329018d9cf930e2a0e2b0ec2f4e26b40b3 (diff) |
Factor a general remote FS accessor out of BinaryCacheStore
Diffstat (limited to 'src/libstore/binary-cache-store.cc')
-rw-r--r-- | src/libstore/binary-cache-store.cc | 66 |
1 files changed, 2 insertions, 64 deletions
diff --git a/src/libstore/binary-cache-store.cc b/src/libstore/binary-cache-store.cc index e71ea6a57a34..ab80e4032f04 100644 --- a/src/libstore/binary-cache-store.cc +++ b/src/libstore/binary-cache-store.cc @@ -6,8 +6,7 @@ #include "globals.hh" #include "nar-info.hh" #include "sync.hh" -#include "worker-protocol.hh" -#include "nar-accessor.hh" +#include "remote-fs-accessor.hh" #include "nar-info-disk-cache.hh" #include <chrono> @@ -232,70 +231,9 @@ Path BinaryCacheStore::addTextToStore(const string & name, const string & s, return info.path; } -/* Given requests for a path /nix/store/<x>/<y>, this accessor will - first download the NAR for /nix/store/<x> from the binary cache, - build a NAR accessor for that NAR, and use that to access <y>. */ -struct BinaryCacheStoreAccessor : public FSAccessor -{ - ref<BinaryCacheStore> store; - - std::map<Path, ref<FSAccessor>> nars; - - BinaryCacheStoreAccessor(ref<BinaryCacheStore> store) - : store(store) - { - } - - std::pair<ref<FSAccessor>, Path> fetch(const Path & path_) - { - auto path = canonPath(path_); - - auto storePath = store->toStorePath(path); - std::string restPath = std::string(path, storePath.size()); - - if (!store->isValidPath(storePath)) - throw InvalidPath(format("path ‘%1%’ is not a valid store path") % storePath); - - auto i = nars.find(storePath); - if (i != nars.end()) return {i->second, restPath}; - - StringSink sink; - store->narFromPath(storePath, sink); - - auto accessor = makeNarAccessor(sink.s); - nars.emplace(storePath, accessor); - return {accessor, restPath}; - } - - Stat stat(const Path & path) override - { - auto res = fetch(path); - return res.first->stat(res.second); - } - - StringSet readDirectory(const Path & path) override - { - auto res = fetch(path); - return res.first->readDirectory(res.second); - } - - std::string readFile(const Path & path) override - { - auto res = fetch(path); - return res.first->readFile(res.second); - } - - std::string readLink(const Path & path) override - { - auto res = fetch(path); - return res.first->readLink(res.second); - } -}; - ref<FSAccessor> BinaryCacheStore::getFSAccessor() { - return make_ref<BinaryCacheStoreAccessor>(ref<BinaryCacheStore>( - std::dynamic_pointer_cast<BinaryCacheStore>(shared_from_this()))); + return make_ref<RemoteFSAccessor>(ref<Store>(shared_from_this())); } } |