aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/http-binary-cache-store.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore/http-binary-cache-store.cc')
-rw-r--r--src/libstore/http-binary-cache-store.cc22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/libstore/http-binary-cache-store.cc b/src/libstore/http-binary-cache-store.cc
index b8d670417..6fdae40e3 100644
--- a/src/libstore/http-binary-cache-store.cc
+++ b/src/libstore/http-binary-cache-store.cc
@@ -77,11 +77,29 @@ protected:
}
}
- void getFile(const std::string & path,
- Callback<std::shared_ptr<std::string>> callback) override
+ DownloadRequest makeRequest(const std::string & path)
{
DownloadRequest request(cacheUri + "/" + path);
request.tries = 8;
+ return request;
+ }
+
+ void getFile(const std::string & path, Sink & sink) override
+ {
+ auto request(makeRequest(path));
+ try {
+ getDownloader()->download(std::move(request), sink);
+ } catch (DownloadError & e) {
+ if (e.error == Downloader::NotFound || e.error == Downloader::Forbidden)
+ throw NoSuchBinaryCacheFile("file '%s' does not exist in binary cache '%s'", path, getUri());
+ throw;
+ }
+ }
+
+ void getFile(const std::string & path,
+ Callback<std::shared_ptr<std::string>> callback) override
+ {
+ auto request(makeRequest(path));
getDownloader()->enqueueDownload(request,
{[callback](std::future<DownloadResult> result) {