From a12bfd531b526e192e9bd44bc7cf840c2b85bd34 Mon Sep 17 00:00:00 2001 From: Adam Vandenberg Date: Sun, 12 May 2013 13:42:37 -0700 Subject: 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 #19757. --- Library/Homebrew/download_strategy.rb | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'Library') diff --git a/Library/Homebrew/download_strategy.rb b/Library/Homebrew/download_strategy.rb index d1564f977..67261af2a 100644 --- a/Library/Homebrew/download_strategy.rb +++ b/Library/Homebrew/download_strategy.rb @@ -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 -- cgit v1.2.3