From 13c604035b93a7e7c4c2d9bbb719d67d6d976c17 Mon Sep 17 00:00:00 2001 From: Adam Vandenberg Date: Sun, 12 May 2013 13:42:37 -0700 Subject: [PATCH] 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. --- Library/Homebrew/download_strategy.rb | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/download_strategy.rb b/Library/Homebrew/download_strategy.rb index d1564f9778..67261af2a9 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