aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/download.hh
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2016-02-29 18:15:20 +0100
committerEelco Dolstra <eelco.dolstra@logicblox.com>2016-02-29 18:15:20 +0100
commite9c50064b59de6e9b4167f578c15b0cc04a7d33e (patch)
tree9a98ec383dc6659115f01feed685e63d2e1f7e91 /src/libstore/download.hh
parent6170bb474bd7a038e03f212b12e403fad90c5403 (diff)
Add an HTTP binary cache store
Allowing stuff like NIX_REMOTE=https://cache.nixos.org nix-store -qR /nix/store/x1p1gl3a4kkz5ci0nfbayjqlqmczp1kq-geeqie-1.1 or NIX_REMOTE=https://cache.nixos.org nix-store --export /nix/store/x1p1gl3a4kkz5ci0nfbayjqlqmczp1kq-geeqie-1.1 | nix-store --import
Diffstat (limited to 'src/libstore/download.hh')
-rw-r--r--src/libstore/download.hh23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/libstore/download.hh b/src/libstore/download.hh
index 7aec8de73..5dd2d2c82 100644
--- a/src/libstore/download.hh
+++ b/src/libstore/download.hh
@@ -10,7 +10,8 @@ struct DownloadOptions
{
string expectedETag;
bool verifyTLS{true};
- bool forceProgress{false};
+ enum { yes, no, automatic } showProgress{yes};
+ bool head{false};
};
struct DownloadResult
@@ -21,11 +22,25 @@ struct DownloadResult
class Store;
-DownloadResult downloadFile(string url, const DownloadOptions & options);
+struct Downloader
+{
+ virtual DownloadResult download(string url, const DownloadOptions & options) = 0;
+
+ Path downloadCached(ref<Store> store, const string & url, bool unpack);
+
+ enum Error { NotFound, Forbidden, Misc };
+};
-Path downloadFileCached(ref<Store> store, const string & url, bool unpack);
+ref<Downloader> makeDownloader();
-MakeError(DownloadError, Error)
+class DownloadError : public Error
+{
+public:
+ Downloader::Error error;
+ DownloadError(Downloader::Error error, const FormatOrString & fs)
+ : Error(fs), error(error)
+ { }
+};
bool isUri(const string & s);