Retry downloads if a server doesn't support byte ranges

If an incomplete download exists, and the HTTP server doesn't support
byte ranges, delete the incomplete download and retry once.

Tested with freeling, whose server does not support byte ranges.

Closes Homebrew/homebrew#19757.
This commit is contained in:
Adam Vandenberg 2013-05-12 13:42:37 -07:00
parent 46f8be1d9e
commit 13c604035b

View File

@ -69,10 +69,20 @@ class CurlDownloadStrategy < AbstractDownloadStrategy
ohai "Downloading #{@url}"
unless @tarball_path.exist?
had_incomplete_download = @temporary_path.exist?
begin
_fetch
rescue ErrorDuringExecution
raise CurlDownloadStrategyError, "Download failed: #{@url}"
# 33 == range not supported
# try wiping the incomplete download and retrying once
if $?.exitstatus == 33 && had_incomplete_download
ohai "Trying a full download"
@temporary_path.unlink
had_incomplete_download = false
retry
else
raise CurlDownloadStrategyError, "Download failed: #{@url}"
end
end
ignore_interrupts { @temporary_path.rename(@tarball_path) }
else