Show progress indicator for builtin fetchurl

This commit is contained in:
Eelco Dolstra 2015-10-21 15:03:29 +02:00
parent 5db358d4d7
commit 01615b5f63
3 changed files with 7 additions and 4 deletions

View file

@ -7,14 +7,16 @@ void builtinFetchurl(const BasicDerivation & drv)
{ {
auto url = drv.env.find("url"); auto url = drv.env.find("url");
if (url == drv.env.end()) throw Error("attribute url missing"); if (url == drv.env.end()) throw Error("attribute url missing");
printMsg(lvlInfo, format("downloading %1%...") % url->second);
/* No need to do TLS verification, because we check the hash of /* No need to do TLS verification, because we check the hash of
the result anyway. */ the result anyway. */
DownloadOptions options; DownloadOptions options;
options.verifyTLS = false; options.verifyTLS = false;
auto data = downloadFile(url->second, options); // FIXME: show progress /* Show a progress indicator, even though stderr is not a tty. */
options.forceProgress = true;
auto data = downloadFile(url->second, options);
auto out = drv.env.find("out"); auto out = drv.env.find("out");
if (out == drv.env.end()) throw Error("attribute url missing"); if (out == drv.env.end()) throw Error("attribute url missing");

View file

@ -114,8 +114,6 @@ struct Curl
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progressCallback_); curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progressCallback_);
curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, (void *) &curl); curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, (void *) &curl);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0); curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0);
showProgress = isatty(STDERR_FILENO);
} }
~Curl() ~Curl()
@ -126,6 +124,8 @@ struct Curl
bool fetch(const string & url, const DownloadOptions & options) bool fetch(const string & url, const DownloadOptions & options)
{ {
showProgress = options.forceProgress || isatty(STDERR_FILENO);
curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
if (options.verifyTLS) if (options.verifyTLS)

View file

@ -9,6 +9,7 @@ struct DownloadOptions
{ {
string expectedETag; string expectedETag;
bool verifyTLS{true}; bool verifyTLS{true};
bool forceProgress{false};
}; };
struct DownloadResult struct DownloadResult