aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/local-binary-cache-store.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore/local-binary-cache-store.cc')
-rw-r--r--src/libstore/local-binary-cache-store.cc60
1 files changed, 38 insertions, 22 deletions
diff --git a/src/libstore/local-binary-cache-store.cc b/src/libstore/local-binary-cache-store.cc
index efd6d4725..2c2944938 100644
--- a/src/libstore/local-binary-cache-store.cc
+++ b/src/libstore/local-binary-cache-store.cc
@@ -12,26 +12,42 @@ private:
public:
LocalBinaryCacheStore(std::shared_ptr<Store> localStore,
- const Path & secretKeyFile, const Path & binaryCacheDir);
+ const StoreParams & params, const Path & binaryCacheDir)
+ : BinaryCacheStore(localStore, params)
+ , binaryCacheDir(binaryCacheDir)
+ {
+ }
void init() override;
+ std::string getUri() override
+ {
+ return "file://" + binaryCacheDir;
+ }
+
protected:
bool fileExists(const std::string & path) override;
void upsertFile(const std::string & path, const std::string & data) override;
- std::string getFile(const std::string & path) override;
+ std::shared_ptr<std::string> getFile(const std::string & path) override;
-};
+ PathSet queryAllValidPaths() override
+ {
+ PathSet paths;
-LocalBinaryCacheStore::LocalBinaryCacheStore(std::shared_ptr<Store> localStore,
- const Path & secretKeyFile, const Path & binaryCacheDir)
- : BinaryCacheStore(localStore, secretKeyFile)
- , binaryCacheDir(binaryCacheDir)
-{
-}
+ for (auto & entry : readDirectory(binaryCacheDir)) {
+ if (entry.name.size() != 40 ||
+ !hasSuffix(entry.name, ".narinfo"))
+ continue;
+ paths.insert(settings.nixStore + "/" + entry.name.substr(0, entry.name.size() - 8));
+ }
+
+ return paths;
+ }
+
+};
void LocalBinaryCacheStore::init()
{
@@ -59,25 +75,25 @@ void LocalBinaryCacheStore::upsertFile(const std::string & path, const std::stri
atomicWrite(binaryCacheDir + "/" + path, data);
}
-std::string LocalBinaryCacheStore::getFile(const std::string & path)
+std::shared_ptr<std::string> LocalBinaryCacheStore::getFile(const std::string & path)
{
- return readFile(binaryCacheDir + "/" + path);
+ try {
+ return std::make_shared<std::string>(readFile(binaryCacheDir + "/" + path));
+ } catch (SysError & e) {
+ if (e.errNo == ENOENT) return 0;
+ throw;
+ }
}
-ref<Store> openLocalBinaryCacheStore(std::shared_ptr<Store> localStore,
- const Path & secretKeyFile, const Path & binaryCacheDir)
+static RegisterStoreImplementation regStore([](
+ const std::string & uri, const StoreParams & params)
+ -> std::shared_ptr<Store>
{
- auto store = make_ref<LocalBinaryCacheStore>(
- localStore, secretKeyFile, binaryCacheDir);
+ if (std::string(uri, 0, 7) != "file://") return 0;
+ auto store = std::make_shared<LocalBinaryCacheStore>(
+ std::shared_ptr<Store>(0), params, std::string(uri, 7));
store->init();
return store;
-}
-
-static RegisterStoreImplementation regStore([](const std::string & uri) -> std::shared_ptr<Store> {
- if (std::string(uri, 0, 7) != "file://") return 0;
- return openLocalBinaryCacheStore(std::shared_ptr<Store>(0),
- settings.get("binary-cache-secret-key-file", string("")),
- std::string(uri, 7));
});
}