diff options
| author | Markus Reiter | 2017-06-03 01:29:29 +0200 |
|---|---|---|
| committer | Markus Reiter | 2017-06-06 16:40:03 +0200 |
| commit | b40e4afac539cc375597d5ddd0530b8a4b652382 (patch) | |
| tree | a3708b155066106f2bd9d6c6f90b86d75b3aea5f /Library/Homebrew/cask/lib/hbc/cli.rb | |
| parent | 2fa8596302b4dadfb7a58d8529e2f4a8609c0884 (diff) | |
| download | brew-b40e4afac539cc375597d5ddd0530b8a4b652382.tar.bz2 | |
Fix parsing `--require-sha` and `HOMEBREW_CASK_OPTS`.
Diffstat (limited to 'Library/Homebrew/cask/lib/hbc/cli.rb')
| -rw-r--r-- | Library/Homebrew/cask/lib/hbc/cli.rb | 46 |
1 files changed, 34 insertions, 12 deletions
diff --git a/Library/Homebrew/cask/lib/hbc/cli.rb b/Library/Homebrew/cask/lib/hbc/cli.rb index 99980b88d..eec2788ec 100644 --- a/Library/Homebrew/cask/lib/hbc/cli.rb +++ b/Library/Homebrew/cask/lib/hbc/cli.rb @@ -92,10 +92,10 @@ module Hbc command.is_a?(Class) && !command.abstract? && command.needs_init? end - def self.run_command(command, *rest) + def self.run_command(command, *args) if command.respond_to?(:run) # usual case: built-in command verb - command.run(*rest) + command.run(*args) elsif require?(which("brewcask-#{command}.rb")) # external command as Ruby library on PATH, Homebrew-style elsif command.to_s.include?("/") && require?(command.to_s) @@ -111,7 +111,7 @@ module Hbc if klass.respond_to?(:run) # invoke "run" on a Ruby library which follows our coding conventions # other Ruby libraries must do everything via "require" - klass.run(*rest) + klass.run(*args) end elsif which("brewcask-#{command}") # arbitrary external executable on PATH, Homebrew-style @@ -124,7 +124,7 @@ module Hbc exec command, *ARGV[1..-1] else # failure - NullCommand.new(command).run + NullCommand.new(command, *args).run end end @@ -136,9 +136,30 @@ module Hbc @args = process_options(*args) end + def detect_command_and_arguments(*args) + command = args.detect do |arg| + if self.class.commands.include?(arg) + true + else + break unless arg.start_with?("-") + end + end + + if index = args.index(command) + args.delete_at(index) + end + + [*command, *args] + end + def run - command_name, *args = *@args - command = help? ? "help" : self.class.lookup_command(command_name) + command_name, *args = detect_command_and_arguments(*@args) + command = if help? + args.unshift(command_name) + "help" + else + self.class.lookup_command(command_name) + end MacOS.full_version = ENV["MACOS_VERSION"] unless ENV["MACOS_VERSION"].nil? @@ -147,7 +168,7 @@ module Hbc self.class.run_command(command, *args) rescue CaskError, CaskSha256MismatchError, ArgumentError, OptionParser::InvalidOption => e msg = e.message - msg << e.backtrace.join("\n") if ARGV.debug? + msg << e.backtrace.join("\n").prepend("\n") if ARGV.debug? onoe msg exit 1 rescue StandardError, ScriptError, NoMemoryError => e @@ -199,18 +220,19 @@ module Hbc end class NullCommand - def initialize(attempted_verb) - @attempted_verb = attempted_verb + def initialize(command, *args) + @command = command + @args = args end def run(*_args) purpose usage - return if @attempted_verb.to_s.strip.empty? - return if @attempted_verb == "help" + return if @command == "help" && @args.empty? - raise ArgumentError, "Unknown command: #{@attempted_verb}" + unknown_command = @args.empty? ? @command : @args.first + raise ArgumentError, "Unknown command: #{unknown_command}" end def purpose |
