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:
commit
572aba284a
8 changed files with 304 additions and 233 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue