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 | |
| parent | 2fa8596302b4dadfb7a58d8529e2f4a8609c0884 (diff) | |
| download | brew-b40e4afac539cc375597d5ddd0530b8a4b652382.tar.bz2 | |
Fix parsing `--require-sha` and `HOMEBREW_CASK_OPTS`.
| -rw-r--r-- | Library/Homebrew/cask/lib/hbc/cli.rb | 46 | ||||
| -rw-r--r-- | Library/Homebrew/cask/lib/hbc/cli/abstract_command.rb | 1 | ||||
| -rw-r--r-- | Library/Homebrew/cask/lib/hbc/cli/install.rb | 1 | ||||
| -rw-r--r-- | Library/Homebrew/cask/lib/hbc/cli/search.rb | 4 | ||||
| -rw-r--r-- | Library/Homebrew/test/cask/cli_spec.rb | 2 |
5 files changed, 36 insertions, 18 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 diff --git a/Library/Homebrew/cask/lib/hbc/cli/abstract_command.rb b/Library/Homebrew/cask/lib/hbc/cli/abstract_command.rb index cdb7f5ec8..c83fc3e42 100644 --- a/Library/Homebrew/cask/lib/hbc/cli/abstract_command.rb +++ b/Library/Homebrew/cask/lib/hbc/cli/abstract_command.rb @@ -9,6 +9,7 @@ module Hbc option "--debug", :debug, false option "--verbose", :verbose, false option "--outdated", :outdated_only, false + option "--require-sha", :require_sha, false def self.command_name @command_name ||= name.sub(/^.*:/, "").gsub(/(.)([A-Z])/, '\1_\2').downcase diff --git a/Library/Homebrew/cask/lib/hbc/cli/install.rb b/Library/Homebrew/cask/lib/hbc/cli/install.rb index 72f85fc69..4d0abc677 100644 --- a/Library/Homebrew/cask/lib/hbc/cli/install.rb +++ b/Library/Homebrew/cask/lib/hbc/cli/install.rb @@ -3,7 +3,6 @@ module Hbc class Install < AbstractCommand option "--force", :force, false option "--skip-cask-deps", :skip_cask_deps, false - option "--require-sha", :require_sha, false def initialize(*) super diff --git a/Library/Homebrew/cask/lib/hbc/cli/search.rb b/Library/Homebrew/cask/lib/hbc/cli/search.rb index b24091aef..9d1a16f15 100644 --- a/Library/Homebrew/cask/lib/hbc/cli/search.rb +++ b/Library/Homebrew/cask/lib/hbc/cli/search.rb @@ -1,10 +1,6 @@ module Hbc class CLI class Search < AbstractCommand - def initialize(*args) - @args = args - end - def run results = self.class.search(*args) self.class.render_results(*results) diff --git a/Library/Homebrew/test/cask/cli_spec.rb b/Library/Homebrew/test/cask/cli_spec.rb index 569b831de..caa17b031 100644 --- a/Library/Homebrew/test/cask/cli_spec.rb +++ b/Library/Homebrew/test/cask/cli_spec.rb @@ -42,7 +42,7 @@ describe Hbc::CLI, :cask do it "prints help output when subcommand receives `--help` flag" do command = Hbc::CLI.new("noop", "--help") - expect(described_class).to receive(:run_command).with("help") + expect(described_class).to receive(:run_command).with("help", "noop") command.run expect(command.help?).to eq(true) end |
