Skip to content
Snippets Groups Projects
Commit e2e578fd authored by Markus Reiter's avatar Markus Reiter Committed by GitHub
Browse files

Merge pull request #2729 from reitermarkus/cask-require-sha

Fix parsing `--require-sha` and `HOMEBREW_CASK_OPTS`.
parents 1627df99 b40e4afa
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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
......
......@@ -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
......
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)
......
......@@ -27,6 +27,7 @@ module Hbc
# TODO: speed up Hbc::Source::Tapped (main perf drag is calling Hbc.all_tokens repeatedly)
# TODO: ability to specify expected source when calling CaskLoader.load (minor perf benefit)
Pathname.glob(caskroom.join("*"))
.sort
.map do |caskroom_path|
token = caskroom_path.basename.to_s
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment