aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cask/lib/hbc/cli.rb
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Homebrew/cask/lib/hbc/cli.rb')
-rw-r--r--Library/Homebrew/cask/lib/hbc/cli.rb410
1 files changed, 205 insertions, 205 deletions
diff --git a/Library/Homebrew/cask/lib/hbc/cli.rb b/Library/Homebrew/cask/lib/hbc/cli.rb
index 1378176da..3f67e131d 100644
--- a/Library/Homebrew/cask/lib/hbc/cli.rb
+++ b/Library/Homebrew/cask/lib/hbc/cli.rb
@@ -1,5 +1,3 @@
-class Hbc::CLI; end
-
require "optparse"
require "shellwords"
@@ -28,248 +26,250 @@ require "hbc/cli/internal_dump"
require "hbc/cli/internal_help"
require "hbc/cli/internal_stanza"
-class Hbc::CLI
- ALIASES = {
- "ls" => "list",
- "homepage" => "home",
- "-S" => "search", # verb starting with "-" is questionable
- "up" => "update",
- "instal" => "install", # gem does the same
- "rm" => "uninstall",
- "remove" => "uninstall",
- "abv" => "info",
- "dr" => "doctor",
- # aliases from Homebrew that we don't (yet) support
- # 'ln' => 'link',
- # 'configure' => 'diy',
- # '--repo' => '--repository',
- # 'environment' => '--env',
- # '-c1' => '--config',
- }.freeze
+module Hbc
+ class CLI
+ ALIASES = {
+ "ls" => "list",
+ "homepage" => "home",
+ "-S" => "search", # verb starting with "-" is questionable
+ "up" => "update",
+ "instal" => "install", # gem does the same
+ "rm" => "uninstall",
+ "remove" => "uninstall",
+ "abv" => "info",
+ "dr" => "doctor",
+ # aliases from Homebrew that we don't (yet) support
+ # 'ln' => 'link',
+ # 'configure' => 'diy',
+ # '--repo' => '--repository',
+ # 'environment' => '--env',
+ # '-c1' => '--config',
+ }.freeze
+
+ OPTIONS = {
+ "--caskroom=" => :caskroom=,
+ "--appdir=" => :appdir=,
+ "--colorpickerdir=" => :colorpickerdir=,
+ "--prefpanedir=" => :prefpanedir=,
+ "--qlplugindir=" => :qlplugindir=,
+ "--fontdir=" => :fontdir=,
+ "--servicedir=" => :servicedir=,
+ "--input_methoddir=" => :input_methoddir=,
+ "--internet_plugindir=" => :internet_plugindir=,
+ "--audio_unit_plugindir=" => :audio_unit_plugindir=,
+ "--vst_plugindir=" => :vst_plugindir=,
+ "--vst3_plugindir=" => :vst3_plugindir=,
+ "--screen_saverdir=" => :screen_saverdir=,
+ }.freeze
- OPTIONS = {
- "--caskroom=" => :caskroom=,
- "--appdir=" => :appdir=,
- "--colorpickerdir=" => :colorpickerdir=,
- "--prefpanedir=" => :prefpanedir=,
- "--qlplugindir=" => :qlplugindir=,
- "--fontdir=" => :fontdir=,
- "--servicedir=" => :servicedir=,
- "--input_methoddir=" => :input_methoddir=,
- "--internet_plugindir=" => :internet_plugindir=,
- "--audio_unit_plugindir=" => :audio_unit_plugindir=,
- "--vst_plugindir=" => :vst_plugindir=,
- "--vst3_plugindir=" => :vst3_plugindir=,
- "--screen_saverdir=" => :screen_saverdir=,
+ FLAGS = {
+ "--no-binaries" => :no_binaries=,
+ "--debug" => :debug=,
+ "--verbose" => :verbose=,
+ "--outdated" => :cleanup_outdated=,
+ "--help" => :help=,
}.freeze
- FLAGS = {
- "--no-binaries" => :no_binaries=,
- "--debug" => :debug=,
- "--verbose" => :verbose=,
- "--outdated" => :cleanup_outdated=,
- "--help" => :help=,
- }.freeze
+ def self.command_classes
+ @command_classes ||= self.constants
+ .map(&method(:const_get))
+ .select { |sym| sym.respond_to?(:run) }
+ end
- def self.command_classes
- @command_classes ||= Hbc::CLI.constants
- .map(&Hbc::CLI.method(:const_get))
- .select { |sym| sym.respond_to?(:run) }
- end
+ def self.commands
+ @commands ||= command_classes.map(&:command_name)
+ end
- def self.commands
- @commands ||= command_classes.map(&:command_name)
- end
+ def self.lookup_command(command_string)
+ @lookup ||= Hash[commands.zip(command_classes)]
+ command_string = ALIASES.fetch(command_string, command_string)
+ @lookup.fetch(command_string, command_string)
+ end
- def self.lookup_command(command_string)
- @lookup ||= Hash[commands.zip(command_classes)]
- command_string = ALIASES.fetch(command_string, command_string)
- @lookup.fetch(command_string, command_string)
- end
+ # modified from Homebrew
+ def self.require?(path)
+ require path
+ true # OK if already loaded
+ rescue LoadError => e
+ # HACK: :( because we should raise on syntax errors
+ # but not if the file doesn't exist.
+ # TODO: make robust!
+ raise unless e.to_s.include? path
+ end
- # modified from Homebrew
- def self.require?(path)
- require path
- true # OK if already loaded
- rescue LoadError => e
- # HACK: :( because we should raise on syntax errors
- # but not if the file doesn't exist.
- # TODO: make robust!
- raise unless e.to_s.include? path
- end
+ def self.should_init?(command)
+ (command.is_a? Class) && (command < CLI::Base) && command.needs_init?
+ end
- def self.should_init?(command)
- (command.is_a? Class) && (command < Hbc::CLI::Base) && command.needs_init?
- end
+ def self.run_command(command, *rest)
+ if command.respond_to?(:run)
+ # usual case: built-in command verb
+ command.run(*rest)
+ elsif require? Utils.which("brewcask-#{command}.rb").to_s
+ # external command as Ruby library on PATH, Homebrew-style
+ elsif command.to_s.include?("/") && require?(command.to_s)
+ # external command as Ruby library with literal path, useful
+ # for development and troubleshooting
+ sym = Pathname.new(command.to_s).basename(".rb").to_s.capitalize
+ klass = begin
+ self.const_get(sym)
+ rescue NameError
+ nil
+ end
- def self.run_command(command, *rest)
- if command.respond_to?(:run)
- # usual case: built-in command verb
- command.run(*rest)
- elsif require? Hbc::Utils.which("brewcask-#{command}.rb").to_s
- # external command as Ruby library on PATH, Homebrew-style
- elsif command.to_s.include?("/") && require?(command.to_s)
- # external command as Ruby library with literal path, useful
- # for development and troubleshooting
- sym = Pathname.new(command.to_s).basename(".rb").to_s.capitalize
- klass = begin
- Hbc::CLI.const_get(sym)
- rescue NameError
- nil
- end
- if klass.respond_to?(:run)
- # invoke "run" on a Ruby library which follows our coding conventions
- klass.run(*rest)
+ 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)
+ end
+ elsif Utils.which "brewcask-#{command}"
+ # arbitrary external executable on PATH, Homebrew-style
+ exec "brewcask-#{command}", *ARGV[1..-1]
+ elsif Pathname.new(command.to_s).executable? &&
+ command.to_s.include?("/") &&
+ !command.to_s.match(%r{\.rb$})
+ # arbitrary external executable with literal path, useful
+ # for development and troubleshooting
+ exec command, *ARGV[1..-1]
else
- # other Ruby libraries must do everything via "require"
+ # failure
+ NullCommand.new(command).run
end
- elsif Hbc::Utils.which "brewcask-#{command}"
- # arbitrary external executable on PATH, Homebrew-style
- exec "brewcask-#{command}", *ARGV[1..-1]
- elsif Pathname.new(command.to_s).executable? &&
- command.to_s.include?("/") &&
- !command.to_s.match(%r{\.rb$})
- # arbitrary external executable with literal path, useful
- # for development and troubleshooting
- exec command, *ARGV[1..-1]
- else
- # failure
- Hbc::CLI::NullCommand.new(command).run
end
- end
- def self.process(arguments)
- command_string, *rest = *arguments
- rest = process_options(rest)
- command = Hbc.help ? "help" : lookup_command(command_string)
- Hbc.default_tap.install unless Hbc.default_tap.installed?
- Hbc.init if should_init?(command)
- run_command(command, *rest)
- rescue Hbc::CaskError, Hbc::CaskSha256MismatchError => e
- msg = e.message
- msg << e.backtrace.join("\n") if Hbc.debug
- onoe msg
- exit 1
- rescue StandardError, ScriptError, NoMemoryError => e
- msg = e.message
- msg << Hbc::Utils.error_message_with_suggestions
- msg << e.backtrace.join("\n")
- onoe msg
- exit 1
- end
-
- def self.nice_listing(cask_list)
- cask_taps = {}
- cask_list.each do |c|
- user, repo, token = c.split "/"
- repo.sub!(%r{^homebrew-}i, "")
- cask_taps[token] ||= []
- cask_taps[token].push "#{user}/#{repo}"
+ def self.process(arguments)
+ command_string, *rest = *arguments
+ rest = process_options(rest)
+ command = Hbc.help ? "help" : lookup_command(command_string)
+ Hbc.default_tap.install unless Hbc.default_tap.installed?
+ Hbc.init if should_init?(command)
+ run_command(command, *rest)
+ rescue CaskError, CaskSha256MismatchError => e
+ msg = e.message
+ msg << e.backtrace.join("\n") if Hbc.debug
+ onoe msg
+ exit 1
+ rescue StandardError, ScriptError, NoMemoryError => e
+ msg = e.message
+ msg << Utils.error_message_with_suggestions
+ msg << e.backtrace.join("\n")
+ onoe msg
+ exit 1
end
- list = []
- cask_taps.each do |token, taps|
- if taps.length == 1
- list.push token
- else
- taps.each { |r| list.push [r, token].join "/" }
+
+ def self.nice_listing(cask_list)
+ cask_taps = {}
+ cask_list.each do |c|
+ user, repo, token = c.split "/"
+ repo.sub!(%r{^homebrew-}i, "")
+ cask_taps[token] ||= []
+ cask_taps[token].push "#{user}/#{repo}"
+ end
+ list = []
+ cask_taps.each do |token, taps|
+ if taps.length == 1
+ list.push token
+ else
+ taps.each { |r| list.push [r, token].join "/" }
+ end
end
+ list.sort
end
- list.sort
- end
- def self.parser
- # If you modify these arguments, please update USAGE.md
- @parser ||= OptionParser.new do |opts|
- OPTIONS.each do |option, method|
- opts.on("#{option}" "PATH", Pathname) do |path|
- Hbc.public_send(method, path)
+ def self.parser
+ # If you modify these arguments, please update USAGE.md
+ @parser ||= OptionParser.new do |opts|
+ OPTIONS.each do |option, method|
+ opts.on("#{option}" "PATH", Pathname) do |path|
+ Hbc.public_send(method, path)
+ end
end
- end
- opts.on("--binarydir=PATH") do
- opoo <<-EOS.undent
- Option --binarydir is obsolete!
- Homebrew-Cask now uses the same location as your Homebrew installation for executable links.
- EOS
- end
+ opts.on("--binarydir=PATH") do
+ opoo <<-EOS.undent
+ Option --binarydir is obsolete!
+ Homebrew-Cask now uses the same location as your Homebrew installation for executable links.
+ EOS
+ end
- FLAGS.each do |flag, method|
- opts.on(flag) do
- Hbc.public_send(method, true)
+ FLAGS.each do |flag, method|
+ opts.on(flag) do
+ Hbc.public_send(method, true)
+ end
end
- end
- opts.on("--version") do
- raise OptionParser::InvalidOption # override default handling of --version
+ opts.on("--version") do
+ raise OptionParser::InvalidOption # override default handling of --version
+ end
end
end
- end
- def self.process_options(args)
- all_args = Shellwords.shellsplit(ENV["HOMEBREW_CASK_OPTS"] || "") + args
- remaining = []
- until all_args.empty?
- begin
- head = all_args.shift
- remaining.concat(parser.parse([head]))
- rescue OptionParser::InvalidOption
- remaining << head
- retry
- rescue OptionParser::MissingArgument
- raise Hbc::CaskError, "The option '#{head}' requires an argument"
- rescue OptionParser::AmbiguousOption
- raise Hbc::CaskError, "There is more than one possible option that starts with '#{head}'"
+ def self.process_options(args)
+ all_args = Shellwords.shellsplit(ENV["HOMEBREW_CASK_OPTS"] || "") + args
+ remaining = []
+ until all_args.empty?
+ begin
+ head = all_args.shift
+ remaining.concat(parser.parse([head]))
+ rescue OptionParser::InvalidOption
+ remaining << head
+ retry
+ rescue OptionParser::MissingArgument
+ raise CaskError, "The option '#{head}' requires an argument"
+ rescue OptionParser::AmbiguousOption
+ raise CaskError, "There is more than one possible option that starts with '#{head}'"
+ end
end
- end
- # for compat with Homebrew, not certain if this is desirable
- Hbc.verbose = true if !ENV["VERBOSE"].nil? || !ENV["HOMEBREW_VERBOSE"].nil?
+ # for compat with Homebrew, not certain if this is desirable
+ Hbc.verbose = true if !ENV["VERBOSE"].nil? || !ENV["HOMEBREW_VERBOSE"].nil?
- remaining
- end
-
- class NullCommand
- def initialize(attempted_verb)
- @attempted_verb = attempted_verb
+ remaining
end
- def run(*args)
- if args.include?("--version") || @attempted_verb == "--version"
- puts Hbc.full_version
- else
- purpose
- usage
- unless @attempted_verb.to_s.strip.empty? || @attempted_verb == "help"
- raise Hbc::CaskError, "Unknown command: #{@attempted_verb}"
+ class NullCommand
+ def initialize(attempted_verb)
+ @attempted_verb = attempted_verb
+ end
+
+ def run(*args)
+ if args.include?("--version") || @attempted_verb == "--version"
+ puts Hbc.full_version
+ else
+ purpose
+ usage
+ unless @attempted_verb.to_s.strip.empty? || @attempted_verb == "help"
+ raise CaskError, "Unknown command: #{@attempted_verb}"
+ end
end
end
- end
- def purpose
- puts <<-EOS.undent
- brew-cask provides a friendly homebrew-style CLI workflow for the
- administration of macOS applications distributed as binaries.
+ def purpose
+ puts <<-EOS.undent
+ brew-cask provides a friendly homebrew-style CLI workflow for the
+ administration of macOS applications distributed as binaries.
- EOS
- end
+ EOS
+ end
- def usage
- max_command_len = Hbc::CLI.commands.map(&:length).max
+ def usage
+ max_command_len = CLI.commands.map(&:length).max
- puts "Commands:\n\n"
- Hbc::CLI.command_classes.each do |klass|
- next unless klass.visible
- puts " #{klass.command_name.ljust(max_command_len)} #{_help_for(klass)}"
+ puts "Commands:\n\n"
+ CLI.command_classes.each do |klass|
+ next unless klass.visible
+ puts " #{klass.command_name.ljust(max_command_len)} #{_help_for(klass)}"
+ end
+ puts %Q{\nSee also "man brew-cask"}
end
- puts %Q{\nSee also "man brew-cask"}
- end
- def help
- ""
- end
+ def help
+ ""
+ end
- def _help_for(klass)
- klass.respond_to?(:help) ? klass.help : nil
+ def _help_for(klass)
+ klass.respond_to?(:help) ? klass.help : nil
+ end
end
end
end