From dd4b56c87f8989c2d31a78b6c12cc2b1e3991fe2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Domen=20Ko=C5=BEar?= Date: Tue, 1 Sep 2020 16:41:42 +0200 Subject: [PATCH 1/2] Allow HTTP binary cache to request absolute uris --- src/libstore/http-binary-cache-store.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/libstore/http-binary-cache-store.cc b/src/libstore/http-binary-cache-store.cc index c1ceb08cf..1733239fb 100644 --- a/src/libstore/http-binary-cache-store.cc +++ b/src/libstore/http-binary-cache-store.cc @@ -85,7 +85,7 @@ protected: checkEnabled(); try { - FileTransferRequest request(cacheUri + "/" + path); + FileTransferRequest request(makeRequest(path)); request.head = true; getFileTransfer()->download(request); return true; @@ -103,7 +103,7 @@ protected: std::shared_ptr> istream, const std::string & mimeType) override { - auto req = FileTransferRequest(cacheUri + "/" + path); + auto req = makeRequest(path); req.data = std::make_shared(StreamToSourceAdapter(istream).drain()); req.mimeType = mimeType; try { @@ -115,8 +115,11 @@ protected: FileTransferRequest makeRequest(const std::string & path) { - FileTransferRequest request(cacheUri + "/" + path); - return request; + return FileTransferRequest( + hasPrefix(path, "https://") || hasPrefix(path, "http://") || hasPrefix(path, "file://") + ? path + : cacheUri + "/" + path); + } void getFile(const std::string & path, Sink & sink) override From 94a043ff3b0e9de92bdb62372f9a82186d8e871c Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 2 Sep 2020 14:16:44 +0200 Subject: [PATCH 2/2] EvalCache: Fix caching of strings This was broken in 50f13b06fb1b2f50a97323c000d1094d090f08ea. Once again it turns out that putting a bool in a std::variant is a bad idea, since pointers get silently cast to them... --- src/libexpr/eval-cache.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libexpr/eval-cache.cc b/src/libexpr/eval-cache.cc index 46177a0a4..381344b40 100644 --- a/src/libexpr/eval-cache.cc +++ b/src/libexpr/eval-cache.cc @@ -391,7 +391,8 @@ Value & AttrCursor::forceValue() if (root->db && (!cachedValue || std::get_if(&cachedValue->second))) { if (v.type == tString) - cachedValue = {root->db->setString(getKey(), v.string.s, v.string.context), v.string.s}; + cachedValue = {root->db->setString(getKey(), v.string.s, v.string.context), + string_t{v.string.s, {}}}; else if (v.type == tPath) cachedValue = {root->db->setString(getKey(), v.path), v.path}; else if (v.type == tBool)