diff options
| -rw-r--r-- | Library/Homebrew/cmd/upgrade.rb | 2 | ||||
| -rw-r--r-- | Library/Homebrew/exceptions.rb | 7 | ||||
| -rw-r--r-- | Library/Homebrew/resource.rb | 12 | 
3 files changed, 17 insertions, 4 deletions
| diff --git a/Library/Homebrew/cmd/upgrade.rb b/Library/Homebrew/cmd/upgrade.rb index a68830a94..7682922b4 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 66123d9f0..926407be7 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 490c5dfb4..e0daf4a48 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 | 
