1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-07-06 21:41:48 +02:00

Merge branch 'nix-channel-c++'

This commit is contained in:
Shea Levy 2016-08-31 09:49:24 -04:00
commit 572aba284a
8 changed files with 304 additions and 233 deletions

View file

@ -32,7 +32,7 @@ struct CurlDownloader : public Downloader
{
CURL * curl;
ref<std::string> data;
string etag, status, expectedETag;
string etag, status, expectedETag, effectiveUrl;
struct curl_slist * requestHeaders;
@ -208,6 +208,11 @@ struct CurlDownloader : public Downloader
% url % curl_easy_strerror(res) % res);
}
char *effectiveUrlCStr;
curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &effectiveUrlCStr);
if (effectiveUrlCStr)
effectiveUrl = effectiveUrlCStr;
if (httpStatus == 304) return false;
return true;
@ -225,6 +230,7 @@ struct CurlDownloader : public Downloader
res.data = data;
} else
res.cached = true;
res.effectiveUrl = effectiveUrl;
res.etag = etag;
return res;
} catch (DownloadError & e) {
@ -244,6 +250,12 @@ ref<Downloader> makeDownloader()
}
Path Downloader::downloadCached(ref<Store> store, const string & url_, bool unpack, string name, const Hash & expectedHash)
{
string ignored;
return downloadCached(store, url_, unpack, ignored, expectedHash);
}
Path Downloader::downloadCached(ref<Store> store, const string & url_, bool unpack, string & effectiveUrl, const Hash & expectedHash)
{
auto url = resolveUri(url_);
@ -281,9 +293,10 @@ Path Downloader::downloadCached(ref<Store> store, const string & url_, bool unpa
auto ss = tokenizeString<vector<string>>(readFile(dataFile), "\n");
if (ss.size() >= 3 && ss[0] == url) {
time_t lastChecked;
if (string2Int(ss[2], lastChecked) && lastChecked + ttl >= time(0))
if (string2Int(ss[2], lastChecked) && lastChecked + ttl >= time(0)) {
skip = true;
else if (!ss[1].empty()) {
effectiveUrl = url_;
} else if (!ss[1].empty()) {
printMsg(lvlDebug, format("verifying previous ETag %1%") % ss[1]);
expectedETag = ss[1];
}
@ -298,6 +311,7 @@ Path Downloader::downloadCached(ref<Store> store, const string & url_, bool unpa
DownloadOptions options;
options.expectedETag = expectedETag;
auto res = download(url, options);
effectiveUrl = res.effectiveUrl;
if (!res.cached) {
ValidPathInfo info;