diff --git a/Library/Homebrew/cmd/upgrade.rb b/Library/Homebrew/cmd/upgrade.rb index a68830a94b..7682922b41 100644 --- a/Library/Homebrew/cmd/upgrade.rb +++ b/Library/Homebrew/cmd/upgrade.rb @@ -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 diff --git a/Library/Homebrew/exceptions.rb b/Library/Homebrew/exceptions.rb index 66123d9f0d..926407be79 100644 --- a/Library/Homebrew/exceptions.rb +++ b/Library/Homebrew/exceptions.rb @@ -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 diff --git a/Library/Homebrew/resource.rb b/Library/Homebrew/resource.rb index 490c5dfb4c..e0daf4a489 100644 --- a/Library/Homebrew/resource.rb +++ b/Library/Homebrew/resource.rb @@ -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