Add DownloadError to catch a broader range of resource download errors.

Adding a broader exception class allows for errors raised in Resource.fetch
to be caught in upgrade and prevent the process from being killed when
a download fails. This should resolve issue 18364.

Fixes Homebrew/homebrew#18364.
Closes Homebrew/homebrew#26618.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
This commit is contained in:
Drew Rodman 2014-02-18 15:08:03 -05:00 committed by Jack Nagel
parent ca0eff67fa
commit d63ef14794
3 changed files with 17 additions and 4 deletions

View File

@ -92,6 +92,8 @@ module Homebrew extend self
e.dump
puts
Homebrew.failed = true
rescue DownloadError => e
ofail e
ensure
# restore previous installation state if build failed
outdated_keg.link if outdated_keg and not f.installed? rescue nil

View File

@ -229,6 +229,13 @@ class CompilerSelectionError < Homebrew::InstallationError
end
end
# Raised in Resource.fetch
class DownloadError < RuntimeError
def initialize(formula)
super "Failed to download resource for package: #{formula}"
end
end
# raised in CurlDownloadStrategy.fetch
class CurlDownloadStrategyError < RuntimeError; end

View File

@ -76,10 +76,14 @@ class Resource
# For brew-fetch and others.
def fetch
# Ensure the cache exists
HOMEBREW_CACHE.mkpath
downloader.fetch
cached_download
begin
# Ensure the cache exists
HOMEBREW_CACHE.mkpath
downloader.fetch
cached_download
rescue ErrorDuringExecution, CurlDownloadStrategyError => e
raise DownloadError.new(downloader.name)
end
end
def verify_download_integrity fn