exceptions: add reason to 'UsageError' exception

Use the `reason` attribute to be able to handle `UsageError` subclasses
more uniformly and simplify logic in `brew.rb` to handle them together.
This commit is contained in:
Martin Afanasjew 2016-04-19 08:11:17 +02:00
parent cf3486f98a
commit d9363a1559
2 changed files with 27 additions and 9 deletions

View File

@ -1,6 +1,28 @@
class UsageError < RuntimeError; end class UsageError < RuntimeError
class FormulaUnspecifiedError < UsageError; end attr_reader :reason
class KegUnspecifiedError < UsageError; end
def initialize(reason = nil)
@reason = reason
end
def to_s
s = "Invalid usage"
s += ": #{reason}" if reason
s
end
end
class FormulaUnspecifiedError < UsageError
def initialize
super "This command requires a formula argument"
end
end
class KegUnspecifiedError < UsageError
def initialize
super "This command requires a keg argument"
end
end
class MultipleVersionsInstalledError < RuntimeError class MultipleVersionsInstalledError < RuntimeError
attr_reader :name attr_reader :name

View File

@ -113,13 +113,9 @@ begin
end end
end end
rescue FormulaUnspecifiedError rescue UsageError => e
abort "This command requires a formula argument"
rescue KegUnspecifiedError
abort "This command requires a keg argument"
rescue UsageError
require "cmd/help" require "cmd/help"
Homebrew.help cmd, :usage_error => "Invalid usage" Homebrew.help cmd, :usage_error => e.message
rescue SystemExit => e rescue SystemExit => e
onoe "Kernel.exit" if ARGV.verbose? && !e.success? onoe "Kernel.exit" if ARGV.verbose? && !e.success?
$stderr.puts e.backtrace if ARGV.debug? $stderr.puts e.backtrace if ARGV.debug?