From 17fb1b6dd87b531d26b8bfe606cce55a5106ab2c Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Thu, 30 Jul 2020 14:20:58 +0100 Subject: [PATCH 01/44] cmd/deps: add missing require. Fixes https://github.com/Homebrew/brew/pull/8126#issuecomment-666345260 --- Library/Homebrew/cmd/deps.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/Library/Homebrew/cmd/deps.rb b/Library/Homebrew/cmd/deps.rb index 1f67439108..b5b05ce2e5 100644 --- a/Library/Homebrew/cmd/deps.rb +++ b/Library/Homebrew/cmd/deps.rb @@ -4,6 +4,7 @@ require "formula" require "ostruct" require "cli/parser" require "cask/caskroom" +require "cask_dependent" module Homebrew extend DependenciesHelpers From 1ac470fe7a939c628f8e532e313ae06a11aeca4a Mon Sep 17 00:00:00 2001 From: Rylan Polster Date: Thu, 30 Jul 2020 09:30:44 -0400 Subject: [PATCH 02/44] bump-revision: handle array of licenses Allowing multiple licenses meant that `formula.license` returned an array. This converts that array to the appropriate format for `bump-revision` --- Library/Homebrew/dev-cmd/bump-revision.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/dev-cmd/bump-revision.rb b/Library/Homebrew/dev-cmd/bump-revision.rb index 0575cfa4a8..cbede3d01b 100644 --- a/Library/Homebrew/dev-cmd/bump-revision.rb +++ b/Library/Homebrew/dev-cmd/bump-revision.rb @@ -42,9 +42,14 @@ module Homebrew end old = if formula.license + license_string = if formula.license.length > 1 + formula.license + else + "\"#{formula.license.first}\"" + end # insert replacement revision after license <<~EOS - license "#{formula.license}" + license #{license_string} EOS elsif formula.path.read.include?("stable do\n") # insert replacement revision after homepage From bdc8438f7ca8cd347a6ed9a59b7d28974b040117 Mon Sep 17 00:00:00 2001 From: Rylan Polster Date: Thu, 30 Jul 2020 09:32:29 -0400 Subject: [PATCH 03/44] bump-revision: update revision syntax --- Library/Homebrew/dev-cmd/bump-revision.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/dev-cmd/bump-revision.rb b/Library/Homebrew/dev-cmd/bump-revision.rb index cbede3d01b..9a14d661a5 100644 --- a/Library/Homebrew/dev-cmd/bump-revision.rb +++ b/Library/Homebrew/dev-cmd/bump-revision.rb @@ -64,7 +64,7 @@ module Homebrew else # insert replacement revision after :revision <<~EOS - :revision => "#{formula_spec.specs[:revision]}" + revision: "#{formula_spec.specs[:revision]}" EOS end replacement = old + " revision 1\n" From 633dea1bb12936fcde75926ed41c78692416d600 Mon Sep 17 00:00:00 2001 From: miccal Date: Thu, 30 Jul 2020 22:10:53 +0800 Subject: [PATCH 04/44] rubocop.yml: cask fixes for new style --- Library/.rubocop.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Library/.rubocop.yml b/Library/.rubocop.yml index 1fa2d137e6..d8d0fdcedb 100644 --- a/Library/.rubocop.yml +++ b/Library/.rubocop.yml @@ -181,7 +181,9 @@ Layout/LineLength: Max: 118 # ignore manpage comments and long single-line strings IgnoredPatterns: ['#: ', ' url "', ' mirror "', ' plist_options ', - ' appcast "', ' executable: "', '#{version.', + ' appcast "', ' executable: "', ' font "', ' homepage "', ' name "', + ' pkg "', ' pkgutil: "', '#{language}', '#{version.', + ' "/Library/Application Support/', '"/Library/Caches/', '"/Library/PreferencePanes/', ' "~/Library/Application Support/', '"~/Library/Caches/', '"~/Application Support', ' was verified as official when first introduced to the cask'] From a7e692e7bc4d5e6d39910f2bd27e809dd55d19a3 Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Thu, 30 Jul 2020 16:12:57 +0100 Subject: [PATCH 05/44] dependencies: fix error in recursive_includes --- Library/Homebrew/dependencies.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/dependencies.rb b/Library/Homebrew/dependencies.rb index ceac7f54e5..71c638cb79 100644 --- a/Library/Homebrew/dependencies.rb +++ b/Library/Homebrew/dependencies.rb @@ -100,7 +100,7 @@ module DependenciesHelpers klass.prune if !includes.include?("optional?") && !dependent.build.with?(dep) elsif dep.build? || dep.test? keep = false - keep ||= dep.test? && includes.include?("test?") && dependent == formula + keep ||= dep.test? && includes.include?("test?") && dependent == root_dependent keep ||= dep.build? && includes.include?("build?") klass.prune unless keep end From 71f9ec79c70ab3d171b71296375f17dd4bbbc4d5 Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Thu, 30 Jul 2020 16:59:19 +0100 Subject: [PATCH 06/44] formula: don't catch errors in the Formula.each yield --- Library/Homebrew/formula.rb | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index ad385131e4..a56ebfc1fb 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -1461,12 +1461,14 @@ class Formula # @private def self.each files.each do |file| - yield Formulary.factory(file) - rescue => e - # Don't let one broken formula break commands. But do complain. - onoe "Failed to import: #{file}" - puts e - next + yield begin + Formulary.factory(file) + rescue FormulaUnavailableError => e + # Don't let one broken formula break commands. But do complain. + onoe "Failed to import: #{file}" + puts e + next + end end end From 03cf0e0180b3d013f17b301b41ab86e656b1a4ca Mon Sep 17 00:00:00 2001 From: Rylan Polster Date: Thu, 30 Jul 2020 14:26:27 -0400 Subject: [PATCH 07/44] update-python-resources: add --no-cache-dir flag --- Library/Homebrew/utils/pypi.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/utils/pypi.rb b/Library/Homebrew/utils/pypi.rb index 486462be19..ec9911c5ce 100644 --- a/Library/Homebrew/utils/pypi.rb +++ b/Library/Homebrew/utils/pypi.rb @@ -53,11 +53,13 @@ module PyPI end ohai "Retrieving PyPI dependencies for \"#{pypi_name}==#{version}\"" if !print_only && !silent - pipgrip_output = Utils.popen_read Formula["pipgrip"].bin/"pipgrip", "--json", "#{pypi_name}==#{version}" + pipgrip_output = Utils.popen_read Formula["pipgrip"].bin/"pipgrip", "--json", "--no-cache-dir", + "#{pypi_name}==#{version}" unless $CHILD_STATUS.success? odie <<~EOS Unable to determine dependencies for \"#{pypi_name}\" because of a failure when running - `pipgrip --json #{pypi_name}==#{version}`. Please update the resources for \"#{formula.name}\" manually. + `pipgrip --json --no-cache-dir #{pypi_name}==#{version}`. + Please update the resources for \"#{formula.name}\" manually. EOS end From 020ce249eeb96efc992d5aea44705645fbfbdcff Mon Sep 17 00:00:00 2001 From: Rylan Polster Date: Thu, 30 Jul 2020 18:56:00 -0400 Subject: [PATCH 08/44] bump-formula-pr: handle pypi url version changes --- Library/Homebrew/dev-cmd/bump-formula-pr.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Library/Homebrew/dev-cmd/bump-formula-pr.rb b/Library/Homebrew/dev-cmd/bump-formula-pr.rb index 0e8144dee6..b62b7652e2 100644 --- a/Library/Homebrew/dev-cmd/bump-formula-pr.rb +++ b/Library/Homebrew/dev-cmd/bump-formula-pr.rb @@ -183,6 +183,11 @@ module Homebrew elsif !new_url && !new_version odie "#{formula}: no --url= or --version= argument specified!" else + new_url ||= if old_url.start_with?(PyPI::PYTHONHOSTED_URL_PREFIX) + package_name = File.basename(old_url).match(/^(.+)-[a-z\d.]+$/)[1] + _, url = PyPI.get_pypi_info(package_name, new_version) + url + end new_url ||= old_url.gsub(old_version, new_version) if new_url == old_url odie <<~EOS From 0e4b258b5673aee957646a99e5aabc0c70c80975 Mon Sep 17 00:00:00 2001 From: Seeker Date: Thu, 30 Jul 2020 21:06:23 -0700 Subject: [PATCH 09/44] bump-formula-pr: add `bump-` prefix to branch --- Library/Homebrew/dev-cmd/bump-formula-pr.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/dev-cmd/bump-formula-pr.rb b/Library/Homebrew/dev-cmd/bump-formula-pr.rb index 0e8144dee6..ebb1a84774 100644 --- a/Library/Homebrew/dev-cmd/bump-formula-pr.rb +++ b/Library/Homebrew/dev-cmd/bump-formula-pr.rb @@ -338,7 +338,7 @@ module Homebrew run_audit(formula, alias_rename, old_contents) formula.path.parent.cd do - branch = "#{formula.name}-#{new_formula_version}" + branch = "bump-#{formula.name}-#{new_formula_version}" git_dir = Utils.popen_read("git rev-parse --git-dir").chomp shallow = !git_dir.empty? && File.exist?("#{git_dir}/shallow") changed_files = [formula.path] From d4c2ffd7056088a76055ae04d7107bcda0a4acba Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Thu, 30 Jul 2020 18:40:10 +0200 Subject: [PATCH 10/44] Refactor `CLI::Parser`. --- Library/Homebrew/brew.rb | 21 +-- Library/Homebrew/brew.sh | 2 + Library/Homebrew/cli/args.rb | 6 +- Library/Homebrew/cli/parser.rb | 123 +++++++++++------- Library/Homebrew/cmd/--cellar.rb | 2 +- Library/Homebrew/cmd/--prefix.rb | 2 +- Library/Homebrew/cmd/--repository.rb | 2 +- Library/Homebrew/cmd/analytics.rb | 4 +- Library/Homebrew/cmd/cleanup.rb | 4 +- Library/Homebrew/cmd/commands.rb | 7 +- Library/Homebrew/cmd/config.rb | 3 +- Library/Homebrew/cmd/deps.rb | 5 +- Library/Homebrew/cmd/desc.rb | 4 +- Library/Homebrew/cmd/doctor.rb | 4 +- Library/Homebrew/cmd/fetch.rb | 4 +- Library/Homebrew/cmd/gist-logs.rb | 5 +- Library/Homebrew/cmd/home.rb | 3 +- Library/Homebrew/cmd/info.rb | 14 +- Library/Homebrew/cmd/install.rb | 4 +- Library/Homebrew/cmd/leaves.rb | 2 +- Library/Homebrew/cmd/link.rb | 5 +- Library/Homebrew/cmd/list.rb | 14 +- Library/Homebrew/cmd/log.rb | 2 +- Library/Homebrew/cmd/migrate.rb | 3 +- Library/Homebrew/cmd/missing.rb | 4 +- Library/Homebrew/cmd/options.rb | 4 +- Library/Homebrew/cmd/outdated.rb | 24 ++-- Library/Homebrew/cmd/pin.rb | 4 +- Library/Homebrew/cmd/postinstall.rb | 3 +- Library/Homebrew/cmd/readall.rb | 4 +- Library/Homebrew/cmd/reinstall.rb | 4 +- Library/Homebrew/cmd/search.rb | 5 +- Library/Homebrew/cmd/switch.rb | 5 +- Library/Homebrew/cmd/tap-info.rb | 3 +- Library/Homebrew/cmd/tap.rb | 5 +- Library/Homebrew/cmd/uninstall.rb | 2 +- Library/Homebrew/cmd/unlink.rb | 5 +- Library/Homebrew/cmd/unpin.rb | 5 +- Library/Homebrew/cmd/untap.rb | 4 +- Library/Homebrew/cmd/update-report.rb | 4 +- Library/Homebrew/cmd/upgrade.rb | 8 +- Library/Homebrew/cmd/uses.rb | 4 +- Library/Homebrew/dev-cmd/audit.rb | 3 +- Library/Homebrew/dev-cmd/bottle.rb | 5 +- Library/Homebrew/dev-cmd/bump-formula-pr.rb | 6 +- Library/Homebrew/dev-cmd/bump-revision.rb | 4 +- Library/Homebrew/dev-cmd/cat.rb | 4 +- Library/Homebrew/dev-cmd/command.rb | 5 +- Library/Homebrew/dev-cmd/create.rb | 3 +- Library/Homebrew/dev-cmd/diy.rb | 5 +- Library/Homebrew/dev-cmd/edit.rb | 4 +- Library/Homebrew/dev-cmd/extract.rb | 4 +- Library/Homebrew/dev-cmd/formula.rb | 5 +- .../Homebrew/dev-cmd/install-bundler-gems.rb | 2 +- Library/Homebrew/dev-cmd/irb.rb | 6 +- Library/Homebrew/dev-cmd/linkage.rb | 4 +- Library/Homebrew/dev-cmd/man.rb | 7 +- Library/Homebrew/dev-cmd/mirror.rb | 3 +- Library/Homebrew/dev-cmd/pr-automerge.rb | 3 +- Library/Homebrew/dev-cmd/pr-publish.rb | 4 +- Library/Homebrew/dev-cmd/pr-pull.rb | 3 +- Library/Homebrew/dev-cmd/pr-upload.rb | 2 - Library/Homebrew/dev-cmd/pull.rb | 5 +- Library/Homebrew/dev-cmd/release-notes.rb | 2 +- Library/Homebrew/dev-cmd/ruby.rb | 2 - Library/Homebrew/dev-cmd/sh.rb | 3 +- Library/Homebrew/dev-cmd/style.rb | 5 +- Library/Homebrew/dev-cmd/tap-new.rb | 5 +- Library/Homebrew/dev-cmd/test.rb | 5 +- Library/Homebrew/dev-cmd/tests.rb | 5 +- Library/Homebrew/dev-cmd/unpack.rb | 5 +- .../Homebrew/dev-cmd/update-license-data.rb | 2 +- Library/Homebrew/dev-cmd/update-test.rb | 5 +- Library/Homebrew/dev-cmd/vendor-gems.rb | 2 +- Library/Homebrew/help.rb | 38 +++--- Library/Homebrew/test/cli/parser_spec.rb | 113 +++++++--------- .../test/cmd/shared_examples/args_parse.rb | 5 +- .../test/formula_installer_bottle_spec.rb | 2 +- docs/Manpage.md | 4 +- manpages/brew.1 | 8 +- 80 files changed, 307 insertions(+), 333 deletions(-) diff --git a/Library/Homebrew/brew.rb b/Library/Homebrew/brew.rb index 2fba870a71..d63f2d05f7 100644 --- a/Library/Homebrew/brew.rb +++ b/Library/Homebrew/brew.rb @@ -55,6 +55,8 @@ begin end end + Homebrew.args = Homebrew::CLI::Parser.new.parse(ignore_invalid_options: true) + path = PATH.new(ENV["PATH"]) homebrew_path = PATH.new(ENV["HOMEBREW_PATH"]) @@ -117,16 +119,17 @@ begin odie "Unknown command: #{cmd}" if !possible_tap || possible_tap.installed? # Unset HOMEBREW_HELP to avoid confusing the tap - ENV.delete("HOMEBREW_HELP") if help_flag - tap_commands = [] - cgroup = Utils.popen_read("cat", "/proc/1/cgroup") - if %w[azpl_job actions_job docker garden kubepods].none? { |container| cgroup.include?(container) } - brew_uid = HOMEBREW_BREW_FILE.stat.uid - tap_commands += %W[/usr/bin/sudo -u ##{brew_uid}] if Process.uid.zero? && !brew_uid.zero? + with_env HOMEBREW_HELP: nil do + tap_commands = [] + cgroup = Utils.popen_read("cat", "/proc/1/cgroup") + if %w[azpl_job actions_job docker garden kubepods].none? { |container| cgroup.include?(container) } + brew_uid = HOMEBREW_BREW_FILE.stat.uid + tap_commands += %W[/usr/bin/sudo -u ##{brew_uid}] if Process.uid.zero? && !brew_uid.zero? + end + tap_commands += %W[#{HOMEBREW_BREW_FILE} tap #{possible_tap.name}] + safe_system(*tap_commands) end - tap_commands += %W[#{HOMEBREW_BREW_FILE} tap #{possible_tap.name}] - safe_system(*tap_commands) - ENV["HOMEBREW_HELP"] = "1" if help_flag + exec HOMEBREW_BREW_FILE, cmd, *ARGV end rescue UsageError => e diff --git a/Library/Homebrew/brew.sh b/Library/Homebrew/brew.sh index 5d4eafd519..977d3bd06b 100644 --- a/Library/Homebrew/brew.sh +++ b/Library/Homebrew/brew.sh @@ -336,6 +336,8 @@ fi for arg in "$@" do + [[ $arg = "--" ]] && break + if [[ $arg = "--help" || $arg = "-h" || $arg = "--usage" || $arg = "-?" ]] then export HOMEBREW_HELP="1" diff --git a/Library/Homebrew/cli/args.rb b/Library/Homebrew/cli/args.rb index 0f5353dc25..a959790afb 100644 --- a/Library/Homebrew/cli/args.rb +++ b/Library/Homebrew/cli/args.rb @@ -10,7 +10,7 @@ module Homebrew # undefine tap to allow --tap argument undef tap - def initialize(argv = ARGV.freeze, set_default_args: false) + def initialize(argv = ARGV.dup.freeze, set_default_args: false) super() @processed_options = [] @@ -58,10 +58,6 @@ module Homebrew @flags_only = args_flags_only(cli_args) end - def passthrough - options_only - CLI::Parser.global_options.values.map(&:first).flatten - end - def named named_args || [] end diff --git a/Library/Homebrew/cli/parser.rb b/Library/Homebrew/cli/parser.rb index 64a5c3c495..5e03c5c81a 100644 --- a/Library/Homebrew/cli/parser.rb +++ b/Library/Homebrew/cli/parser.rb @@ -13,10 +13,6 @@ module Homebrew class Parser attr_reader :processed_options, :hide_from_man_page - def self.parse(argv = ARGV.freeze, allow_no_named_args: false, &block) - new(argv, &block).parse(allow_no_named_args: allow_no_named_args) - end - def self.from_cmd_path(cmd_path) cmd_args_method_name = Commands.args_method_name(cmd_path) @@ -30,15 +26,16 @@ module Homebrew end def self.global_options - { - quiet: [["-q", "--quiet"], :quiet, "Suppress any warnings."], - verbose: [["-v", "--verbose"], :verbose, "Make some output more verbose."], - debug: [["-d", "--debug"], :debug, "Display any debugging information."], - } + [ + ["-q", "--quiet", "Suppress any warnings."], + ["-v", "--verbose", "Make some output more verbose."], + ["-d", "--debug", "Display any debugging information."], + ] end - def initialize(argv = ARGV.freeze, &block) + def initialize(argv = ARGV.dup.freeze, &block) @parser = OptionParser.new + @argv = argv @args = Homebrew::CLI::Args.new(@argv) @@ -50,25 +47,31 @@ module Homebrew @min_named_args = nil @min_named_type = nil @hide_from_man_page = false - instance_eval(&block) + + self.class.global_options.each do |short, long, desc| + switch short, long, description: desc + end + + instance_eval(&block) if block_given? + post_initialize end def post_initialize + # Disable default handling of `--version` switch. + @parser.base.long.delete("version") + + # Disable default handling of `--help` switch. @parser.on_tail("-h", "--help", "Show this message.") do - puts generate_help_text - exit 0 + raise OptionParser::InvalidOption end end def switch(*names, description: nil, env: nil, required_for: nil, depends_on: nil) global_switch = names.first.is_a?(Symbol) - names, env, default_description = common_switch(*names) if global_switch - if description.nil? && global_switch - description = default_description - elsif description.nil? - description = option_to_description(*names) - end + return if global_switch + + description = option_to_description(*names) if description.nil? process_option(*names, description) @parser.on(*names, *wrap_option_desc(description)) do enable_switch(*names, from: :args) @@ -153,31 +156,54 @@ module Homebrew @parser.to_s end - def parse(argv = @argv, allow_no_named_args: false) + def parse(argv = @argv, ignore_invalid_options: false) raise "Arguments were already parsed!" if @args_parsed - begin - named_args = @parser.parse(argv) - rescue OptionParser::InvalidOption => e - $stderr.puts generate_help_text - raise e + i = 0 + remaining = [] + + argv, non_options = split_double_dash(argv) + + while i < argv.count + begin + begin + arg = argv[i] + + remaining << arg unless @parser.parse([arg]).empty? + rescue OptionParser::MissingArgument + raise if i + 1 >= argv.count + + args = argv[i..(i + 1)] + @parser.parse(args) + i += 1 + end + rescue OptionParser::InvalidOption + if ignore_invalid_options + remaining << arg + else + $stderr.puts generate_help_text + raise + end + end + + i += 1 + end + + named_args = if ignore_invalid_options + [] + else + remaining + non_options end check_constraint_violations - check_named_args(named_args, allow_no_named_args: allow_no_named_args) + check_named_args(named_args) @args.freeze_named_args!(named_args) @args.freeze_processed_options!(@processed_options) - Homebrew.args = @args @args_parsed = true @args end - def global_option?(name, desc) - Homebrew::CLI::Parser.global_options.key?(name.to_sym) && - Homebrew::CLI::Parser.global_options[name.to_sym].last == desc - end - def generate_help_text @parser.to_s .sub(/^/, "#{Tty.bold}Usage: brew#{Tty.reset} ") @@ -188,7 +214,7 @@ module Homebrew end def formula_options - formulae.each do |f| + formulae(@argv).each do |f| next if f.options.empty? f.options.each do |o| @@ -256,11 +282,6 @@ module Homebrew end end - # These are common/global switches accessible throughout Homebrew - def common_switch(name) - Homebrew::CLI::Parser.global_options.fetch(name, name) - end - def option_passed?(name) @args[name.to_sym] || @args["#{name}?".to_sym] end @@ -328,8 +349,10 @@ module Homebrew check_constraints end - def check_named_args(args, allow_no_named_args: false) + def check_named_args(args) min_exception = case @min_named_type + when :cask + Cask::CaskUnspecifiedError.new when :formula FormulaUnspecifiedError.new when :keg @@ -337,8 +360,8 @@ module Homebrew else MinNamedArgumentsError.new(@min_named_args) end - raise min_exception if !allow_no_named_args && !@min_named_args.nil? && args.size < @min_named_args - raise MaxNamedArgumentsError, @max_named_args if !@max_named_args.nil? && args.size > @max_named_args + raise min_exception if @min_named_args && args.size < @min_named_args + raise MaxNamedArgumentsError, @max_named_args if @max_named_args && args.size > @max_named_args end def process_option(*args) @@ -346,11 +369,21 @@ module Homebrew @processed_options << [option.short.first, option.long.first, option.arg, option.desc.first] end - def formulae - named_args = @argv.reject { |arg| arg.start_with?("-") } - spec = if @argv.include?("--HEAD") + def split_double_dash(argv) + if sep = argv.index("--") + [argv.take(sep), argv.drop(sep + 1)] + else + [argv, []] + end + end + + def formulae(argv) + argv, named_argv = split_double_dash(argv) + + named_args = argv.reject { |arg| arg.start_with?("-") } + named_argv + spec = if argv.include?("--HEAD") :head - elsif @argv.include?("--devel") + elsif argv.include?("--devel") :devel else :stable diff --git a/Library/Homebrew/cmd/--cellar.rb b/Library/Homebrew/cmd/--cellar.rb index 4b1367cf67..7ef1b6fc39 100644 --- a/Library/Homebrew/cmd/--cellar.rb +++ b/Library/Homebrew/cmd/--cellar.rb @@ -20,7 +20,7 @@ module Homebrew end def __cellar - __cellar_args.parse + args = __cellar_args.parse if args.no_named? puts HOMEBREW_CELLAR diff --git a/Library/Homebrew/cmd/--prefix.rb b/Library/Homebrew/cmd/--prefix.rb index 5269e38d9e..82a0b464a8 100644 --- a/Library/Homebrew/cmd/--prefix.rb +++ b/Library/Homebrew/cmd/--prefix.rb @@ -20,7 +20,7 @@ module Homebrew end def __prefix - __prefix_args.parse + args = __prefix_args.parse if args.no_named? puts HOMEBREW_PREFIX diff --git a/Library/Homebrew/cmd/--repository.rb b/Library/Homebrew/cmd/--repository.rb index 8e27a8def4..211f1c0c2f 100644 --- a/Library/Homebrew/cmd/--repository.rb +++ b/Library/Homebrew/cmd/--repository.rb @@ -18,7 +18,7 @@ module Homebrew end def __repository - __repository_args.parse + args = __repository_args.parse if args.no_named? puts HOMEBREW_REPOSITORY diff --git a/Library/Homebrew/cmd/analytics.rb b/Library/Homebrew/cmd/analytics.rb index 1e641e7214..4c8ef458f7 100644 --- a/Library/Homebrew/cmd/analytics.rb +++ b/Library/Homebrew/cmd/analytics.rb @@ -22,14 +22,12 @@ module Homebrew `brew analytics regenerate-uuid`: Regenerate the UUID used for Homebrew's analytics. EOS - switch :verbose - switch :debug max_named 1 end end def analytics - analytics_args.parse + args = analytics_args.parse case args.named.first when nil, "state" diff --git a/Library/Homebrew/cmd/cleanup.rb b/Library/Homebrew/cmd/cleanup.rb index 3f8481c8e6..510b872f03 100644 --- a/Library/Homebrew/cmd/cleanup.rb +++ b/Library/Homebrew/cmd/cleanup.rb @@ -27,13 +27,11 @@ module Homebrew "If you want to delete those too: `rm -rf \"$(brew --cache)\"`" switch "--prune-prefix", description: "Only prune the symlinks and directories from the prefix and remove no other files." - switch :verbose - switch :debug end end def cleanup - cleanup_args.parse + args = cleanup_args.parse cleanup = Cleanup.new(*args.named, dry_run: args.dry_run?, scrub: args.s?, days: args.prune&.to_i) if args.prune_prefix? diff --git a/Library/Homebrew/cmd/commands.rb b/Library/Homebrew/cmd/commands.rb index ab695b436f..29fd687555 100644 --- a/Library/Homebrew/cmd/commands.rb +++ b/Library/Homebrew/cmd/commands.rb @@ -12,19 +12,18 @@ module Homebrew Show lists of built-in and external commands. EOS - switch :quiet, + switch "-q", "--quiet", description: "List only the names of commands without category headers." switch "--include-aliases", depends_on: "--quiet", description: "Include aliases of internal commands." - switch :verbose - switch :debug + max_named 0 end end def commands - commands_args.parse + args = commands_args.parse if args.quiet? puts Formatter.columns(Commands.commands(aliases: args.include_aliases?)) diff --git a/Library/Homebrew/cmd/config.rb b/Library/Homebrew/cmd/config.rb index a95ab42f6f..d0519bf4ac 100644 --- a/Library/Homebrew/cmd/config.rb +++ b/Library/Homebrew/cmd/config.rb @@ -14,8 +14,7 @@ module Homebrew Show Homebrew and system configuration info useful for debugging. If you file a bug report, you will be required to provide this information. EOS - switch :verbose - switch :debug + max_named 0 end end diff --git a/Library/Homebrew/cmd/deps.rb b/Library/Homebrew/cmd/deps.rb index b5b05ce2e5..ed333204bd 100644 --- a/Library/Homebrew/cmd/deps.rb +++ b/Library/Homebrew/cmd/deps.rb @@ -53,15 +53,14 @@ module Homebrew description: "Switch into the mode used by the `--all` option, but only list dependencies "\ "for each provided , one formula per line. This is used for "\ "debugging the `--installed`/`--all` display mode." - switch :verbose - switch :debug + conflicts "--installed", "--all" formula_options end end def deps - deps_args.parse + args = deps_args.parse Formulary.enable_factory_cache! diff --git a/Library/Homebrew/cmd/desc.rb b/Library/Homebrew/cmd/desc.rb index ce505aaa0f..bd5c669459 100644 --- a/Library/Homebrew/cmd/desc.rb +++ b/Library/Homebrew/cmd/desc.rb @@ -28,14 +28,14 @@ module Homebrew switch "-d", "--description", description: "Search just descriptions for . If is flanked by slashes, "\ "it is interpreted as a regular expression." - switch :verbose + conflicts "--search", "--name", "--description" min_named 1 end end def desc - desc_args.parse + args = desc_args.parse search_type = if args.search? :either diff --git a/Library/Homebrew/cmd/doctor.rb b/Library/Homebrew/cmd/doctor.rb index 7fc4208926..24da404e6c 100644 --- a/Library/Homebrew/cmd/doctor.rb +++ b/Library/Homebrew/cmd/doctor.rb @@ -23,13 +23,11 @@ module Homebrew "if provided as arguments." switch "-D", "--audit-debug", description: "Enable debugging and profiling of audit methods." - switch :verbose - switch :debug end end def doctor - doctor_args.parse + args = doctor_args.parse inject_dump_stats!(Diagnostic::Checks, /^check_*/) if args.audit_debug? diff --git a/Library/Homebrew/cmd/fetch.rb b/Library/Homebrew/cmd/fetch.rb index fbf45cfcf2..60794c7d85 100644 --- a/Library/Homebrew/cmd/fetch.rb +++ b/Library/Homebrew/cmd/fetch.rb @@ -23,7 +23,7 @@ module Homebrew description: "Fetch development version instead of stable version." switch "-f", "--force", description: "Remove a previously cached version and re-fetch." - switch :verbose, + switch "-v", "--verbose", description: "Do a verbose VCS checkout, if the URL represents a VCS. This is useful for "\ "seeing if an existing VCS cache has been updated." switch "--retry", @@ -38,7 +38,7 @@ module Homebrew switch "--force-bottle", description: "Download a bottle if it exists for the current or newest version of macOS, "\ "even if it would not be used during installation." - switch :debug + conflicts "--devel", "--HEAD" conflicts "--build-from-source", "--build-bottle", "--force-bottle" min_named :formula diff --git a/Library/Homebrew/cmd/gist-logs.rb b/Library/Homebrew/cmd/gist-logs.rb index 912266b6df..5bebb3ee1a 100644 --- a/Library/Homebrew/cmd/gist-logs.rb +++ b/Library/Homebrew/cmd/gist-logs.rb @@ -28,8 +28,7 @@ module Homebrew switch "-p", "--private", description: "The Gist will be marked private and will not appear in listings but will "\ "be accessible with its link." - switch :verbose - switch :debug + named :formula end end @@ -142,7 +141,7 @@ module Homebrew end def gist_logs - gist_logs_args.parse + args = gist_logs_args.parse Install.perform_preinstall_checks(all_fatal: true) Install.perform_build_from_source_checks(all_fatal: true) diff --git a/Library/Homebrew/cmd/home.rb b/Library/Homebrew/cmd/home.rb index e567febfab..8b37d3810c 100644 --- a/Library/Homebrew/cmd/home.rb +++ b/Library/Homebrew/cmd/home.rb @@ -15,12 +15,11 @@ module Homebrew Open 's homepage in a browser, or open Homebrew's own homepage if no formula is provided. EOS - switch :debug end end def home - home_args.parse + args = home_args.parse if args.no_named? exec_browser HOMEBREW_WWW diff --git a/Library/Homebrew/cmd/info.rb b/Library/Homebrew/cmd/info.rb index c43101e7f7..d975d131f9 100644 --- a/Library/Homebrew/cmd/info.rb +++ b/Library/Homebrew/cmd/info.rb @@ -52,15 +52,15 @@ module Homebrew switch "--all", depends_on: "--json", description: "Print JSON of all available formulae." - switch :verbose, + switch "-v", "--verbose", description: "Show more verbose analytics data for ." - switch :debug + conflicts "--installed", "--all" end end def info - info_args.parse + args = info_args.parse if args.days.present? raise UsageError, "--days must be one of #{VALID_DAYS.join(", ")}" unless VALID_DAYS.include?(args.days) @@ -83,17 +83,17 @@ module Homebrew raise FormulaUnspecifiedError if args.no_named? end - print_json + print_json(args: args) elsif args.github? raise FormulaUnspecifiedError if args.no_named? exec_browser(*args.formulae.map { |f| github_info(f) }) else - print_info + print_info(args: args) end end - def print_info + def print_info(args:) if args.no_named? if args.analytics? Utils::Analytics.output(args: args) @@ -126,7 +126,7 @@ module Homebrew end end - def print_json + def print_json(args:) ff = if args.all? Formula.sort elsif args.installed? diff --git a/Library/Homebrew/cmd/install.rb b/Library/Homebrew/cmd/install.rb index 893ec43a93..e920ab35f0 100644 --- a/Library/Homebrew/cmd/install.rb +++ b/Library/Homebrew/cmd/install.rb @@ -24,7 +24,7 @@ module Homebrew Unless `HOMEBREW_NO_INSTALL_CLEANUP` is set, `brew cleanup` will then be run for the installed formulae or, every 30 days, for all formulae. EOS - switch :debug, + switch "-d", "--debug", description: "If brewing fails, open an interactive debugging session with access to IRB "\ "or a shell inside the temporary build directory." flag "--env=", @@ -74,7 +74,7 @@ module Homebrew switch "-f", "--force", description: "Install without checking for previously installed keg-only or "\ "non-migrated versions." - switch :verbose, + switch "-v", "--verbose", description: "Print the verification and postinstall steps." switch "--display-times", env: :display_install_times, diff --git a/Library/Homebrew/cmd/leaves.rb b/Library/Homebrew/cmd/leaves.rb index be4fcdf559..1768227b79 100644 --- a/Library/Homebrew/cmd/leaves.rb +++ b/Library/Homebrew/cmd/leaves.rb @@ -14,7 +14,7 @@ module Homebrew List installed formulae that are not dependencies of another installed formula. EOS - switch :debug + max_named 0 end end diff --git a/Library/Homebrew/cmd/link.rb b/Library/Homebrew/cmd/link.rb index 441cf1de1d..25719e29a8 100644 --- a/Library/Homebrew/cmd/link.rb +++ b/Library/Homebrew/cmd/link.rb @@ -23,14 +23,13 @@ module Homebrew "`brew link --overwrite` without actually linking or deleting any files." switch "-f", "--force", description: "Allow keg-only formulae to be linked." - switch :verbose - switch :debug + min_named :keg end end def link - link_args.parse + args = link_args.parse mode = OpenStruct.new diff --git a/Library/Homebrew/cmd/list.rb b/Library/Homebrew/cmd/list.rb index 6dda14d46a..87e3d38985 100644 --- a/Library/Homebrew/cmd/list.rb +++ b/Library/Homebrew/cmd/list.rb @@ -45,14 +45,13 @@ module Homebrew description: "Reverse the order of the sort to list the oldest entries first." switch "-t", description: "Sort by time modified, listing most recently modified first." - switch :verbose - switch :debug + ["--unbrewed", "--multiple", "--pinned", "-l", "-r", "-t"].each { |flag| conflicts "--cask", flag } end end def list - list_args.parse + args = list_args.parse return list_casks if args.cask? @@ -76,7 +75,14 @@ module Homebrew puts Formatter.columns(full_names) else ENV["CLICOLOR"] = nil - safe_system "ls", *args.passthrough << HOMEBREW_CELLAR + + ls_args = [] + ls_args << "-1" if args.public_send(:'1?') + ls_args << "-l" if args.l? + ls_args << "-r" if args.r? + ls_args << "-t" if args.t? + + safe_system "ls", *ls_args, HOMEBREW_CELLAR end elsif args.verbose? || !$stdout.tty? system_command! "find", args: args.kegs.map(&:to_s) + %w[-not -type d -print], print_stdout: true diff --git a/Library/Homebrew/cmd/log.rb b/Library/Homebrew/cmd/log.rb index ffee96f468..e49d4bead0 100644 --- a/Library/Homebrew/cmd/log.rb +++ b/Library/Homebrew/cmd/log.rb @@ -27,7 +27,7 @@ module Homebrew end def log - log_args.parse + args = log_args.parse # As this command is simplifying user-run commands then let's just use a # user path, too. diff --git a/Library/Homebrew/cmd/migrate.rb b/Library/Homebrew/cmd/migrate.rb index a9d3619543..c6f12d7831 100644 --- a/Library/Homebrew/cmd/migrate.rb +++ b/Library/Homebrew/cmd/migrate.rb @@ -17,8 +17,7 @@ module Homebrew switch "-f", "--force", description: "Treat installed and provided as if they are from "\ "the same taps and migrate them anyway." - switch :verbose - switch :debug + min_named :formula end end diff --git a/Library/Homebrew/cmd/missing.rb b/Library/Homebrew/cmd/missing.rb index 11714597dd..ee249d5a6e 100644 --- a/Library/Homebrew/cmd/missing.rb +++ b/Library/Homebrew/cmd/missing.rb @@ -20,13 +20,11 @@ module Homebrew comma_array "--hide", description: "Act as if none of the specified are installed. should be "\ "a comma-separated list of formulae." - switch :verbose - switch :debug end end def missing - missing_args.parse + args = missing_args.parse return unless HOMEBREW_CELLAR.exist? diff --git a/Library/Homebrew/cmd/options.rb b/Library/Homebrew/cmd/options.rb index c41d27f149..4665e8e399 100644 --- a/Library/Homebrew/cmd/options.rb +++ b/Library/Homebrew/cmd/options.rb @@ -23,13 +23,13 @@ module Homebrew description: "Show options for all available formulae." flag "--command=", description: "Show options for the specified ." - switch :debug + conflicts "--installed", "--all", "--command" end end def options - options_args.parse + args = options_args.parse if args.all? puts_options Formula.to_a.sort diff --git a/Library/Homebrew/cmd/outdated.rb b/Library/Homebrew/cmd/outdated.rb index 7c5f078716..7ce5a854a0 100644 --- a/Library/Homebrew/cmd/outdated.rb +++ b/Library/Homebrew/cmd/outdated.rb @@ -17,9 +17,9 @@ module Homebrew List installed formulae that have an updated version available. By default, version information is displayed in interactive shells, and suppressed otherwise. EOS - switch :quiet, + switch "-q", "--quiet", description: "List only the names of outdated kegs (takes precedence over `--verbose`)." - switch :verbose, + switch "-v", "--verbose", description: "Include detailed version information." flag "--json", description: "Print output in JSON format. There are two versions: v1 and v2. " \ @@ -35,16 +35,16 @@ module Homebrew description: "Treat all arguments as formulae." switch "--cask", description: "Treat all arguments as casks." - switch :debug + conflicts "--quiet", "--verbose", "--json" conflicts "--formula", "--cask" end end def outdated - outdated_args.parse + args = outdated_args.parse - case json_version + case json_version(args.json) when :v1, :default # TODO: enable for next major/minor release # odeprecated "brew outdated --json#{json_version == :v1 ? "=v1" : ""}", "brew outdated --json=v2" @@ -55,7 +55,7 @@ module Homebrew outdated_casks end - puts JSON.generate(json_info(outdated)) + puts JSON.generate(json_info(outdated, args: args)) when :v2 formulae, casks = if args.formula? @@ -67,8 +67,8 @@ module Homebrew end json = { - "formulae" => json_info(formulae), - "casks" => json_info(casks), + "formulae" => json_info(formulae, args: args), + "casks" => json_info(casks, args: args), } puts JSON.generate(json) @@ -127,7 +127,7 @@ module Homebrew end end - def json_info(formulae_or_casks) + def json_info(formulae_or_casks, args:) formulae_or_casks.map do |formula_or_cask| if formula_or_cask.is_a?(Formula) f = formula_or_cask @@ -156,7 +156,7 @@ module Homebrew ($stdout.tty? || args.verbose?) && !args.quiet? end - def json_version + def json_version(version) version_hash = { nil => nil, true => :default, @@ -164,9 +164,9 @@ module Homebrew "v2" => :v2, } - raise UsageError, "invalid JSON version: #{args.json}" unless version_hash.include? args.json + raise UsageError, "invalid JSON version: #{version}" unless version_hash.include?(version) - version_hash[args.json] + version_hash[version] end def outdated_formulae diff --git a/Library/Homebrew/cmd/pin.rb b/Library/Homebrew/cmd/pin.rb index 37acaed464..a86d4a448e 100644 --- a/Library/Homebrew/cmd/pin.rb +++ b/Library/Homebrew/cmd/pin.rb @@ -14,13 +14,13 @@ module Homebrew Pin the specified , preventing them from being upgraded when issuing the `brew upgrade` command. See also `unpin`. EOS - switch :debug + min_named :formula end end def pin - pin_args.parse + args = pin_args.parse args.resolved_formulae.each do |f| if f.pinned? diff --git a/Library/Homebrew/cmd/postinstall.rb b/Library/Homebrew/cmd/postinstall.rb index 762a97eb47..e0ac1d548c 100644 --- a/Library/Homebrew/cmd/postinstall.rb +++ b/Library/Homebrew/cmd/postinstall.rb @@ -14,8 +14,7 @@ module Homebrew Rerun the post-install steps for . EOS - switch :verbose - switch :debug + min_named :keg end end diff --git a/Library/Homebrew/cmd/readall.rb b/Library/Homebrew/cmd/readall.rb index 7a8a066aaa..a4f1d47a5d 100644 --- a/Library/Homebrew/cmd/readall.rb +++ b/Library/Homebrew/cmd/readall.rb @@ -20,13 +20,11 @@ module Homebrew description: "Verify any alias symlinks in each tap." switch "--syntax", description: "Syntax-check all of Homebrew's Ruby files (if no `` is passed)." - switch :verbose - switch :debug end end def readall - readall_args.parse + args = readall_args.parse if args.syntax? && args.no_named? scan_files = "#{HOMEBREW_LIBRARY_PATH}/**/*.rb" diff --git a/Library/Homebrew/cmd/reinstall.rb b/Library/Homebrew/cmd/reinstall.rb index ea1bca1ace..e70106f114 100644 --- a/Library/Homebrew/cmd/reinstall.rb +++ b/Library/Homebrew/cmd/reinstall.rb @@ -26,7 +26,7 @@ module Homebrew Unless `HOMEBREW_NO_INSTALL_CLEANUP` is set, `brew cleanup` will then be run for the reinstalled formulae or, every 30 days, for all formulae. EOS - switch :debug, + switch "-d", "--debug", description: "If brewing fails, open an interactive debugging session with access to IRB "\ "or a shell inside the temporary build directory." switch "-s", "--build-from-source", @@ -43,7 +43,7 @@ module Homebrew switch "-f", "--force", description: "Install without checking for previously installed keg-only or "\ "non-migrated versions." - switch :verbose, + switch "-v", "--verbose", description: "Print the verification and postinstall steps." switch "--display-times", env: :display_install_times, diff --git a/Library/Homebrew/cmd/search.rb b/Library/Homebrew/cmd/search.rb index 4032e8ea07..5992c73aa5 100644 --- a/Library/Homebrew/cmd/search.rb +++ b/Library/Homebrew/cmd/search.rb @@ -51,14 +51,13 @@ module Homebrew switch s, description: "Search for in the given package manager's list." end - switch :verbose - switch :debug + conflicts(*package_manager_switches) end end def search - search_args.parse + args = search_args.parse if package_manager = PACKAGE_MANAGERS.find { |name,| args[:"#{name}?"] } _, url = package_manager diff --git a/Library/Homebrew/cmd/switch.rb b/Library/Homebrew/cmd/switch.rb index e9103565d3..06feb4badc 100644 --- a/Library/Homebrew/cmd/switch.rb +++ b/Library/Homebrew/cmd/switch.rb @@ -14,14 +14,13 @@ module Homebrew Symlink all of the specified of 's installation into Homebrew's prefix. EOS - switch :verbose - switch :debug + named 2 end end def switch - switch_args.parse + args = switch_args.parse name = args.named.first rack = Formulary.to_rack(name) diff --git a/Library/Homebrew/cmd/tap-info.rb b/Library/Homebrew/cmd/tap-info.rb index 9f3708bd1d..e7d1dbf791 100644 --- a/Library/Homebrew/cmd/tap-info.rb +++ b/Library/Homebrew/cmd/tap-info.rb @@ -20,12 +20,11 @@ module Homebrew description: "Print a JSON representation of . Currently the default and only accepted "\ "value for is `v1`. See the docs for examples of using the JSON "\ "output: " - switch :debug end end def tap_info - tap_info_args.parse + args = tap_info_args.parse taps = if args.installed? Tap diff --git a/Library/Homebrew/cmd/tap.rb b/Library/Homebrew/cmd/tap.rb index bdd396cae2..3dccb1da10 100644 --- a/Library/Homebrew/cmd/tap.rb +++ b/Library/Homebrew/cmd/tap.rb @@ -36,14 +36,13 @@ module Homebrew description: "Migrate tapped formulae from symlink-based to directory-based structure." switch "--list-pinned", description: "List all pinned taps." - switch :quiet - switch :debug + max_named 2 end end def tap - tap_args.parse + args = tap_args.parse if args.repair? Tap.each(&:link_completions_and_manpages) diff --git a/Library/Homebrew/cmd/uninstall.rb b/Library/Homebrew/cmd/uninstall.rb index bc1703acd3..be851d9e85 100644 --- a/Library/Homebrew/cmd/uninstall.rb +++ b/Library/Homebrew/cmd/uninstall.rb @@ -24,7 +24,7 @@ module Homebrew switch "--ignore-dependencies", description: "Don't fail uninstall, even if is a dependency of any installed "\ "formulae." - switch :debug + min_named :formula end end diff --git a/Library/Homebrew/cmd/unlink.rb b/Library/Homebrew/cmd/unlink.rb index 688d1bec59..e31bde919a 100644 --- a/Library/Homebrew/cmd/unlink.rb +++ b/Library/Homebrew/cmd/unlink.rb @@ -18,14 +18,13 @@ module Homebrew switch "-n", "--dry-run", description: "List files which would be unlinked without actually unlinking or "\ "deleting any files." - switch :verbose - switch :debug + min_named :keg end end def unlink - unlink_args.parse + args = unlink_args.parse mode = OpenStruct.new mode.dry_run = true if args.dry_run? diff --git a/Library/Homebrew/cmd/unpin.rb b/Library/Homebrew/cmd/unpin.rb index 4daed2ea06..0a346c967d 100644 --- a/Library/Homebrew/cmd/unpin.rb +++ b/Library/Homebrew/cmd/unpin.rb @@ -14,14 +14,13 @@ module Homebrew Unpin , allowing them to be upgraded by `brew upgrade` . See also `pin`. EOS - switch :verbose - switch :debug + min_named :formula end end def unpin - unpin_args.parse + args = unpin_args.parse args.resolved_formulae.each do |f| if f.pinned? diff --git a/Library/Homebrew/cmd/untap.rb b/Library/Homebrew/cmd/untap.rb index 7afb51c551..5209dd26c3 100644 --- a/Library/Homebrew/cmd/untap.rb +++ b/Library/Homebrew/cmd/untap.rb @@ -12,13 +12,13 @@ module Homebrew Remove a tapped formula repository. EOS - switch :debug + min_named 1 end end def untap - untap_args.parse + args = untap_args.parse args.named.each do |tapname| tap = Tap.fetch(tapname) diff --git a/Library/Homebrew/cmd/update-report.rb b/Library/Homebrew/cmd/update-report.rb index abe5cc1c75..260db68b59 100644 --- a/Library/Homebrew/cmd/update-report.rb +++ b/Library/Homebrew/cmd/update-report.rb @@ -30,9 +30,7 @@ module Homebrew switch "-f", "--force", description: "Treat installed and updated formulae as if they are from "\ "the same taps and migrate them anyway." - switch :quiet - switch :verbose - switch :debug + hide_from_man_page! end end diff --git a/Library/Homebrew/cmd/upgrade.rb b/Library/Homebrew/cmd/upgrade.rb index aa1a4c51e7..aeaac8669b 100644 --- a/Library/Homebrew/cmd/upgrade.rb +++ b/Library/Homebrew/cmd/upgrade.rb @@ -23,7 +23,7 @@ module Homebrew Unless `HOMEBREW_NO_INSTALL_CLEANUP` is set, `brew cleanup` will then be run for the upgraded formulae or, every 30 days, for all formulae. EOS - switch :debug, + switch "-d", "--debug", description: "If brewing fails, open an interactive debugging session with access to IRB "\ "or a shell inside the temporary build directory." switch "-s", "--build-from-source", @@ -46,7 +46,7 @@ module Homebrew switch "-f", "--force", description: "Install without checking for previously installed keg-only or "\ "non-migrated versions." - switch :verbose, + switch "-v", "--verbose", description: "Print the verification and postinstall steps." switch "--display-times", env: :display_install_times, @@ -71,7 +71,7 @@ module Homebrew named_casks_specified = !casks.empty? && formulae.empty? upgrade_outdated_formulae(formulae, args: args) unless named_casks_specified - upgrade_outdated_casks(casks) unless named_formulae_specified + upgrade_outdated_casks(casks, args: args) unless named_formulae_specified end def upgrade_outdated_formulae(formulae, args:) @@ -132,7 +132,7 @@ module Homebrew Homebrew.messages.display_messages(display_times: args.display_times?) end - def upgrade_outdated_casks(casks) + def upgrade_outdated_casks(casks, args:) cask_upgrade = Cask::Cmd::Upgrade.new(casks) cask_upgrade.force = args.force? cask_upgrade.dry_run = args.dry_run? diff --git a/Library/Homebrew/cmd/uses.rb b/Library/Homebrew/cmd/uses.rb index db8a89c20d..ceda3f9784 100644 --- a/Library/Homebrew/cmd/uses.rb +++ b/Library/Homebrew/cmd/uses.rb @@ -38,14 +38,14 @@ module Homebrew description: "Show usage of by development builds." switch "--HEAD", description: "Show usage of by HEAD builds." - switch :debug + conflicts "--devel", "--HEAD" min_named :formula end end def uses - uses_args.parse + args = uses_args.parse odeprecated "brew uses --devel" if args.devel? odeprecated "brew uses --HEAD" if args.HEAD? diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index 0c4568cd94..c1e3ca5dbe 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -61,8 +61,7 @@ module Homebrew comma_array "--except-cops", description: "Specify a comma-separated list to skip checking for violations of the listed "\ "RuboCop cops." - switch :verbose - switch :debug + conflicts "--only", "--except" conflicts "--only-cops", "--except-cops", "--strict" conflicts "--only-cops", "--except-cops", "--only" diff --git a/Library/Homebrew/dev-cmd/bottle.rb b/Library/Homebrew/dev-cmd/bottle.rb index 32cd4e2c6b..6fe8dcb0ef 100644 --- a/Library/Homebrew/dev-cmd/bottle.rb +++ b/Library/Homebrew/dev-cmd/bottle.rb @@ -76,15 +76,14 @@ module Homebrew "to the formula file." flag "--root-url=", description: "Use the specified as the root of the bottle's URL instead of Homebrew's default." - switch :verbose - switch :debug + conflicts "--no-rebuild", "--keep-old" min_named 1 end end def bottle - bottle_args.parse + args = bottle_args.parse return merge if args.merge? diff --git a/Library/Homebrew/dev-cmd/bump-formula-pr.rb b/Library/Homebrew/dev-cmd/bump-formula-pr.rb index 0e8144dee6..ba3cc5a40a 100644 --- a/Library/Homebrew/dev-cmd/bump-formula-pr.rb +++ b/Library/Homebrew/dev-cmd/bump-formula-pr.rb @@ -65,9 +65,7 @@ module Homebrew description: "Specify the new git commit corresponding to the specified ." switch "-f", "--force", description: "Ignore duplicate open PRs. Remove all mirrors if --mirror= was not specified." - switch :quiet - switch :verbose - switch :debug + conflicts "--no-audit", "--strict" conflicts "--url", "--tag" max_named 1 @@ -111,7 +109,7 @@ module Homebrew end def bump_formula_pr - bump_formula_pr_args.parse + args = bump_formula_pr_args.parse # As this command is simplifying user-run commands then let's just use a # user path, too. diff --git a/Library/Homebrew/dev-cmd/bump-revision.rb b/Library/Homebrew/dev-cmd/bump-revision.rb index 9a14d661a5..2b71a91d7f 100644 --- a/Library/Homebrew/dev-cmd/bump-revision.rb +++ b/Library/Homebrew/dev-cmd/bump-revision.rb @@ -18,9 +18,7 @@ module Homebrew description: "Print what would be done rather than doing it." flag "--message=", description: "Append to the default commit message." - switch :quiet - switch :verbose - switch :debug + named :formula end end diff --git a/Library/Homebrew/dev-cmd/cat.rb b/Library/Homebrew/dev-cmd/cat.rb index 3bec5c5d99..1c3ee81176 100644 --- a/Library/Homebrew/dev-cmd/cat.rb +++ b/Library/Homebrew/dev-cmd/cat.rb @@ -17,7 +17,7 @@ module Homebrew end def cat - cat_args.parse + args = cat_args.parse cd HOMEBREW_REPOSITORY pager = if Homebrew::EnvConfig.bat? @@ -26,6 +26,6 @@ module Homebrew else "cat" end - safe_system pager, args.formulae_paths.first, *args.passthrough + safe_system pager, args.formulae_paths.first end end diff --git a/Library/Homebrew/dev-cmd/command.rb b/Library/Homebrew/dev-cmd/command.rb index e7c686288d..cb928bc577 100644 --- a/Library/Homebrew/dev-cmd/command.rb +++ b/Library/Homebrew/dev-cmd/command.rb @@ -13,14 +13,13 @@ module Homebrew Display the path to the file being used when invoking `brew` . EOS - switch :verbose - switch :debug + min_named 1 end end def command - command_args.parse + args = command_args.parse args.named.each do |cmd| path = Commands.path(cmd) diff --git a/Library/Homebrew/dev-cmd/create.rb b/Library/Homebrew/dev-cmd/create.rb index d659bf5bdb..85b2f857e7 100644 --- a/Library/Homebrew/dev-cmd/create.rb +++ b/Library/Homebrew/dev-cmd/create.rb @@ -56,8 +56,7 @@ module Homebrew description: "Generate the new formula within the given tap, specified as `/`." switch "-f", "--force", description: "Ignore errors for disallowed formula names and named that shadow aliases." - switch :verbose - switch :debug + conflicts "--autotools", "--cmake", "--crystal", "--go", "--meson", "--node", "--perl", "--python", "--rust" named 1 end diff --git a/Library/Homebrew/dev-cmd/diy.rb b/Library/Homebrew/dev-cmd/diy.rb index 51a7ff4c26..f58ae2fa9c 100644 --- a/Library/Homebrew/dev-cmd/diy.rb +++ b/Library/Homebrew/dev-cmd/diy.rb @@ -19,14 +19,13 @@ module Homebrew description: "Explicitly set the of the package being installed." flag "--version=", description: "Explicitly set the of the package being installed." - switch :verbose - switch :debug + max_named 0 end end def diy - diy_args.parse + args = diy_args.parse path = Pathname.getwd diff --git a/Library/Homebrew/dev-cmd/edit.rb b/Library/Homebrew/dev-cmd/edit.rb index 25ee7cc91f..7b23a6a20a 100644 --- a/Library/Homebrew/dev-cmd/edit.rb +++ b/Library/Homebrew/dev-cmd/edit.rb @@ -14,13 +14,11 @@ module Homebrew Open in the editor set by `EDITOR` or `HOMEBREW_EDITOR`, or open the Homebrew repository for editing if no formula is provided. EOS - switch :verbose - switch :debug end end def edit - edit_args.parse + args = edit_args.parse unless (HOMEBREW_REPOSITORY/".git").directory? raise <<~EOS diff --git a/Library/Homebrew/dev-cmd/extract.rb b/Library/Homebrew/dev-cmd/extract.rb index 7bc6e9e322..9eb432a17c 100644 --- a/Library/Homebrew/dev-cmd/extract.rb +++ b/Library/Homebrew/dev-cmd/extract.rb @@ -91,13 +91,13 @@ module Homebrew description: "Extract the specified of instead of the most recent." switch "-f", "--force", description: "Overwrite the destination formula if it already exists." - switch :debug + named 2 end end def extract - extract_args.parse + args = extract_args.parse if args.named.first !~ HOMEBREW_TAP_FORMULA_REGEX name = args.named.first.downcase diff --git a/Library/Homebrew/dev-cmd/formula.rb b/Library/Homebrew/dev-cmd/formula.rb index 8a782ee4e8..664db4c5e0 100644 --- a/Library/Homebrew/dev-cmd/formula.rb +++ b/Library/Homebrew/dev-cmd/formula.rb @@ -13,14 +13,13 @@ module Homebrew Display the path where is located. EOS - switch :verbose - switch :debug + min_named :formula end end def formula - formula_args.parse + args = formula_args.parse args.formulae_paths.each(&method(:puts)) end diff --git a/Library/Homebrew/dev-cmd/install-bundler-gems.rb b/Library/Homebrew/dev-cmd/install-bundler-gems.rb index 66aeb1087d..20ba27eb71 100644 --- a/Library/Homebrew/dev-cmd/install-bundler-gems.rb +++ b/Library/Homebrew/dev-cmd/install-bundler-gems.rb @@ -13,7 +13,7 @@ module Homebrew Install Homebrew's Bundler gems. EOS - switch :debug + max_named 0 end end diff --git a/Library/Homebrew/dev-cmd/irb.rb b/Library/Homebrew/dev-cmd/irb.rb index e748e6fa19..2f1976e61d 100644 --- a/Library/Homebrew/dev-cmd/irb.rb +++ b/Library/Homebrew/dev-cmd/irb.rb @@ -19,7 +19,7 @@ module Homebrew def irb_args # work around IRB modifying ARGV. - Homebrew::CLI::Parser.new(ARGV.dup.freeze) do + Homebrew::CLI::Parser.new do usage_banner <<~EOS `irb` [] @@ -34,7 +34,7 @@ module Homebrew end def irb - irb_args.parse + args = irb_args.parse if args.examples? puts "'v8'.f # => instance of the v8 formula" @@ -56,6 +56,8 @@ module Homebrew require "keg" require "cask/all" + puts ARGV.inspect + ohai "Interactive Homebrew Shell" puts "Example commands available with: brew irb --examples" if args.pry? diff --git a/Library/Homebrew/dev-cmd/linkage.rb b/Library/Homebrew/dev-cmd/linkage.rb index ddd542c94d..47258dfab1 100644 --- a/Library/Homebrew/dev-cmd/linkage.rb +++ b/Library/Homebrew/dev-cmd/linkage.rb @@ -24,13 +24,11 @@ module Homebrew switch "--cached", description: "Print the cached linkage values stored in `HOMEBREW_CACHE`, set by a previous "\ "`brew linkage` run." - switch :verbose - switch :debug end end def linkage - linkage_args.parse + args = linkage_args.parse CacheStoreDatabase.use(:linkage) do |db| kegs = if args.kegs.empty? diff --git a/Library/Homebrew/dev-cmd/man.rb b/Library/Homebrew/dev-cmd/man.rb index 92f1a88599..295424fd52 100644 --- a/Library/Homebrew/dev-cmd/man.rb +++ b/Library/Homebrew/dev-cmd/man.rb @@ -169,7 +169,7 @@ module Homebrew def cmd_parser_manpage_lines(cmd_parser) lines = [format_usage_banner(cmd_parser.usage_banner_text)] lines += cmd_parser.processed_options.map do |short, long, _, desc| - next if !long.nil? && cmd_parser.global_option?(cmd_parser.option_to_name(long), desc) + next if !long.nil? && Homebrew::CLI::Parser.global_options.include?([short, long, desc]) generate_option_doc(short, long, desc) end.reject(&:blank?) @@ -191,7 +191,7 @@ module Homebrew end # Omit the common global_options documented separately in the man page. - next if line.match?(/--(debug|force|help|quiet|verbose) /) + next if line.match?(/--(debug|help|quiet|verbose) /) # Format one option or a comma-separated pair of short and long options. lines << line.gsub(/^ +(-+[a-z-]+), (-+[a-z-]+) +/, "* `\\1`, `\\2`:\n ") @@ -203,8 +203,7 @@ module Homebrew def global_options_manpage lines = ["These options are applicable across multiple subcommands.\n"] - lines += Homebrew::CLI::Parser.global_options.values.map do |names, _, desc| - short, long = names + lines += Homebrew::CLI::Parser.global_options.map do |short, long, desc| generate_option_doc(short, long, desc) end lines.join("\n") diff --git a/Library/Homebrew/dev-cmd/mirror.rb b/Library/Homebrew/dev-cmd/mirror.rb index 851ad476a9..832707227a 100644 --- a/Library/Homebrew/dev-cmd/mirror.rb +++ b/Library/Homebrew/dev-cmd/mirror.rb @@ -19,8 +19,7 @@ module Homebrew description: "Upload to the specified Bintray repository (default: `mirror`)." switch "--no-publish", description: "Upload to Bintray, but don't publish." - switch :verbose - switch :debug + hide_from_man_page! min_named :formula end diff --git a/Library/Homebrew/dev-cmd/pr-automerge.rb b/Library/Homebrew/dev-cmd/pr-automerge.rb index 62c6db0395..24ed7f5d3d 100644 --- a/Library/Homebrew/dev-cmd/pr-automerge.rb +++ b/Library/Homebrew/dev-cmd/pr-automerge.rb @@ -25,8 +25,7 @@ module Homebrew description: "Run `brew pr-publish` on matching pull requests." switch "--ignore-failures", description: "Include pull requests that have failing status checks." - switch :verbose - switch :debug + max_named 0 end end diff --git a/Library/Homebrew/dev-cmd/pr-publish.rb b/Library/Homebrew/dev-cmd/pr-publish.rb index 68177b0c13..741a8ec011 100644 --- a/Library/Homebrew/dev-cmd/pr-publish.rb +++ b/Library/Homebrew/dev-cmd/pr-publish.rb @@ -18,13 +18,13 @@ module Homebrew description: "Target tap repository (default: `homebrew/core`)." flag "--workflow=", description: "Target workflow filename (default: `publish-commit-bottles.yml`)." - switch :verbose + min_named 1 end end def pr_publish - pr_publish_args.parse + args = pr_publish_args.parse tap = Tap.fetch(Homebrew.args.tap || CoreTap.instance.name) workflow = Homebrew.args.workflow || "publish-commit-bottles.yml" diff --git a/Library/Homebrew/dev-cmd/pr-pull.rb b/Library/Homebrew/dev-cmd/pr-pull.rb index 6a672e4119..ab2a23ebdf 100644 --- a/Library/Homebrew/dev-cmd/pr-pull.rb +++ b/Library/Homebrew/dev-cmd/pr-pull.rb @@ -49,8 +49,7 @@ module Homebrew flag "--bintray-mirror=", description: "Use the specified Bintray repository to automatically mirror stable URLs "\ "defined in the formulae (default: `mirror`)." - switch :verbose - switch :debug + min_named 1 end end diff --git a/Library/Homebrew/dev-cmd/pr-upload.rb b/Library/Homebrew/dev-cmd/pr-upload.rb index 64cae02ea4..aa83627f63 100644 --- a/Library/Homebrew/dev-cmd/pr-upload.rb +++ b/Library/Homebrew/dev-cmd/pr-upload.rb @@ -27,8 +27,6 @@ module Homebrew description: "Upload to the specified Bintray organisation (default: `homebrew`)." flag "--root-url=", description: "Use the specified as the root of the bottle's URL instead of Homebrew's default." - switch :verbose - switch :debug end end diff --git a/Library/Homebrew/dev-cmd/pull.rb b/Library/Homebrew/dev-cmd/pull.rb index 19318c24e9..d35a42641a 100644 --- a/Library/Homebrew/dev-cmd/pull.rb +++ b/Library/Homebrew/dev-cmd/pull.rb @@ -37,8 +37,7 @@ module Homebrew description: "Do not warn if pulling to a branch besides master (useful for testing)." switch "--no-pbcopy", description: "Do not copy anything to the system clipboard." - switch :verbose - switch :debug + min_named 1 end end @@ -48,7 +47,7 @@ module Homebrew odie "You meant `git pull --rebase`." if ARGV[0] == "--rebase" - pull_args.parse + args = pull_args.parse # Passthrough Git environment variables for e.g. git am Utils.set_git_name_email!(author: false, committer: true) diff --git a/Library/Homebrew/dev-cmd/release-notes.rb b/Library/Homebrew/dev-cmd/release-notes.rb index fa537cf096..76266028c3 100644 --- a/Library/Homebrew/dev-cmd/release-notes.rb +++ b/Library/Homebrew/dev-cmd/release-notes.rb @@ -21,7 +21,7 @@ module Homebrew end def release_notes - release_notes_args.parse + args = release_notes_args.parse previous_tag = args.named.first previous_tag ||= Utils.popen_read( diff --git a/Library/Homebrew/dev-cmd/ruby.rb b/Library/Homebrew/dev-cmd/ruby.rb index 735fdb7c9a..1c2f3239ea 100644 --- a/Library/Homebrew/dev-cmd/ruby.rb +++ b/Library/Homebrew/dev-cmd/ruby.rb @@ -17,8 +17,6 @@ module Homebrew description: "Load a library using `require`." switch "-e", description: "Execute the given text string as a script." - switch :verbose - switch :debug end end diff --git a/Library/Homebrew/dev-cmd/sh.rb b/Library/Homebrew/dev-cmd/sh.rb index e44a617fcc..5247cbea66 100644 --- a/Library/Homebrew/dev-cmd/sh.rb +++ b/Library/Homebrew/dev-cmd/sh.rb @@ -20,8 +20,7 @@ module Homebrew EOS flag "--env=", description: "Use the standard `PATH` instead of superenv's when `std` is passed." - switch :verbose - switch :debug + max_named 0 end end diff --git a/Library/Homebrew/dev-cmd/style.rb b/Library/Homebrew/dev-cmd/style.rb index a38f5b2363..7bb6fe8e75 100644 --- a/Library/Homebrew/dev-cmd/style.rb +++ b/Library/Homebrew/dev-cmd/style.rb @@ -29,14 +29,13 @@ module Homebrew comma_array "--except-cops", description: "Specify a comma-separated list to skip checking for violations of the "\ "listed RuboCop cops." - switch :verbose - switch :debug + conflicts "--only-cops", "--except-cops" end end def style - style_args.parse + args = style_args.parse target = if args.no_named? nil diff --git a/Library/Homebrew/dev-cmd/tap-new.rb b/Library/Homebrew/dev-cmd/tap-new.rb index 2e75d05515..3506e55dbe 100644 --- a/Library/Homebrew/dev-cmd/tap-new.rb +++ b/Library/Homebrew/dev-cmd/tap-new.rb @@ -13,14 +13,13 @@ module Homebrew Generate the template files for a new tap. EOS - switch :verbose - switch :debug + named 1 end end def tap_new - tap_new_args.parse + args = tap_new_args.parse tap_name = args.named.first tap = Tap.fetch(args.named.first) diff --git a/Library/Homebrew/dev-cmd/test.rb b/Library/Homebrew/dev-cmd/test.rb index 0a2e5b452c..dca26921ed 100644 --- a/Library/Homebrew/dev-cmd/test.rb +++ b/Library/Homebrew/dev-cmd/test.rb @@ -27,15 +27,14 @@ module Homebrew description: "Retain the temporary files created for the test." switch "--retry", description: "Retry if a testing fails." - switch :verbose - switch :debug + conflicts "--devel", "--HEAD" min_named :formula end end def test - test_args.parse + args = test_args.parse require "formula_assertions" require "formula_free_port" diff --git a/Library/Homebrew/dev-cmd/tests.rb b/Library/Homebrew/dev-cmd/tests.rb index e2facbfa5b..8025ffda3e 100644 --- a/Library/Homebrew/dev-cmd/tests.rb +++ b/Library/Homebrew/dev-cmd/tests.rb @@ -29,14 +29,13 @@ module Homebrew "specific line." flag "--seed=", description: "Randomise tests with the specified instead of a random seed." - switch :verbose - switch :debug + max_named 0 end end def tests - tests_args.parse + args = tests_args.parse Homebrew.install_bundler_gems! gem_user_dir = Gem.user_dir diff --git a/Library/Homebrew/dev-cmd/unpack.rb b/Library/Homebrew/dev-cmd/unpack.rb index 1f1360bc25..2fa824d422 100644 --- a/Library/Homebrew/dev-cmd/unpack.rb +++ b/Library/Homebrew/dev-cmd/unpack.rb @@ -24,15 +24,14 @@ module Homebrew "patches for the software." switch "-f", "--force", description: "Overwrite the destination directory if it already exists." - switch :verbose - switch :debug + conflicts "--git", "--patch" min_named :formula end end def unpack - unpack_args.parse + args = unpack_args.parse formulae = args.formulae diff --git a/Library/Homebrew/dev-cmd/update-license-data.rb b/Library/Homebrew/dev-cmd/update-license-data.rb index 456a7b38ec..40584b3b4b 100644 --- a/Library/Homebrew/dev-cmd/update-license-data.rb +++ b/Library/Homebrew/dev-cmd/update-license-data.rb @@ -26,7 +26,7 @@ module Homebrew end def update_license_data - update_license_data_args.parse + args = update_license_data_args.parse ohai "Updating SPDX license data..." latest_tag = GitHub.open_api(SPDX_API_URL)["tag_name"] diff --git a/Library/Homebrew/dev-cmd/update-test.rb b/Library/Homebrew/dev-cmd/update-test.rb index fdf208dd49..d05f445ea5 100644 --- a/Library/Homebrew/dev-cmd/update-test.rb +++ b/Library/Homebrew/dev-cmd/update-test.rb @@ -21,14 +21,13 @@ module Homebrew description: "Use the specified as the start commit." flag "--before=", description: "Use the commit at the specified as the start commit." - switch :verbose - switch :debug + max_named 0 end end def update_test - update_test_args.parse + args = update_test_args.parse ENV["HOMEBREW_UPDATE_TEST"] = "1" diff --git a/Library/Homebrew/dev-cmd/vendor-gems.rb b/Library/Homebrew/dev-cmd/vendor-gems.rb index 428223e38a..d702e7df69 100644 --- a/Library/Homebrew/dev-cmd/vendor-gems.rb +++ b/Library/Homebrew/dev-cmd/vendor-gems.rb @@ -13,7 +13,7 @@ module Homebrew Install and commit Homebrew's vendored gems. EOS - switch :debug + max_named 0 end end diff --git a/Library/Homebrew/help.rb b/Library/Homebrew/help.rb index 57196edf7c..d868c9c828 100644 --- a/Library/Homebrew/help.rb +++ b/Library/Homebrew/help.rb @@ -40,30 +40,30 @@ module Homebrew module Help module_function - def help(cmd = nil, flags = {}) - # Resolve command aliases and find file containing the implementation. - path = Commands.path(cmd) if cmd - - # Display command-specific (or generic) help in response to `UsageError`. - if (error_message = flags[:usage_error]) - $stderr.puts path ? command_help(cmd, path) : HOMEBREW_HELP - $stderr.puts - onoe error_message - exit 1 - end - - # Handle `brew` (no arguments). - if flags[:empty_argv] - $stderr.puts HOMEBREW_HELP - exit 1 - end - - # Handle `brew (-h|--help|--usage|-?|help)` (no other arguments). + def help(cmd = nil, empty_argv: false, usage_error: nil) if cmd.nil? + # Handle `brew` (no arguments). + if empty_argv + $stderr.puts HOMEBREW_HELP + exit 1 + end + + # Handle `brew (-h|--help|--usage|-?|help)` (no other arguments). puts HOMEBREW_HELP exit 0 end + # Resolve command aliases and find file containing the implementation. + path = Commands.path(cmd) + + # Display command-specific (or generic) help in response to `UsageError`. + if usage_error + $stderr.puts path ? command_help(cmd, path) : HOMEBREW_HELP + $stderr.puts + onoe usage_error + exit 1 + end + # Resume execution in `brew.rb` for unknown commands. return if path.nil? diff --git a/Library/Homebrew/test/cli/parser_spec.rb b/Library/Homebrew/test/cli/parser_spec.rb index 0c3a90084d..a54a3d4c43 100644 --- a/Library/Homebrew/test/cli/parser_spec.rb +++ b/Library/Homebrew/test/cli/parser_spec.rb @@ -6,7 +6,6 @@ describe Homebrew::CLI::Parser do describe "test switch options" do subject(:parser) { described_class.new do - switch :verbose, description: "Flag for verbosity" switch "--more-verbose", description: "Flag for higher verbosity" switch "--pry", env: :pry end @@ -17,26 +16,25 @@ describe Homebrew::CLI::Parser do end it "parses short option" do - parser.parse(["-v"]) - expect(Homebrew.args).to be_verbose + args = parser.parse(["-v"]) + expect(args).to be_verbose end it "parses a single valid option" do - parser.parse(["--verbose"]) - expect(Homebrew.args).to be_verbose + args = parser.parse(["--verbose"]) + expect(args).to be_verbose end it "parses a valid option along with few unnamed args" do - args = %w[--verbose unnamed args] - parser.parse(args) - expect(Homebrew.args).to be_verbose - expect(args).to eq %w[--verbose unnamed args] + args = parser.parse(%w[--verbose unnamed args]) + expect(args).to be_verbose + expect(args.named).to eq %w[unnamed args] end it "parses a single option and checks other options to be nil" do - parser.parse(["--verbose"]) - expect(Homebrew.args).to be_verbose - expect(Homebrew.args.more_verbose?).to be nil + args = parser.parse(["--verbose"]) + expect(args).to be_verbose + expect(args.more_verbose?).to be nil end it "raises an exception and outputs help text when an invalid option is passed" do @@ -45,13 +43,8 @@ describe Homebrew::CLI::Parser do end it "maps environment var to an option" do - parser.parse([]) - expect(Homebrew.args.pry?).to be true - end - - it ":verbose with custom description" do - _, _, _, desc = parser.processed_options.find { |short, _| short == "-v" } - expect(desc).to eq "Flag for verbosity" + args = parser.parse([]) + expect(args.pry?).to be true end end @@ -64,8 +57,8 @@ describe Homebrew::CLI::Parser do } it "parses a long flag option with its argument" do - parser.parse(["--filename=random.txt"]) - expect(Homebrew.args.filename).to eq "random.txt" + args = parser.parse(["--filename=random.txt"]) + expect(args.filename).to eq "random.txt" end it "raises an exception when a flag's required value is not passed" do @@ -73,8 +66,8 @@ describe Homebrew::CLI::Parser do end it "parses a comma array flag option" do - parser.parse(["--files=random1.txt,random2.txt"]) - expect(Homebrew.args.files).to eq %w[random1.txt random2.txt] + args = parser.parse(["--files=random1.txt,random2.txt"]) + expect(args.files).to eq %w[random1.txt random2.txt] end end @@ -86,9 +79,9 @@ describe Homebrew::CLI::Parser do } it "parses a short flag option with its argument" do - parser.parse(["--filename=random.txt"]) - expect(Homebrew.args.filename).to eq "random.txt" - expect(Homebrew.args.f).to eq "random.txt" + args = parser.parse(["--filename=random.txt"]) + expect(args.filename).to eq "random.txt" + expect(args.f).to eq "random.txt" end end @@ -118,14 +111,14 @@ describe Homebrew::CLI::Parser do end it "raises no exception" do - parser.parse(["--flag1=flag1", "--flag2=flag2"]) - expect(Homebrew.args.flag1).to eq "flag1" - expect(Homebrew.args.flag2).to eq "flag2" + args = parser.parse(["--flag1=flag1", "--flag2=flag2"]) + expect(args.flag1).to eq "flag1" + expect(args.flag2).to eq "flag2" end it "raises no exception for optional dependency" do - parser.parse(["--flag3=flag3"]) - expect(Homebrew.args.flag3).to eq "flag3" + args = parser.parse(["--flag3=flag3"]) + expect(args.flag3).to eq "flag3" end end @@ -169,22 +162,22 @@ describe Homebrew::CLI::Parser do end it "raises no exception" do - parser.parse(["--switch-a", "--switch-c"]) - expect(Homebrew.args.switch_a?).to be true - expect(Homebrew.args.switch_c?).to be true + args = parser.parse(["--switch-a", "--switch-c"]) + expect(args.switch_a?).to be true + expect(args.switch_c?).to be true end it "raises no exception for optional dependency" do - parser.parse(["--switch-b"]) - expect(Homebrew.args.switch_b?).to be true + args = parser.parse(["--switch-b"]) + expect(args.switch_b?).to be true end it "prioritizes cli arguments over env vars when they conflict" do allow(Homebrew::EnvConfig).to receive(:switch_a?).and_return(true) allow(Homebrew::EnvConfig).to receive(:switch_b?).and_return(false) - parser.parse(["--switch-b"]) - expect(Homebrew.args.switch_a).to be_falsy - expect(Homebrew.args).to be_switch_b + args = parser.parse(["--switch-b"]) + expect(args.switch_a).to be_falsy + expect(args).to be_switch_b end it "raises an exception on constraint violation when both are env vars" do @@ -214,38 +207,32 @@ describe Homebrew::CLI::Parser do switch "--foo" flag "--bar" switch "-s" - switch :verbose end } it "#options_only" do - parser.parse(["--foo", "--bar=value", "-v", "-s", "a", "b", "cdefg"]) - expect(Homebrew.args.options_only).to eq %w[--foo --bar=value -s --verbose] + args = parser.parse(["--foo", "--bar=value", "-v", "-s", "a", "b", "cdefg"]) + expect(args.options_only).to eq %w[--verbose --foo --bar=value -s] end it "#flags_only" do - parser.parse(["--foo", "--bar=value", "-v", "-s", "a", "b", "cdefg"]) - expect(Homebrew.args.flags_only).to eq %w[--foo --bar=value --verbose] - end - - it "#passthrough" do - parser.parse(["--foo", "--bar=value", "-v", "-s", "a", "b", "cdefg"]) - expect(Homebrew.args.passthrough).to eq %w[--foo --bar=value -s] + args = parser.parse(["--foo", "--bar=value", "-v", "-s", "a", "b", "cdefg"]) + expect(args.flags_only).to eq %w[--verbose --foo --bar=value] end it "#formulae raises an error when a Formula is unavailable" do - parser.parse(["mxcl"]) - expect { Homebrew.args.formulae }.to raise_error FormulaUnavailableError + args = parser.parse(["mxcl"]) + expect { args.formulae }.to raise_error FormulaUnavailableError end it "#formulae returns an empty array when there are no Formulae" do - parser.parse([]) - expect(Homebrew.args.formulae).to be_empty + args = parser.parse([]) + expect(args.formulae).to be_empty end it "#casks returns an empty array when there are no matching casks" do - parser.parse([]) - expect(Homebrew.args.casks).to eq [] + args = parser.parse([]) + expect(args.casks).to eq [] end context "kegs" do @@ -255,24 +242,24 @@ describe Homebrew::CLI::Parser do end it "when there are matching kegs returns an array of Kegs" do - parser.parse(["mxcl"]) - expect(Homebrew.args.kegs.length).to eq 1 + args = parser.parse(["mxcl"]) + expect(args.kegs.length).to eq 1 end it "when there are no matching kegs returns an array of Kegs" do - parser.parse([]) - expect(Homebrew.args.kegs).to be_empty + args = parser.parse([]) + expect(args.kegs).to be_empty end end it "#named returns an array of non-option arguments" do - parser.parse(["foo", "-v", "-s"]) - expect(Homebrew.args.named).to eq ["foo"] + args = parser.parse(["foo", "-v", "-s"]) + expect(args.named).to eq ["foo"] end it "#named returns an empty array when there are no named arguments" do - parser.parse([]) - expect(Homebrew.args.named).to be_empty + args = parser.parse([]) + expect(args.named).to be_empty end end end diff --git a/Library/Homebrew/test/cmd/shared_examples/args_parse.rb b/Library/Homebrew/test/cmd/shared_examples/args_parse.rb index c9e8cc1d80..d8b7873b80 100644 --- a/Library/Homebrew/test/cmd/shared_examples/args_parse.rb +++ b/Library/Homebrew/test/cmd/shared_examples/args_parse.rb @@ -14,7 +14,8 @@ shared_examples "parseable arguments" do it "can parse arguments" do require "dev-cmd/#{command_name}" unless require? "cmd/#{command_name}" - expect { Homebrew.send(method_name).parse({}, allow_no_named_args: true) } - .not_to raise_error + parser = Homebrew.public_send(method_name) + + expect(parser).to respond_to(:parse) end end diff --git a/Library/Homebrew/test/formula_installer_bottle_spec.rb b/Library/Homebrew/test/formula_installer_bottle_spec.rb index 87842ff27b..0a6aec0f0b 100644 --- a/Library/Homebrew/test/formula_installer_bottle_spec.rb +++ b/Library/Homebrew/test/formula_installer_bottle_spec.rb @@ -50,7 +50,7 @@ describe FormulaInstaller do specify "basic bottle install" do allow(DevelopmentTools).to receive(:installed?).and_return(false) - Homebrew.install_args.parse("testball_bottle") + Homebrew.install_args.parse(["testball_bottle"]) temporarily_install_bottle(TestballBottle.new) do |f| # Copied directly from formula_installer_spec.rb # as we expect the same behavior. diff --git a/docs/Manpage.md b/docs/Manpage.md index aa331bfb4c..0a82a3a035 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -525,6 +525,8 @@ Fetch the newest version of Homebrew and all formulae from GitHub using `git`(1) Use `git merge` to apply updates (rather than `git rebase`). * `--preinstall`: Run on auto-updates (e.g. before `brew install`). Skips some slower steps. +* `-f`, `--force`: + Always do a slower, full update check (even if unnecessary). ### `update-reset` [*`repository`*] @@ -1190,8 +1192,6 @@ flags which will help find keg-only dependencies like `openssl`, `icu4c`, etc. Read the `Brewfile` from this location. Use `--file=-` to pipe to stdin/stdout. * `--global`: Read the `Brewfile` from `~/.Brewfile`. -* `-v`, `--verbose`: - `install` prints output from commands as they are run. `check` lists all missing dependencies. * `--no-upgrade`: `install` won't run `brew upgrade` on outdated dependencies. Note they may still be upgraded by `brew install` if needed. * `-f`, `--force`: diff --git a/manpages/brew.1 b/manpages/brew.1 index 52aa949546..ca4926fff2 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -682,6 +682,10 @@ Use \fBgit merge\fR to apply updates (rather than \fBgit rebase\fR)\. \fB\-\-preinstall\fR Run on auto\-updates (e\.g\. before \fBbrew install\fR)\. Skips some slower steps\. . +.TP +\fB\-f\fR, \fB\-\-force\fR +Always do a slower, full update check (even if unnecessary)\. +. .SS "\fBupdate\-reset\fR [\fIrepository\fR]" Fetch and reset Homebrew and all tap repositories (or any specified \fIrepository\fR) using \fBgit\fR(1) to their latest \fBorigin/master\fR\. . @@ -1535,10 +1539,6 @@ Read the \fBBrewfile\fR from this location\. Use \fB\-\-file=\-\fR to pipe to st Read the \fBBrewfile\fR from \fB~/\.Brewfile\fR\. . .TP -\fB\-v\fR, \fB\-\-verbose\fR -\fBinstall\fR prints output from commands as they are run\. \fBcheck\fR lists all missing dependencies\. -. -.TP \fB\-\-no\-upgrade\fR \fBinstall\fR won\'t run \fBbrew upgrade\fR on outdated dependencies\. Note they may still be upgraded by \fBbrew install\fR if needed\. . From 4381c32524c999fd7de308ef775c66b4f056497d Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 31 Jul 2020 15:07:08 +0200 Subject: [PATCH 11/44] Add test for parsing with `ignore_invalid_options`. --- Library/Homebrew/cli/args.rb | 6 ++++++ Library/Homebrew/cli/parser.rb | 13 ++++++++++--- Library/Homebrew/test/cli/parser_spec.rb | 8 ++++++++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/cli/args.rb b/Library/Homebrew/cli/args.rb index a959790afb..21231160bb 100644 --- a/Library/Homebrew/cli/args.rb +++ b/Library/Homebrew/cli/args.rb @@ -20,6 +20,7 @@ module Homebrew # Can set these because they will be overwritten by freeze_named_args! # (whereas other values below will only be overwritten if passed). self[:named_args] = argv.reject { |arg| arg.start_with?("-") } + self[:remaining] = [] # Set values needed before Parser#parse has been run. return unless set_default_args @@ -32,6 +33,11 @@ module Homebrew self[:universal?] = argv.include?("--universal") end + def freeze_remaining_args!(remaining_args) + self[:remaining] = remaining_args + self[:remaining].freeze + end + def freeze_named_args!(named_args) # Reset cache values reliant on named_args @formulae = nil diff --git a/Library/Homebrew/cli/parser.rb b/Library/Homebrew/cli/parser.rb index 5e03c5c81a..2e07925421 100644 --- a/Library/Homebrew/cli/parser.rb +++ b/Library/Homebrew/cli/parser.rb @@ -156,9 +156,7 @@ module Homebrew @parser.to_s end - def parse(argv = @argv, ignore_invalid_options: false) - raise "Arguments were already parsed!" if @args_parsed - + def parse_remaining(argv, ignore_invalid_options: false) i = 0 remaining = [] @@ -189,6 +187,14 @@ module Homebrew i += 1 end + [remaining, non_options] + end + + def parse(argv = @argv, ignore_invalid_options: false) + raise "Arguments were already parsed!" if @args_parsed + + remaining, non_options = parse_remaining(argv, ignore_invalid_options: ignore_invalid_options) + named_args = if ignore_invalid_options [] else @@ -198,6 +204,7 @@ module Homebrew check_constraint_violations check_named_args(named_args) @args.freeze_named_args!(named_args) + @args.freeze_remaining_args!(non_options.empty? ? remaining : [*remaining, "--", non_options]) @args.freeze_processed_options!(@processed_options) @args_parsed = true diff --git a/Library/Homebrew/test/cli/parser_spec.rb b/Library/Homebrew/test/cli/parser_spec.rb index a54a3d4c43..c85a78d03b 100644 --- a/Library/Homebrew/test/cli/parser_spec.rb +++ b/Library/Homebrew/test/cli/parser_spec.rb @@ -15,6 +15,14 @@ describe Homebrew::CLI::Parser do allow(Homebrew::EnvConfig).to receive(:pry?).and_return(true) end + context "when `ignore_invalid_options` is true" do + it "passes through invalid options" do + args = parser.parse(["-v", "named-arg", "--not-a-valid-option"], ignore_invalid_options: true) + expect(args.remaining).to eq ["named-arg", "--not-a-valid-option"] + expect(args.named_args).to be_empty + end + end + it "parses short option" do args = parser.parse(["-v"]) expect(args).to be_verbose From 69189721dbb29822b8d30fbe79d6f3f07e77f5d9 Mon Sep 17 00:00:00 2001 From: Kien Dang Date: Fri, 31 Jul 2020 11:47:10 +0800 Subject: [PATCH 12/44] Prepend cask name to cask upgrade error message --- Library/Homebrew/cask/cmd/upgrade.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/cask/cmd/upgrade.rb b/Library/Homebrew/cask/cmd/upgrade.rb index da5e4f56cb..6532f26c3a 100644 --- a/Library/Homebrew/cask/cmd/upgrade.rb +++ b/Library/Homebrew/cask/cmd/upgrade.rb @@ -47,7 +47,7 @@ module Cask upgradable_casks.each do |(old_cask, new_cask)| upgrade_cask(old_cask, new_cask) rescue => e - caught_exceptions << e + caught_exceptions << e.exception("#{new_cask.full_name}: #{e}") next end From ec7be559f43b160083a688375651e3e943308018 Mon Sep 17 00:00:00 2001 From: Rylan Polster Date: Fri, 31 Jul 2020 10:10:07 -0400 Subject: [PATCH 13/44] Refactor package name and url logic to PyPI module --- Library/Homebrew/dev-cmd/bump-formula-pr.rb | 6 +----- Library/Homebrew/utils/pypi.rb | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Library/Homebrew/dev-cmd/bump-formula-pr.rb b/Library/Homebrew/dev-cmd/bump-formula-pr.rb index b62b7652e2..6affcf1246 100644 --- a/Library/Homebrew/dev-cmd/bump-formula-pr.rb +++ b/Library/Homebrew/dev-cmd/bump-formula-pr.rb @@ -183,11 +183,7 @@ module Homebrew elsif !new_url && !new_version odie "#{formula}: no --url= or --version= argument specified!" else - new_url ||= if old_url.start_with?(PyPI::PYTHONHOSTED_URL_PREFIX) - package_name = File.basename(old_url).match(/^(.+)-[a-z\d.]+$/)[1] - _, url = PyPI.get_pypi_info(package_name, new_version) - url - end + new_url ||= PyPI.update_pypi_url(old_url, new_version) new_url ||= old_url.gsub(old_version, new_version) if new_url == old_url odie <<~EOS diff --git a/Library/Homebrew/utils/pypi.rb b/Library/Homebrew/utils/pypi.rb index 486462be19..a3947533ad 100644 --- a/Library/Homebrew/utils/pypi.rb +++ b/Library/Homebrew/utils/pypi.rb @@ -7,6 +7,20 @@ module PyPI @pipgrip_installed = nil + def url_to_pypi_package_name(url) + return unless url.start_with? PYTHONHOSTED_URL_PREFIX + + File.basename(url).match(/^(.+)-[a-z\d.]+$/)[1] + end + + def update_pypi_url(url, version) + package = url_to_pypi_package_name url + return if package.nil? + + _, url = get_pypi_info(package, version) + url + end + # Get name, url, and version for a given pypi package def get_pypi_info(package, version) metadata_url = "https://pypi.org/pypi/#{package}/#{version}/json" @@ -32,7 +46,7 @@ module PyPI # PyPI package name isn't always the same as the formula name. Try to infer from the URL. pypi_name = if formula.stable.url.start_with?(PYTHONHOSTED_URL_PREFIX) - File.basename(formula.stable.url).match(/^(.+)-[a-z\d.]+$/)[1] + url_to_pypi_package_name formula.stable.url else formula.name end From 05aada4333e7be7d5260ecb8444f08f1314ab70f Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 31 Jul 2020 17:06:04 +0200 Subject: [PATCH 14/44] Fix flags for `brew log`. --- Library/Homebrew/cmd/log.rb | 23 ++++++++++++++++------- docs/Manpage.md | 6 ++++-- manpages/brew.1 | 8 ++++++-- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/Library/Homebrew/cmd/log.rb b/Library/Homebrew/cmd/log.rb index e49d4bead0..03200a7539 100644 --- a/Library/Homebrew/cmd/log.rb +++ b/Library/Homebrew/cmd/log.rb @@ -20,9 +20,12 @@ module Homebrew description: "Also print diffstat from commit." switch "--oneline", description: "Print only one line per commit." - flag "-1", "--max-count", - description: "Print only one or a specified number of commits." + switch "-1", + description: "Print only one commit." + flag "-n", "--max-count=", + description: "Print only a specified number of commits." max_named 1 + conflicts "-1", "--max-count" end end @@ -38,11 +41,11 @@ module Homebrew else path = Formulary.path(args.named.first) tap = Tap.from_path(path) - git_log path.dirname, path, tap + git_log path.dirname, path, tap, args: args end end - def git_log(cd_dir, path = nil, tap = nil) + def git_log(cd_dir, path = nil, tap = nil, args:) cd cd_dir repo = Utils.popen_read("git rev-parse --show-toplevel").chomp if tap @@ -62,8 +65,14 @@ module Homebrew git -C "#{git_cd}" fetch --unshallow EOS end - system_args = args.options_only - system_args += ["--follow", "--", path] if path.present? - system "git", "log", *system_args + + git_args = [] + git_args << "--patch" if args.patch? + git_args << "--stat" if args.stat? + git_args << "--oneline" if args.oneline? + git_args << "-1" if args.public_send(:'1?') + git_args << "--max-count" << args.max_count if args.max_count + git_args += ["--follow", "--", path] if path.present? + system "git", "log", *git_args end end diff --git a/docs/Manpage.md b/docs/Manpage.md index 0a82a3a035..76b1e07c4d 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -312,8 +312,10 @@ no formula is provided. Also print diffstat from commit. * `--oneline`: Print only one line per commit. -* `-1`, `--max-count`: - Print only one or a specified number of commits. +* `-1`: + Print only one commit. +* `-n`, `--max-count`: + Print only a specified number of commits. ### `migrate` [*`options`*] *`formula`* diff --git a/manpages/brew.1 b/manpages/brew.1 index ca4926fff2..3f4dcbac10 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -428,8 +428,12 @@ Also print diffstat from commit\. Print only one line per commit\. . .TP -\fB\-1\fR, \fB\-\-max\-count\fR -Print only one or a specified number of commits\. +\fB\-1\fR +Print only one commit\. +. +.TP +\fB\-n\fR, \fB\-\-max\-count\fR +Print only a specified number of commits\. . .SS "\fBmigrate\fR [\fIoptions\fR] \fIformula\fR" Migrate renamed packages to new names, where \fIformula\fR are old names of packages\. From be2d19fe07633a35e5022ccf5152a47d180fd388 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 31 Jul 2020 17:37:36 +0200 Subject: [PATCH 15/44] Refactor handling of formula options in `CLI::Parser`. --- Library/Homebrew/brew.rb | 6 +++- Library/Homebrew/cli/args.rb | 38 +++++--------------- Library/Homebrew/cli/parser.rb | 62 ++++++++++++++++++++------------- Library/Homebrew/dev-cmd/irb.rb | 2 +- Library/Homebrew/global.rb | 2 +- Library/Homebrew/help.rb | 2 ++ 6 files changed, 54 insertions(+), 58 deletions(-) diff --git a/Library/Homebrew/brew.rb b/Library/Homebrew/brew.rb index d63f2d05f7..ca89004014 100644 --- a/Library/Homebrew/brew.rb +++ b/Library/Homebrew/brew.rb @@ -41,6 +41,7 @@ begin empty_argv = ARGV.empty? help_flag_list = %w[-h --help --usage -?] help_flag = !ENV["HOMEBREW_HELP"].nil? + help_cmd_index = nil cmd = nil ARGV.each_with_index do |arg, i| @@ -49,13 +50,16 @@ begin if arg == "help" && !cmd # Command-style help: `help ` is fine, but ` help` is not. help_flag = true + help_cmd_index = i elsif !cmd && !help_flag_list.include?(arg) cmd = ARGV.delete_at(i) cmd = Commands::HOMEBREW_INTERNAL_COMMAND_ALIASES.fetch(cmd, cmd) end end - Homebrew.args = Homebrew::CLI::Parser.new.parse(ignore_invalid_options: true) + ARGV.delete_at(help_cmd_index) if help_cmd_index + + Homebrew.args = Homebrew::CLI::Parser.new.parse(ARGV.dup.freeze, ignore_invalid_options: true) path = PATH.new(ENV["PATH"]) homebrew_path = PATH.new(ENV["HOMEBREW_PATH"]) diff --git a/Library/Homebrew/cli/args.rb b/Library/Homebrew/cli/args.rb index 21231160bb..1253c71b0c 100644 --- a/Library/Homebrew/cli/args.rb +++ b/Library/Homebrew/cli/args.rb @@ -10,32 +10,21 @@ module Homebrew # undefine tap to allow --tap argument undef tap - def initialize(argv = ARGV.dup.freeze, set_default_args: false) + def initialize super() @processed_options = [] - @options_only = args_options_only(argv) - @flags_only = args_flags_only(argv) + @options_only = [] + @flags_only = [] # Can set these because they will be overwritten by freeze_named_args! # (whereas other values below will only be overwritten if passed). - self[:named_args] = argv.reject { |arg| arg.start_with?("-") } + self[:named_args] = [] self[:remaining] = [] - - # Set values needed before Parser#parse has been run. - return unless set_default_args - - self[:build_from_source?] = argv.include?("--build-from-source") || argv.include?("-s") - self[:build_bottle?] = argv.include?("--build-bottle") - self[:force_bottle?] = argv.include?("--force-bottle") - self[:HEAD?] = argv.include?("--HEAD") - self[:devel?] = argv.include?("--devel") - self[:universal?] = argv.include?("--universal") end def freeze_remaining_args!(remaining_args) - self[:remaining] = remaining_args - self[:remaining].freeze + self[:remaining] = remaining_args.freeze end def freeze_named_args!(named_args) @@ -49,8 +38,7 @@ module Homebrew @kegs = nil @kegs_casks = nil - self[:named_args] = named_args - self[:named_args].freeze + self[:named_args] = named_args.freeze end def freeze_processed_options!(processed_options) @@ -60,8 +48,8 @@ module Homebrew @processed_options += processed_options @processed_options.freeze - @options_only = args_options_only(cli_args) - @flags_only = args_flags_only(cli_args) + @options_only = cli_args.select { |a| a.start_with?("-") }.freeze + @flags_only = cli_args.select { |a| a.start_with?("--") }.freeze end def named @@ -221,16 +209,6 @@ module Homebrew @cli_args.freeze end - def args_options_only(args) - args.select { |arg| arg.start_with?("-") } - .freeze - end - - def args_flags_only(args) - args.select { |arg| arg.start_with?("--") } - .freeze - end - def downcased_unique_named # Only lowercase names, not paths, bottle filenames or URLs named.map do |arg| diff --git a/Library/Homebrew/cli/parser.rb b/Library/Homebrew/cli/parser.rb index 2e07925421..25d9cd00fc 100644 --- a/Library/Homebrew/cli/parser.rb +++ b/Library/Homebrew/cli/parser.rb @@ -33,11 +33,10 @@ module Homebrew ] end - def initialize(argv = ARGV.dup.freeze, &block) + def initialize(&block) @parser = OptionParser.new - @argv = argv - @args = Homebrew::CLI::Args.new(@argv) + @args = Homebrew::CLI::Args.new @constraints = [] @conflicts = [] @@ -47,6 +46,7 @@ module Homebrew @min_named_args = nil @min_named_type = nil @hide_from_man_page = false + @formula_options = false self.class.global_options.each do |short, long, desc| switch short, long, description: desc @@ -63,7 +63,7 @@ module Homebrew # Disable default handling of `--help` switch. @parser.on_tail("-h", "--help", "Show this message.") do - raise OptionParser::InvalidOption + # Handled in `brew.rb`. end end @@ -190,9 +190,31 @@ module Homebrew [remaining, non_options] end - def parse(argv = @argv, ignore_invalid_options: false) + def parse(argv = ARGV.freeze, ignore_invalid_options: false) raise "Arguments were already parsed!" if @args_parsed + # If we accept formula options, parse once allowing invalid options + # so we can get the remaining list containing formula names. + if @formula_options + remaining, non_options = parse_remaining(argv, ignore_invalid_options: true) + + argv = [*remaining, "--", *non_options] + + formulae(argv).each do |f| + next if f.options.empty? + + f.options.each do |o| + name = o.flag + description = "`#{f.name}`: #{o.description}" + if name.end_with? "=" + flag name, description: description + else + switch name, description: description + end + end + end + end + remaining, non_options = parse_remaining(argv, ignore_invalid_options: ignore_invalid_options) named_args = if ignore_invalid_options @@ -201,8 +223,8 @@ module Homebrew remaining + non_options end - check_constraint_violations - check_named_args(named_args) + check_constraint_violations unless ignore_invalid_options + check_named_args(named_args) unless ignore_invalid_options @args.freeze_named_args!(named_args) @args.freeze_remaining_args!(non_options.empty? ? remaining : [*remaining, "--", non_options]) @args.freeze_processed_options!(@processed_options) @@ -221,21 +243,7 @@ module Homebrew end def formula_options - formulae(@argv).each do |f| - next if f.options.empty? - - f.options.each do |o| - name = o.flag - description = "`#{f.name}`: #{o.description}" - if name.end_with? "=" - flag name, description: description - else - switch name, description: description - end - end - end - rescue FormulaUnavailableError - [] + @formula_options = true end def max_named(count) @@ -385,9 +393,9 @@ module Homebrew end def formulae(argv) - argv, named_argv = split_double_dash(argv) + argv, non_options = split_double_dash(argv) - named_args = argv.reject { |arg| arg.start_with?("-") } + named_argv + named_args = argv.reject { |arg| arg.start_with?("-") } + non_options spec = if argv.include?("--HEAD") :head elsif argv.include?("--devel") @@ -400,7 +408,11 @@ module Homebrew named_args.map do |arg| next if arg.match?(HOMEBREW_CASK_TAP_CASK_REGEX) - Formulary.factory(arg, spec, flags: @args.flags_only) + begin + Formulary.factory(arg, spec, flags: argv.select { |a| a.start_with?("--") }) + rescue FormulaUnavailableError + nil + end end.compact.uniq(&:name) end end diff --git a/Library/Homebrew/dev-cmd/irb.rb b/Library/Homebrew/dev-cmd/irb.rb index 2f1976e61d..94d31a967a 100644 --- a/Library/Homebrew/dev-cmd/irb.rb +++ b/Library/Homebrew/dev-cmd/irb.rb @@ -34,7 +34,7 @@ module Homebrew end def irb - args = irb_args.parse + args = irb_args.parse(ARGV.dup.freeze) if args.examples? puts "'v8'.f # => instance of the v8 formula" diff --git a/Library/Homebrew/global.rb b/Library/Homebrew/global.rb index dbdca9a57c..b100822fc0 100644 --- a/Library/Homebrew/global.rb +++ b/Library/Homebrew/global.rb @@ -82,7 +82,7 @@ module Homebrew end def args - @args ||= CLI::Args.new(set_default_args: true) + @args ||= CLI::Args.new end def messages diff --git a/Library/Homebrew/help.rb b/Library/Homebrew/help.rb index d868c9c828..53c3e46d56 100644 --- a/Library/Homebrew/help.rb +++ b/Library/Homebrew/help.rb @@ -95,6 +95,8 @@ module Homebrew cmd_parser = CLI::Parser.from_cmd_path(path) return unless cmd_parser + # Try parsing arguments here in order to show formula options in help output. + cmd_parser.parse(Homebrew.args.remaining, ignore_invalid_options: true) cmd_parser.generate_help_text end From 0de9eb0382737e7b1b2c44f3cd41e93adc4a9b99 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 31 Jul 2020 17:41:20 +0200 Subject: [PATCH 16/44] Rename `split_double_dash` to `split_non_options`. --- Library/Homebrew/cli/parser.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/cli/parser.rb b/Library/Homebrew/cli/parser.rb index 25d9cd00fc..ba73c7449a 100644 --- a/Library/Homebrew/cli/parser.rb +++ b/Library/Homebrew/cli/parser.rb @@ -160,7 +160,7 @@ module Homebrew i = 0 remaining = [] - argv, non_options = split_double_dash(argv) + argv, non_options = split_non_options(argv) while i < argv.count begin @@ -384,7 +384,7 @@ module Homebrew @processed_options << [option.short.first, option.long.first, option.arg, option.desc.first] end - def split_double_dash(argv) + def split_non_options(argv) if sep = argv.index("--") [argv.take(sep), argv.drop(sep + 1)] else @@ -393,7 +393,7 @@ module Homebrew end def formulae(argv) - argv, non_options = split_double_dash(argv) + argv, non_options = split_non_options(argv) named_args = argv.reject { |arg| arg.start_with?("-") } + non_options spec = if argv.include?("--HEAD") From 92cee70cbd5edfa75cf8df293dab9a36ce2ddbe7 Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Fri, 31 Jul 2020 16:56:21 +0100 Subject: [PATCH 17/44] utils/pypi: don't require pipgrip unless we are using it --- Library/Homebrew/utils/pypi.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/utils/pypi.rb b/Library/Homebrew/utils/pypi.rb index 486462be19..46a4d81402 100644 --- a/Library/Homebrew/utils/pypi.rb +++ b/Library/Homebrew/utils/pypi.rb @@ -27,9 +27,6 @@ module PyPI def update_python_resources!(formula, version = nil, print_only: false, silent: false, ignore_non_pypi_packages: false) - @pipgrip_installed ||= Formula["pipgrip"].any_version_installed? - odie '"pipgrip" must be installed (`brew install pipgrip`)' unless @pipgrip_installed - # PyPI package name isn't always the same as the formula name. Try to infer from the URL. pypi_name = if formula.stable.url.start_with?(PYTHONHOSTED_URL_PREFIX) File.basename(formula.stable.url).match(/^(.+)-[a-z\d.]+$/)[1] @@ -52,6 +49,9 @@ module PyPI odie "\"#{formula.name}\" contains non-PyPI resources. Please update the resources manually." end + @pipgrip_installed ||= Formula["pipgrip"].any_version_installed? + odie '"pipgrip" must be installed (`brew install pipgrip`)' unless @pipgrip_installed + ohai "Retrieving PyPI dependencies for \"#{pypi_name}==#{version}\"" if !print_only && !silent pipgrip_output = Utils.popen_read Formula["pipgrip"].bin/"pipgrip", "--json", "#{pypi_name}==#{version}" unless $CHILD_STATUS.success? From b6a326f6ee28ffceba433a0c1ee13b3fba8e9909 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 31 Jul 2020 17:59:45 +0200 Subject: [PATCH 18/44] Run `brew man` to update `brew bundle` manpage. --- docs/Manpage.md | 2 ++ manpages/brew.1 | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/docs/Manpage.md b/docs/Manpage.md index 76b1e07c4d..ba63f33318 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -1194,6 +1194,8 @@ flags which will help find keg-only dependencies like `openssl`, `icu4c`, etc. Read the `Brewfile` from this location. Use `--file=-` to pipe to stdin/stdout. * `--global`: Read the `Brewfile` from `~/.Brewfile`. +* `-v`, `--verbose`: + `install` prints output from commands as they are run. `check` lists all missing dependencies. * `--no-upgrade`: `install` won't run `brew upgrade` on outdated dependencies. Note they may still be upgraded by `brew install` if needed. * `-f`, `--force`: diff --git a/manpages/brew.1 b/manpages/brew.1 index 3f4dcbac10..277ff7733d 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -1543,6 +1543,10 @@ Read the \fBBrewfile\fR from this location\. Use \fB\-\-file=\-\fR to pipe to st Read the \fBBrewfile\fR from \fB~/\.Brewfile\fR\. . .TP +\fB\-v\fR, \fB\-\-verbose\fR +\fBinstall\fR prints output from commands as they are run\. \fBcheck\fR lists all missing dependencies\. +. +.TP \fB\-\-no\-upgrade\fR \fBinstall\fR won\'t run \fBbrew upgrade\fR on outdated dependencies\. Note they may still be upgraded by \fBbrew install\fR if needed\. . From 8f4188926af4198f9dfb3bf9264929208234cc01 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Fri, 31 Jul 2020 12:51:07 +0100 Subject: [PATCH 19/44] workflows/tests: run brew audit on homebrew/core. Run brew audit without Git, style (RuboCop) or online checks for homebrew/core. This is fast enough now (takes under a minute on my machine) and these are the audit failures we should never accept failures on (or introduce new ones without fixing them first). --- .github/workflows/tests.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index fa26431353..7e573f2db2 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -106,6 +106,9 @@ jobs: # don't care about `brew cask style` here. brew untap adoptopenjdk/openjdk + + # don't care about `brew audit` here. + brew untap mongodb/brew else # Fix permissions for 'brew tests' sudo chmod -R g-w,o-w /home/linuxbrew /home/runner /opt @@ -166,6 +169,9 @@ jobs: if: matrix.os == 'macOS-latest' run: brew cask style + - name: Run brew audit + run: brew audit --skip-style + - name: Run vale for docs linting run: | brew install vale From ea5d52e78836a912db894720e1658d3bad32b503 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Fri, 31 Jul 2020 16:37:39 +0100 Subject: [PATCH 20/44] audit: linuxbrew-core fixes. - special-case `adoptopenjdk@1.8` - allow depending on versioned formulae aliases. --- Library/Homebrew/dev-cmd/audit.rb | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index 0c4568cd94..7a2891e2d6 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -269,6 +269,12 @@ module Homebrew valid_alias_names.map! { |a| "#{formula.tap}/#{a}" } end + # Fix naming based on what people expect. + if alias_name_major_minor == "adoptopenjdk@1.8" + valid_alias_names << "adoptopenjdk@8" + valid_alias_names.delete "adoptopenjdk@1" + end + valid_versioned_aliases = versioned_aliases & valid_alias_names invalid_versioned_aliases = versioned_aliases - valid_alias_names @@ -284,7 +290,7 @@ module Homebrew end end - unless invalid_versioned_aliases.empty? + if invalid_versioned_aliases.present? problem <<~EOS Formula has invalid versioned aliases: #{invalid_versioned_aliases.join("\n ")} @@ -385,7 +391,7 @@ module Homebrew end if self.class.aliases.include?(dep.name) && - (dep_f.core_formula? || !dep_f.versioned_formula?) + dep_f.core_formula? && !dep_f.versioned_formula? problem "Dependency '#{dep.name}' from homebrew/core is an alias; " \ "use the canonical name '#{dep.to_formula.full_name}'." end @@ -467,6 +473,7 @@ module Homebrew end end + # openssl@1.1 only needed for Linux VERSIONED_KEG_ONLY_ALLOWLIST = %w[ autoconf@2.13 bash-completion@2 @@ -474,6 +481,7 @@ module Homebrew libsigc++@2 lua@5.1 numpy@1.16 + openssl@1.1 python@3.8 ].freeze @@ -489,7 +497,9 @@ module Homebrew end end - return if VERSIONED_KEG_ONLY_ALLOWLIST.include?(formula.name) || formula.name.start_with?("gcc@") + return if VERSIONED_KEG_ONLY_ALLOWLIST.include?(formula.name) + return if formula.name.start_with?("adoptopenjdk@") + return if formula.name.start_with?("gcc@") problem "Versioned formulae in homebrew/core should use `keg_only :versioned_formula`" end From 2c9c876eb88716ed10a46a1b11b4299c322f0c07 Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Fri, 31 Jul 2020 17:19:20 +0100 Subject: [PATCH 21/44] codecov.yml: mark patch status as informational --- .github/codecov.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/codecov.yml b/.github/codecov.yml index ec60ef7970..20c1e42d0a 100644 --- a/.github/codecov.yml +++ b/.github/codecov.yml @@ -6,3 +6,6 @@ coverage: project: default: threshold: 0.05% + patch: + default: + informational: true From 9c65a738939d01b31e4536c15c45474666a21563 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 31 Jul 2020 18:58:07 +0200 Subject: [PATCH 22/44] Pass `args` correctly in `brew bottle`. --- Library/Homebrew/dev-cmd/bottle.rb | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Library/Homebrew/dev-cmd/bottle.rb b/Library/Homebrew/dev-cmd/bottle.rb index 6fe8dcb0ef..3c470a34b9 100644 --- a/Library/Homebrew/dev-cmd/bottle.rb +++ b/Library/Homebrew/dev-cmd/bottle.rb @@ -85,11 +85,11 @@ module Homebrew def bottle args = bottle_args.parse - return merge if args.merge? + return merge(args: args) if args.merge? ensure_relocation_formulae_installed! unless args.skip_relocation? args.resolved_formulae.each do |f| - bottle_formula f + bottle_formula f, args: args end end @@ -102,7 +102,7 @@ module Homebrew end end - def keg_contain?(string, keg, ignores, formula_and_runtime_deps_names = nil) + def keg_contain?(string, keg, ignores, formula_and_runtime_deps_names = nil, args:) @put_string_exists_header, @put_filenames = nil print_filename = lambda do |str, filename| @@ -210,7 +210,7 @@ module Homebrew system "/usr/bin/sudo", "--non-interactive", "/usr/sbin/purge" end - def bottle_formula(f) + def bottle_formula(f, args:) return ofail "Formula not installed or up-to-date: #{f.full_name}" unless f.latest_version_installed? unless tap = f.tap @@ -327,14 +327,14 @@ module Homebrew if args.skip_relocation? skip_relocation = true else - relocatable = false if keg_contain?(prefix_check, keg, ignores, formula_and_runtime_deps_names) - relocatable = false if keg_contain?(repository, keg, ignores) - relocatable = false if keg_contain?(cellar, keg, ignores, formula_and_runtime_deps_names) + relocatable = false if keg_contain?(prefix_check, keg, ignores, formula_and_runtime_deps_names, args: args) + relocatable = false if keg_contain?(repository, keg, ignores, args: args) + relocatable = false if keg_contain?(cellar, keg, ignores, formula_and_runtime_deps_names, args: args) if prefix != prefix_check relocatable = false if keg_contain_absolute_symlink_starting_with?(prefix, keg) - relocatable = false if keg_contain?("#{prefix}/etc", keg, ignores) - relocatable = false if keg_contain?("#{prefix}/var", keg, ignores) - relocatable = false if keg_contain?("#{prefix}/share/vim", keg, ignores) + relocatable = false if keg_contain?("#{prefix}/etc", keg, ignores, args: args) + relocatable = false if keg_contain?("#{prefix}/var", keg, ignores, args: args) + relocatable = false if keg_contain?("#{prefix}/share/vim", keg, ignores, args: args) end skip_relocation = relocatable && !keg.require_relocation? end @@ -433,7 +433,7 @@ module Homebrew end end - def merge + def merge(args:) bottles_hash = args.named.reduce({}) do |hash, json_file| hash.deep_merge(JSON.parse(IO.read(json_file))) do |key, first, second| if key == "cellar" From 096377abf2a6564c4794adac0a0bd4ef45c7e046 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 31 Jul 2020 19:09:53 +0200 Subject: [PATCH 23/44] Pass `args` correctly in `brew deps` and `brew uses`. --- Library/Homebrew/cmd/deps.rb | 44 +++++++++++++++++--------------- Library/Homebrew/cmd/uses.rb | 2 +- Library/Homebrew/dependencies.rb | 8 +++--- 3 files changed, 28 insertions(+), 26 deletions(-) diff --git a/Library/Homebrew/cmd/deps.rb b/Library/Homebrew/cmd/deps.rb index ed333204bd..f39551687a 100644 --- a/Library/Homebrew/cmd/deps.rb +++ b/Library/Homebrew/cmd/deps.rb @@ -83,13 +83,13 @@ module Homebrew raise FormulaUnspecifiedError end - puts_deps_tree dependents, recursive + puts_deps_tree dependents, recursive, args: args return elsif args.all? - puts_deps sorted_dependents(Formula.to_a + Cask::Cask.to_a), recursive + puts_deps sorted_dependents(Formula.to_a + Cask::Cask.to_a), recursive, args: args return elsif !args.no_named? && args.for_each? - puts_deps sorted_dependents(args.formulae_and_casks), recursive + puts_deps sorted_dependents(args.formulae_and_casks), recursive, args: args return end @@ -102,9 +102,9 @@ module Homebrew dependents = dependents(args.formulae_and_casks) - all_deps = deps_for_dependents(dependents, recursive, &(args.union? ? :| : :&)) + all_deps = deps_for_dependents(dependents, recursive, args: args, &(args.union? ? :| : :&)) condense_requirements(all_deps) - all_deps.map!(&method(:dep_display_name)) + all_deps.map! { |d| dep_display_name(d, args: args) } all_deps.uniq! all_deps.sort! unless args.n? puts all_deps @@ -129,7 +129,7 @@ module Homebrew deps.select! { |dep| dep.is_a?(Requirement) || dep.installed? } if args.installed? end - def dep_display_name(dep) + def dep_display_name(dep, args:) str = if dep.is_a? Requirement if args.include_requirements? ":#{dep.display_s}" @@ -154,8 +154,8 @@ module Homebrew str end - def deps_for_dependent(d, recursive = false) - includes, ignores = argv_includes_ignores(ARGV) + def deps_for_dependent(d, recursive = false, args:) + includes, ignores = args_includes_ignores(args) deps = d.runtime_dependencies if @use_runtime_dependencies @@ -170,31 +170,31 @@ module Homebrew deps + reqs.to_a end - def deps_for_dependents(dependents, recursive = false, &block) - dependents.map { |d| deps_for_dependent(d, recursive) }.reduce(&block) + def deps_for_dependents(dependents, recursive = false, args:, &block) + dependents.map { |d| deps_for_dependent(d, recursive, args: args) }.reduce(&block) end - def puts_deps(dependents, recursive = false) - dependents.each do |d| - deps = deps_for_dependent(d, recursive) + def puts_deps(dependents, recursive = false, args:) + dependents.each do |dependent| + deps = deps_for_dependent(dependent, recursive, args: args) condense_requirements(deps) deps.sort_by!(&:name) - deps.map!(&method(:dep_display_name)) - puts "#{d.full_name}: #{deps.join(" ")}" + deps.map! { |d| dep_display_name(d, args: args) } + puts "#{dependent.full_name}: #{deps.join(" ")}" end end - def puts_deps_tree(dependents, recursive = false) + def puts_deps_tree(dependents, recursive = false, args:) dependents.each do |d| puts d.full_name @dep_stack = [] - recursive_deps_tree(d, "", recursive) + recursive_deps_tree(d, "", recursive, args: args) puts end end - def recursive_deps_tree(f, prefix, recursive) - includes, ignores = argv_includes_ignores(ARGV) + def recursive_deps_tree(f, prefix, recursive, args:) + includes, ignores = args_includes_ignores(args) dependables = @use_runtime_dependencies ? f.runtime_dependencies : f.deps deps = reject_ignores(dependables, ignores, includes) reqs = reject_ignores(f.requirements, ignores, includes) @@ -211,7 +211,7 @@ module Homebrew "├──" end - display_s = "#{tree_lines} #{dep_display_name(dep)}" + display_s = "#{tree_lines} #{dep_display_name(dep, args: args)}" is_circular = @dep_stack.include?(dep.name) display_s = "#{display_s} (CIRCULAR DEPENDENCY)" if is_circular puts "#{prefix}#{display_s}" @@ -224,7 +224,9 @@ module Homebrew "│ " end - recursive_deps_tree(Formulary.factory(dep.name), prefix + prefix_addition, true) if dep.is_a? Dependency + if dep.is_a? Dependency + recursive_deps_tree(Formulary.factory(dep.name), prefix + prefix_addition, true, args: args) + end end @dep_stack.pop diff --git a/Library/Homebrew/cmd/uses.rb b/Library/Homebrew/cmd/uses.rb index ceda3f9784..ba71e0972d 100644 --- a/Library/Homebrew/cmd/uses.rb +++ b/Library/Homebrew/cmd/uses.rb @@ -75,7 +75,7 @@ module Homebrew else formulae = args.installed? ? Formula.installed : Formula recursive = args.recursive? - includes, ignores = argv_includes_ignores(ARGV) + includes, ignores = args_includes_ignores(args) formulae.select do |f| deps = if recursive diff --git a/Library/Homebrew/dependencies.rb b/Library/Homebrew/dependencies.rb index 71c638cb79..1ece9e5340 100644 --- a/Library/Homebrew/dependencies.rb +++ b/Library/Homebrew/dependencies.rb @@ -57,23 +57,23 @@ class Requirements < DelegateClass(Set) end module DependenciesHelpers - def argv_includes_ignores(argv) + def args_includes_ignores(args) includes = [] ignores = [] - if argv.include? "--include-build" + if args.include_build? includes << "build?" else ignores << "build?" end - if argv.include? "--include-test" + if args.include_test? includes << "test?" else ignores << "test?" end - if argv.include? "--include-optional" + if args.include_optional? includes << "optional?" else ignores << "optional?" From 0ac6939a91c9f8ea74885cfc998752099afed97b Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 31 Jul 2020 19:14:25 +0200 Subject: [PATCH 24/44] Pass `args` correctly in `brew fetch`. --- Library/Homebrew/cmd/fetch.rb | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Library/Homebrew/cmd/fetch.rb b/Library/Homebrew/cmd/fetch.rb index 60794c7d85..93fb6ff6b9 100644 --- a/Library/Homebrew/cmd/fetch.rb +++ b/Library/Homebrew/cmd/fetch.rb @@ -66,7 +66,7 @@ module Homebrew fetched_bottle = false if fetch_bottle?(f, args: args) begin - fetch_formula(f.bottle) + fetch_formula(f.bottle, args: args) rescue Interrupt raise rescue => e @@ -82,40 +82,40 @@ module Homebrew next if fetched_bottle - fetch_formula(f) + fetch_formula(f, args: args) f.resources.each do |r| - fetch_resource(r) - r.patches.each { |p| fetch_patch(p) if p.external? } + fetch_resource(r, args: args) + r.patches.each { |p| fetch_patch(p, args: args) if p.external? } end - f.patchlist.each { |p| fetch_patch(p) if p.external? } + f.patchlist.each { |p| fetch_patch(p, args: args) if p.external? } end end - def fetch_resource(r) + def fetch_resource(r, args:) puts "Resource: #{r.name}" - fetch_fetchable r + fetch_fetchable r, args: args rescue ChecksumMismatchError => e - retry if retry_fetch? r + retry if retry_fetch?(r, args: args) opoo "Resource #{r.name} reports different #{e.hash_type}: #{e.expected}" end - def fetch_formula(f) - fetch_fetchable f + def fetch_formula(f, args:) + fetch_fetchable f, args: args rescue ChecksumMismatchError => e - retry if retry_fetch? f + retry if retry_fetch?(f, args: args) opoo "Formula reports different #{e.hash_type}: #{e.expected}" end - def fetch_patch(p) - fetch_fetchable p + def fetch_patch(p, args:) + fetch_fetchable p, args: args rescue ChecksumMismatchError => e Homebrew.failed = true opoo "Patch reports different #{e.hash_type}: #{e.expected}" end - def retry_fetch?(f) + def retry_fetch?(f, args:) @fetch_failed ||= Set.new if args.retry? && @fetch_failed.add?(f) ohai "Retrying download" @@ -127,7 +127,7 @@ module Homebrew end end - def fetch_fetchable(f) + def fetch_fetchable(f, args:) f.clear_cache if args.force? already_fetched = f.cached_download.exist? @@ -135,7 +135,7 @@ module Homebrew begin download = f.fetch(verify_download_integrity: false) rescue DownloadError - retry if retry_fetch? f + retry if retry_fetch?(f, args: args) raise end From 62a080d4101565861489797e2d86b342640986e9 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 31 Jul 2020 19:19:37 +0200 Subject: [PATCH 25/44] Pass `args` correctly in `brew gist-logs`. --- Library/Homebrew/cmd/gist-logs.rb | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/Library/Homebrew/cmd/gist-logs.rb b/Library/Homebrew/cmd/gist-logs.rb index 5bebb3ee1a..b4b49660c1 100644 --- a/Library/Homebrew/cmd/gist-logs.rb +++ b/Library/Homebrew/cmd/gist-logs.rb @@ -33,7 +33,7 @@ module Homebrew end end - def gistify_logs(f) + def gistify_logs(f, args:) files = load_logs(f.logs) build_time = f.logs.ctime timestamp = build_time.strftime("%Y-%m-%d_%H-%M-%S") @@ -41,7 +41,7 @@ module Homebrew s = StringIO.new SystemConfig.dump_verbose_config s # Dummy summary file, asciibetically first, to control display title of gist - files["# #{f.name} - #{timestamp}.txt"] = { content: brief_build_info(f) } + files["# #{f.name} - #{timestamp}.txt"] = { content: brief_build_info(f, with_hostname: args.with_hostname?) } files["00.config.out"] = { content: s.string } files["00.doctor.out"] = { content: Utils.popen_read("#{HOMEBREW_PREFIX}/bin/brew", "doctor", err: :out) } unless f.core_formula? @@ -69,19 +69,19 @@ module Homebrew else "#{f.name} (#{f.full_name}) on #{OS_VERSION} - Homebrew build logs" end - url = create_gist(files, descr) + url = create_gist(files, descr, private: args.private?) url = create_issue(f.tap, "#{f.name} failed to build on #{MacOS.full_version}", url) if args.new_issue? puts url if url end - def brief_build_info(f) + def brief_build_info(f, with_hostname:) build_time_str = f.logs.ctime.strftime("%Y-%m-%d %H:%M:%S") s = +<<~EOS Homebrew build logs for #{f.full_name} on #{OS_VERSION} EOS - if args.with_hostname? + if with_hostname hostname = Socket.gethostname s << "Host: #{hostname}\n" end @@ -122,13 +122,9 @@ module Homebrew logs end - def create_private? - args.private? - end - - def create_gist(files, description) + def create_gist(files, description, private:) url = "https://api.github.com/gists" - data = { "public" => !create_private?, "files" => files, "description" => description } + data = { "public" => !private, "files" => files, "description" => description } scopes = GitHub::CREATE_GIST_SCOPES GitHub.open_api(url, data: data, scopes: scopes)["html_url"] end @@ -145,6 +141,6 @@ module Homebrew Install.perform_preinstall_checks(all_fatal: true) Install.perform_build_from_source_checks(all_fatal: true) - gistify_logs(args.resolved_formulae.first) + gistify_logs(args.resolved_formulae.first, args: args) end end From 005e9dd5b35f8330abf93954e74cdb8ddc331874 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 31 Jul 2020 19:24:13 +0200 Subject: [PATCH 26/44] Pass `args` correctly in `brew options`. --- Library/Homebrew/cmd/options.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Library/Homebrew/cmd/options.rb b/Library/Homebrew/cmd/options.rb index 4665e8e399..f82a029bcf 100644 --- a/Library/Homebrew/cmd/options.rb +++ b/Library/Homebrew/cmd/options.rb @@ -32,9 +32,9 @@ module Homebrew args = options_args.parse if args.all? - puts_options Formula.to_a.sort + puts_options Formula.to_a.sort, args: args elsif args.installed? - puts_options Formula.installed.sort + puts_options Formula.installed.sort, args: args elsif !args.command.nil? path = Commands.path(args.command) odie "Unknown command: #{args.command}" unless path @@ -54,7 +54,7 @@ module Homebrew elsif args.no_named? raise FormulaUnspecifiedError else - puts_options args.formulae + puts_options args.formulae, args: args end end @@ -72,7 +72,7 @@ module Homebrew options end - def puts_options(formulae) + def puts_options(formulae, args:) formulae.each do |f| next if f.options.empty? From 1d0ac5c6b3b3facf101c51c6257c96cdb4f39726 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 31 Jul 2020 19:25:37 +0200 Subject: [PATCH 27/44] Pass `args` correctly in `brew outdated`. --- Library/Homebrew/cmd/outdated.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/cmd/outdated.rb b/Library/Homebrew/cmd/outdated.rb index 7ce5a854a0..407de29c0e 100644 --- a/Library/Homebrew/cmd/outdated.rb +++ b/Library/Homebrew/cmd/outdated.rb @@ -83,13 +83,13 @@ module Homebrew outdated_formulae_casks.flatten end - print_outdated(outdated) + print_outdated(outdated, args: args) end Homebrew.failed = args.named.present? && outdated.present? end - def print_outdated(formulae_or_casks) + def print_outdated(formulae_or_casks, args:) formulae_or_casks.each do |formula_or_cask| if formula_or_cask.is_a?(Formula) f = formula_or_cask From c61f4ce8796ee04177f7986d6a438e5b73159652 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 31 Jul 2020 19:29:11 +0200 Subject: [PATCH 28/44] Pass `args` correctly in `brew tap`. --- Library/Homebrew/cmd/tap.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/cmd/tap.rb b/Library/Homebrew/cmd/tap.rb index 3dccb1da10..74e53414ff 100644 --- a/Library/Homebrew/cmd/tap.rb +++ b/Library/Homebrew/cmd/tap.rb @@ -62,7 +62,7 @@ module Homebrew tap = Tap.fetch(args.named.first) begin tap.install clone_target: args.named.second, - force_auto_update: force_auto_update?, + force_auto_update: force_auto_update?(args: args), quiet: args.quiet?, full_clone: full_clone rescue TapRemoteMismatchError => e @@ -73,7 +73,7 @@ module Homebrew end end - def force_auto_update? + def force_auto_update?(args:) # if no relevant flag is present, return nil, meaning "no change" true if args.force_auto_update? end From 892803c0db174fc8aef14ebade1d5fe4cd596643 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 31 Jul 2020 19:33:18 +0200 Subject: [PATCH 29/44] Pass `args` correctly in `brew bump-formula-pr`. --- Library/Homebrew/dev-cmd/bump-formula-pr.rb | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Library/Homebrew/dev-cmd/bump-formula-pr.rb b/Library/Homebrew/dev-cmd/bump-formula-pr.rb index ba3cc5a40a..5b0457f936 100644 --- a/Library/Homebrew/dev-cmd/bump-formula-pr.rb +++ b/Library/Homebrew/dev-cmd/bump-formula-pr.rb @@ -72,7 +72,7 @@ module Homebrew end end - def use_correct_linux_tap(formula) + def use_correct_linux_tap(formula, args:) if OS.linux? && formula.tap.core_tap? tap_full_name = formula.tap.full_name.gsub("linuxbrew", "homebrew") homebrew_core_url = "https://github.com/#{tap_full_name}" @@ -124,8 +124,8 @@ module Homebrew formula ||= determine_formula_from_url(new_url) if new_url raise FormulaUnspecifiedError unless formula - tap_full_name, origin_branch, previous_branch = use_correct_linux_tap(formula) - check_open_pull_requests(formula, tap_full_name) + tap_full_name, origin_branch, previous_branch = use_correct_linux_tap(formula, args: args) + check_open_pull_requests(formula, tap_full_name, args: args) new_version = args.version check_all_pull_requests(formula, tap_full_name, version: new_version) if new_version @@ -293,7 +293,7 @@ module Homebrew "", ] end - new_contents = inreplace_pairs(formula.path, replacement_pairs.uniq.compact) + new_contents = inreplace_pairs(formula.path, replacement_pairs.uniq.compact, args: args) new_formula_version = formula_version(formula, requested_spec, new_contents) @@ -333,7 +333,7 @@ module Homebrew PyPI.update_python_resources! formula, new_formula_version, silent: true, ignore_non_pypi_packages: true end - run_audit(formula, alias_rename, old_contents) + run_audit(formula, alias_rename, old_contents, args: args) formula.path.parent.cd do branch = "#{formula.name}-#{new_formula_version}" @@ -448,7 +448,7 @@ module Homebrew [remote_url, username] end - def inreplace_pairs(path, replacement_pairs) + def inreplace_pairs(path, replacement_pairs, args:) if args.dry_run? str = path.open("r") { |f| Formulary.ensure_utf8_encoding(f).read } contents = StringInreplaceExtension.new(str) @@ -495,10 +495,10 @@ module Homebrew [] end - def check_open_pull_requests(formula, tap_full_name) + def check_open_pull_requests(formula, tap_full_name, args:) # check for open requests pull_requests = fetch_pull_requests(formula.name, tap_full_name, state: "open") - check_for_duplicate_pull_requests(pull_requests) + check_for_duplicate_pull_requests(pull_requests, args: args) end def check_all_pull_requests(formula, tap_full_name, version: nil, url: nil, tag: nil) @@ -512,7 +512,7 @@ module Homebrew check_for_duplicate_pull_requests(pull_requests) end - def check_for_duplicate_pull_requests(pull_requests) + def check_for_duplicate_pull_requests(pull_requests, args:) return if pull_requests.blank? duplicates_message = <<~EOS @@ -544,7 +544,7 @@ module Homebrew [versioned_alias, "#{name}@#{new_alias_version}"] end - def run_audit(formula, alias_rename, old_contents) + def run_audit(formula, alias_rename, old_contents, args:) if args.dry_run? if args.no_audit? ohai "Skipping `brew audit`" From 5efed5d8c54ca541791c8b9b6dd91b94ed3929b3 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 31 Jul 2020 19:36:27 +0200 Subject: [PATCH 30/44] Remove debug message. --- Library/Homebrew/dev-cmd/irb.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/Library/Homebrew/dev-cmd/irb.rb b/Library/Homebrew/dev-cmd/irb.rb index 94d31a967a..c392dc071f 100644 --- a/Library/Homebrew/dev-cmd/irb.rb +++ b/Library/Homebrew/dev-cmd/irb.rb @@ -56,8 +56,6 @@ module Homebrew require "keg" require "cask/all" - puts ARGV.inspect - ohai "Interactive Homebrew Shell" puts "Example commands available with: brew irb --examples" if args.pry? From 48444d50af74beb45b40630fc7fda622b2672fd8 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 31 Jul 2020 19:40:49 +0200 Subject: [PATCH 31/44] Refactor `brew man`. --- Library/Homebrew/dev-cmd/man.rb | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Library/Homebrew/dev-cmd/man.rb b/Library/Homebrew/dev-cmd/man.rb index 295424fd52..1a76bb2d42 100644 --- a/Library/Homebrew/dev-cmd/man.rb +++ b/Library/Homebrew/dev-cmd/man.rb @@ -36,7 +36,7 @@ module Homebrew odie "`brew man --link` is now done automatically by `brew update`." if args.link? Commands.rebuild_internal_commands_completion_list - regenerate_man_pages(args: args) + regenerate_man_pages(preserve_date: args.fail_if_changed?) if system "git", "-C", HOMEBREW_REPOSITORY, "diff", "--quiet", "docs/Manpage.md", "manpages", "completions" puts "No changes to manpage or completions output detected." @@ -45,15 +45,15 @@ module Homebrew end end - def regenerate_man_pages(args:) + def regenerate_man_pages(preserve_date:) Homebrew.install_bundler_gems! markup = build_man_page - convert_man_page(markup, TARGET_DOC_PATH/"Manpage.md", args: args) - convert_man_page(markup, TARGET_MAN_PATH/"brew.1", args: args) + convert_man_page(markup, TARGET_DOC_PATH/"Manpage.md", preserve_date: preserve_date) + convert_man_page(markup, TARGET_MAN_PATH/"brew.1", preserve_date: preserve_date) cask_markup = (SOURCE_PATH/"brew-cask.1.md").read - convert_man_page(cask_markup, TARGET_MAN_PATH/"brew-cask.1", args: args) + convert_man_page(cask_markup, TARGET_MAN_PATH/"brew-cask.1", preserve_date: preserve_date) end def build_man_page @@ -94,14 +94,13 @@ module Homebrew path.basename.to_s.sub(/\.(rb|sh)$/, "").sub(/^--/, "~~") end - def convert_man_page(markup, target, args:) + def convert_man_page(markup, target, preserve_date:) manual = target.basename(".1") organisation = "Homebrew" # Set the manpage date to the existing one if we're checking for changes. # This avoids the only change being e.g. a new date. - date = if args.fail_if_changed? && - target.extname == ".1" && target.exist? + date = if preserve_date && target.extname == ".1" && target.exist? /"(\d{1,2})" "([A-Z][a-z]+) (\d{4})" "#{organisation}" "#{manual}"/ =~ target.read Date.parse("#{Regexp.last_match(1)} #{Regexp.last_match(2)} #{Regexp.last_match(3)}") else From 617b3695439669d9e825869beff258e4e5c17588 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 31 Jul 2020 19:42:31 +0200 Subject: [PATCH 32/44] Pass `args` correctly in `brew pr-pull`. --- Library/Homebrew/dev-cmd/pr-pull.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Library/Homebrew/dev-cmd/pr-pull.rb b/Library/Homebrew/dev-cmd/pr-pull.rb index ab2a23ebdf..28ae197fac 100644 --- a/Library/Homebrew/dev-cmd/pr-pull.rb +++ b/Library/Homebrew/dev-cmd/pr-pull.rb @@ -129,7 +129,7 @@ module Homebrew end end - def check_branch(path, ref) + def check_branch(path, ref, args:) branch = Utils.popen_read("git", "-C", path, "symbolic-ref", "--short", "HEAD").strip return if branch == ref || args.clean? || args.branch_okay? @@ -154,8 +154,8 @@ module Homebrew else odebug "Mirroring #{mirror_url}" mirror_args = ["mirror", f.full_name] - mirror_args << "--debug" if Homebrew.args.debug? - mirror_args << "--verbose" if Homebrew.args.verbose? + mirror_args << "--debug" if args.debug? + mirror_args << "--verbose" if args.verbose? mirror_args << "--bintray-org=#{org}" if org mirror_args << "--bintray-repo=#{repo}" if repo mirror_args << "--no-publish" unless publish @@ -232,7 +232,7 @@ module Homebrew _, user, repo, pr = *url_match odie "Not a GitHub pull request: #{arg}" unless pr - check_branch tap.path, "master" + check_branch tap.path, "master", args: args ohai "Fetching #{tap} pull request ##{pr}" Dir.mktmpdir pr do |dir| @@ -258,8 +258,8 @@ module Homebrew next if args.no_upload? upload_args = ["pr-upload"] - upload_args << "--debug" if Homebrew.args.debug? - upload_args << "--verbose" if Homebrew.args.verbose? + upload_args << "--debug" if args.debug? + upload_args << "--verbose" if args.verbose? upload_args << "--no-publish" if args.no_publish? upload_args << "--dry-run" if args.dry_run? upload_args << "--warn-on-upload-failure" if args.warn_on_upload_failure? From cd402358b0cff96e1ca2fe72f7239ea2ed0f7b60 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 31 Jul 2020 19:45:18 +0200 Subject: [PATCH 33/44] Pass `args` correctly in `brew test`. --- Library/Homebrew/dev-cmd/test.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/dev-cmd/test.rb b/Library/Homebrew/dev-cmd/test.rb index dca26921ed..196652f9a5 100644 --- a/Library/Homebrew/dev-cmd/test.rb +++ b/Library/Homebrew/dev-cmd/test.rb @@ -109,7 +109,7 @@ module Homebrew end end rescue Exception => e # rubocop:disable Lint/RescueException - retry if retry_test?(f) + retry if retry_test?(f, args: args) ofail "#{f.full_name}: failed" puts e, e.backtrace ensure @@ -118,7 +118,7 @@ module Homebrew end end - def retry_test?(f) + def retry_test?(f, args:) @test_failed ||= Set.new if args.retry? && @test_failed.add?(f) oh1 "Testing #{f.full_name} (again)" From ce0fa22efba9a655433ded272b1ea1294630900b Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Fri, 31 Jul 2020 19:48:03 +0200 Subject: [PATCH 34/44] Use `with_env` in `brew unpack`. --- Library/Homebrew/dev-cmd/unpack.rb | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Library/Homebrew/dev-cmd/unpack.rb b/Library/Homebrew/dev-cmd/unpack.rb index 2fa824d422..fbdd7c459e 100644 --- a/Library/Homebrew/dev-cmd/unpack.rb +++ b/Library/Homebrew/dev-cmd/unpack.rb @@ -55,12 +55,13 @@ module Homebrew oh1 "Unpacking #{Formatter.identifier(f.full_name)} to: #{stage_dir}" - ENV["VERBOSE"] = "1" # show messages about tar - f.brew do - f.patch if args.patch? - cp_r getwd, stage_dir, preserve: true + # show messages about tar + with_env VERBOSE: "1" do + f.brew do + f.patch if args.patch? + cp_r getwd, stage_dir, preserve: true + end end - ENV["VERBOSE"] = nil next unless args.git? From b08d1a28ad6c9c12b9f5bbc2cfa3a5df5df95d5c Mon Sep 17 00:00:00 2001 From: Rylan Polster Date: Fri, 31 Jul 2020 14:21:44 -0400 Subject: [PATCH 35/44] update-python-resources: handle no sdist for package --- Library/Homebrew/utils/pypi.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Library/Homebrew/utils/pypi.rb b/Library/Homebrew/utils/pypi.rb index acc3573a6c..ceee364396 100644 --- a/Library/Homebrew/utils/pypi.rb +++ b/Library/Homebrew/utils/pypi.rb @@ -35,6 +35,8 @@ module PyPI end sdist = json["urls"].find { |url| url["packagetype"] == "sdist" } + return json["info"]["name"] if sdist.nil? + [json["info"]["name"], sdist["url"], sdist["digests"]["sha256"]] end From 58848e402a66b9ca496346359db6525f01809371 Mon Sep 17 00:00:00 2001 From: vidusheeamoli Date: Thu, 30 Jul 2020 22:25:37 +0530 Subject: [PATCH 36/44] sorbet/files.yaml: add new files --- Library/Homebrew/sorbet/files.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Library/Homebrew/sorbet/files.yaml b/Library/Homebrew/sorbet/files.yaml index e82f5924e0..fcaf0f6018 100644 --- a/Library/Homebrew/sorbet/files.yaml +++ b/Library/Homebrew/sorbet/files.yaml @@ -163,6 +163,7 @@ false: - ./dev-cmd/tests.rb - ./dev-cmd/unpack.rb - ./dev-cmd/update-license-data.rb + - ./dev-cmd/update-python-resources.rb - ./dev-cmd/update-test.rb - ./dev-cmd/vendor-gems.rb - ./development_tools.rb @@ -268,6 +269,7 @@ false: - ./test/ENV_spec.rb - ./test/bintray_spec.rb - ./test/bottle_publisher_spec.rb + - ./test/cask_dependent_spec.rb - ./test/cask/artifact/alt_target_spec.rb - ./test/cask/artifact/app_spec.rb - ./test/cask/artifact/binary_spec.rb @@ -823,11 +825,13 @@ false: - ./test/version_spec.rb - ./unpack_strategy/uncompressed.rb - ./utils/gems.rb + - ./utils/pypi.rb - ./version.rb true: - ./build_options.rb - ./cache_store.rb + - ./cask_dependent.rb - ./cask/cache.rb - ./cask/denylist.rb - ./cask/macos.rb From 5da00dcd771a7270aada8b5c27953ada6850ebbd Mon Sep 17 00:00:00 2001 From: vidusheeamoli Date: Sat, 1 Aug 2020 00:32:05 +0530 Subject: [PATCH 37/44] srb/tapioca: update rbi of recently bumped gems --- .../sorbet/rbi/gems/codecov@0.2.2.rbi | 6 --- .../sorbet/rbi/gems/codecov@0.2.3.rbi | 7 +++ .../sorbet/rbi/gems/commander@4.5.2.rbi | 7 +++ .../sorbet/rbi/gems/highline@2.0.3.rbi | 7 +++ .../sorbet/rbi/gems/parlour@4.0.0.rbi | 7 +++ ...{patchelf@1.1.1.rbi => patchelf@1.2.0.rbi} | 43 +++++++++++-------- 6 files changed, 52 insertions(+), 25 deletions(-) delete mode 100644 Library/Homebrew/sorbet/rbi/gems/codecov@0.2.2.rbi create mode 100644 Library/Homebrew/sorbet/rbi/gems/codecov@0.2.3.rbi create mode 100644 Library/Homebrew/sorbet/rbi/gems/commander@4.5.2.rbi create mode 100644 Library/Homebrew/sorbet/rbi/gems/highline@2.0.3.rbi create mode 100644 Library/Homebrew/sorbet/rbi/gems/parlour@4.0.0.rbi rename Library/Homebrew/sorbet/rbi/gems/{patchelf@1.1.1.rbi => patchelf@1.2.0.rbi} (68%) diff --git a/Library/Homebrew/sorbet/rbi/gems/codecov@0.2.2.rbi b/Library/Homebrew/sorbet/rbi/gems/codecov@0.2.2.rbi deleted file mode 100644 index 198c6b42fc..0000000000 --- a/Library/Homebrew/sorbet/rbi/gems/codecov@0.2.2.rbi +++ /dev/null @@ -1,6 +0,0 @@ -# This file is autogenerated. Do not edit it by hand. Regenerate it with: -# tapioca sync --exclude json - -# typed: true - - diff --git a/Library/Homebrew/sorbet/rbi/gems/codecov@0.2.3.rbi b/Library/Homebrew/sorbet/rbi/gems/codecov@0.2.3.rbi new file mode 100644 index 0000000000..5ace243e13 --- /dev/null +++ b/Library/Homebrew/sorbet/rbi/gems/codecov@0.2.3.rbi @@ -0,0 +1,7 @@ +# DO NOT EDIT MANUALLY +# This is an autogenerated file for types exported from the `codecov` gem. +# Please instead update this file by running `tapioca sync --exclude json`. + +# typed: true + + diff --git a/Library/Homebrew/sorbet/rbi/gems/commander@4.5.2.rbi b/Library/Homebrew/sorbet/rbi/gems/commander@4.5.2.rbi new file mode 100644 index 0000000000..bfbd3dd171 --- /dev/null +++ b/Library/Homebrew/sorbet/rbi/gems/commander@4.5.2.rbi @@ -0,0 +1,7 @@ +# DO NOT EDIT MANUALLY +# This is an autogenerated file for types exported from the `commander` gem. +# Please instead update this file by running `tapioca sync --exclude json`. + +# typed: true + + diff --git a/Library/Homebrew/sorbet/rbi/gems/highline@2.0.3.rbi b/Library/Homebrew/sorbet/rbi/gems/highline@2.0.3.rbi new file mode 100644 index 0000000000..b6c0872fc5 --- /dev/null +++ b/Library/Homebrew/sorbet/rbi/gems/highline@2.0.3.rbi @@ -0,0 +1,7 @@ +# DO NOT EDIT MANUALLY +# This is an autogenerated file for types exported from the `highline` gem. +# Please instead update this file by running `tapioca sync --exclude json`. + +# typed: true + + diff --git a/Library/Homebrew/sorbet/rbi/gems/parlour@4.0.0.rbi b/Library/Homebrew/sorbet/rbi/gems/parlour@4.0.0.rbi new file mode 100644 index 0000000000..11091f1f37 --- /dev/null +++ b/Library/Homebrew/sorbet/rbi/gems/parlour@4.0.0.rbi @@ -0,0 +1,7 @@ +# DO NOT EDIT MANUALLY +# This is an autogenerated file for types exported from the `parlour` gem. +# Please instead update this file by running `tapioca sync --exclude json`. + +# typed: true + + diff --git a/Library/Homebrew/sorbet/rbi/gems/patchelf@1.1.1.rbi b/Library/Homebrew/sorbet/rbi/gems/patchelf@1.2.0.rbi similarity index 68% rename from Library/Homebrew/sorbet/rbi/gems/patchelf@1.1.1.rbi rename to Library/Homebrew/sorbet/rbi/gems/patchelf@1.2.0.rbi index be883d2256..1ca16ebbef 100644 --- a/Library/Homebrew/sorbet/rbi/gems/patchelf@1.1.1.rbi +++ b/Library/Homebrew/sorbet/rbi/gems/patchelf@1.2.0.rbi @@ -1,5 +1,6 @@ -# This file is autogenerated. Do not edit it by hand. Regenerate it with: -# tapioca sync --exclude json +# DO NOT EDIT MANUALLY +# This is an autogenerated file for types exported from the `patchelf` gem. +# Please instead update this file by running `tapioca sync --exclude json`. # typed: true @@ -10,15 +11,17 @@ module PatchELF::Helper private - def aligndown(val, align = _); end - def alignup(val, align = _); end + def aligndown(val, align = T.unsafe(nil)); end + def alignup(val, align = T.unsafe(nil)); end def color_enabled?; end def colorize(str, type); end - def self.aligndown(val, align = _); end - def self.alignup(val, align = _); end - def self.color_enabled?; end - def self.colorize(str, type); end + class << self + def aligndown(val, align = T.unsafe(nil)); end + def alignup(val, align = T.unsafe(nil)); end + def color_enabled?; end + def colorize(str, type); end + end end PatchELF::Helper::COLOR_CODE = T.let(T.unsafe(nil), Hash) @@ -33,9 +36,11 @@ module PatchELF::Logger def info(msg); end def warn(msg); end - def self.error(msg); end - def self.info(msg); end - def self.warn(msg); end + class << self + def error(msg); end + def info(msg); end + def warn(msg); end + end end class PatchELF::MM @@ -51,10 +56,10 @@ class PatchELF::MM private def abnormal_elf(msg); end - def extend_backward(seg, size = _); end - def extend_forward(seg, size = _); end + def extend_backward(seg, size = T.unsafe(nil)); end + def extend_forward(seg, size = T.unsafe(nil)); end def fgap_method; end - def find_gap(check_sz: _); end + def find_gap(check_sz: T.unsafe(nil)); end def invoke_callbacks(seg, start); end def load_segments; end def mgap_method; end @@ -73,7 +78,7 @@ class PatchELF::PatchError < ::ELFTools::ELFError end class PatchELF::Patcher - def initialize(filename, logging: _); end + def initialize(filename, on_error: T.unsafe(nil), logging: T.unsafe(nil)); end def add_needed(need); end def elf; end @@ -87,7 +92,7 @@ class PatchELF::Patcher def rpath=(rpath); end def runpath; end def runpath=(runpath); end - def save(out_file = _); end + def save(out_file = T.unsafe(nil)); end def soname; end def soname=(name); end def use_rpath!; end @@ -97,9 +102,9 @@ class PatchELF::Patcher def dirty?; end def dynamic_or_log; end def interpreter_; end - def log_or_raise(msg, exception = _); end + def log_or_raise(msg, exception = T.unsafe(nil)); end def needed_; end - def runpath_(rpath_sym = _); end + def runpath_(rpath_sym = T.unsafe(nil)); end def soname_; end def tag_name_or_log(type, log_msg); end end @@ -122,7 +127,7 @@ class PatchELF::Saver def patch_interpreter; end def patch_needed; end def patch_out(out_file); end - def patch_runpath(sym = _); end + def patch_runpath(sym = T.unsafe(nil)); end def patch_soname; end def reg_str_table(str, &block); end def section_header(name); end From e8dbbc2975d6a305aa0d3017b5911d217266d3eb Mon Sep 17 00:00:00 2001 From: vidusheeamoli Date: Sat, 1 Aug 2020 00:33:27 +0530 Subject: [PATCH 38/44] sorbet: update hidden definitions --- .../sorbet/rbi/hidden-definitions/hidden.rbi | 193 ++++++++++++++++-- 1 file changed, 181 insertions(+), 12 deletions(-) diff --git a/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi b/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi index 555e26f550..010474a7cb 100644 --- a/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi +++ b/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi @@ -13549,6 +13549,94 @@ module ParallelTests WINDOWS = ::T.let(nil, ::T.untyped) end +class Parlour::ConflictResolver + extend ::T::Private::Methods::MethodHooks + extend ::T::Private::Methods::SingletonMethodHooks +end + +module Parlour::Debugging::Tree + extend ::T::Private::Methods::MethodHooks + extend ::T::Private::Methods::SingletonMethodHooks +end + +module Parlour::Debugging + extend ::T::Private::Methods::MethodHooks + extend ::T::Private::Methods::SingletonMethodHooks +end + +class Parlour::DetachedRbiGenerator + def detached!(*args, &blk); end +end + +class Parlour::DetachedRbiGenerator +end + +class Parlour::ParseError + extend ::T::Private::Methods::MethodHooks + extend ::T::Private::Methods::SingletonMethodHooks +end + +class Parlour::Plugin + extend ::T::Private::Abstract::Hooks + extend ::T::InterfaceWrapper::Helpers + extend ::T::Private::Methods::MethodHooks + extend ::T::Private::Methods::SingletonMethodHooks +end + +class Parlour::RbiGenerator::Namespace + def create_attr(*args, &blk); end +end + +class Parlour::RbiGenerator::Options + extend ::T::Private::Methods::MethodHooks + extend ::T::Private::Methods::SingletonMethodHooks +end + +class Parlour::RbiGenerator::Parameter + extend ::T::Private::Methods::MethodHooks + extend ::T::Private::Methods::SingletonMethodHooks +end + +class Parlour::RbiGenerator::RbiObject + def add_comments(*args, &blk); end +end + +class Parlour::RbiGenerator::RbiObject + extend ::T::Private::Abstract::Hooks + extend ::T::InterfaceWrapper::Helpers + extend ::T::Private::Methods::MethodHooks + extend ::T::Private::Methods::SingletonMethodHooks +end + +class Parlour::RbiGenerator::StructProp + extend ::T::Private::Methods::MethodHooks + extend ::T::Private::Methods::SingletonMethodHooks +end + +class Parlour::RbiGenerator + extend ::T::Private::Methods::MethodHooks + extend ::T::Private::Methods::SingletonMethodHooks +end + +module Parlour::TypeLoader + extend ::T::Private::Methods::MethodHooks + extend ::T::Private::Methods::SingletonMethodHooks +end + +class Parlour::TypeParser::IntermediateSig + def self.inherited(s); end +end + +class Parlour::TypeParser::NodePath + extend ::T::Private::Methods::MethodHooks + extend ::T::Private::Methods::SingletonMethodHooks +end + +class Parlour::TypeParser + extend ::T::Private::Methods::MethodHooks + extend ::T::Private::Methods::SingletonMethodHooks +end + ParseError = Racc::ParseError Parser::CurrentRuby = Parser::Ruby26 @@ -18883,14 +18971,6 @@ end module RSpec::Its end -class RSpec::Mocks::AnyInstance::Recorder - include ::T::CompatibilityPatches::RSpecCompatibility::RecorderExtensions -end - -class RSpec::Mocks::MethodDouble - include ::T::CompatibilityPatches::RSpecCompatibility::MethodDoubleExtensions -end - class RSpec::Retry def attempts(); end @@ -21598,7 +21678,6 @@ module Stdenv def O3(); end def Os(); end - end class String @@ -21895,7 +21974,6 @@ module Superenv def O3(); end def Os(); end - end class SynchronizedDelegator @@ -22566,12 +22644,16 @@ end class Tapioca::Cli include ::Thor::Actions + def dsl(*constants); end + def generate(*gems); end def generator(); end def init(); end + def require(); end + def sync(); end def todo(); end @@ -22583,6 +22665,64 @@ end module Tapioca::Compilers end +module Tapioca::Compilers::Dsl +end + +class Tapioca::Compilers::Dsl::Base + def decorate(*args, &blk); end + + def gather_constants(*args, &blk); end + + def handles?(*args, &blk); end + + def initialize(*args, &blk); end + + def processable_constants(*args, &blk); end + SPECIAL_METHOD_NAMES = ::T.let(nil, ::T.untyped) +end + +class Tapioca::Compilers::Dsl::Base + extend ::T::Sig + extend ::T::Helpers + extend ::T::Private::Abstract::Hooks + extend ::T::InterfaceWrapper::Helpers + extend ::T::Private::Methods::MethodHooks + extend ::T::Private::Methods::SingletonMethodHooks +end + +module Tapioca::Compilers::Dsl +end + +class Tapioca::Compilers::DslCompiler + def error_handler(*args, &blk); end + + def generators(*args, &blk); end + + def initialize(*args, &blk); end + + def requested_constants(*args, &blk); end + + def run(*args, &blk); end +end + +class Tapioca::Compilers::DslCompiler + extend ::T::Sig + extend ::T::Private::Methods::MethodHooks + extend ::T::Private::Methods::SingletonMethodHooks +end + +class Tapioca::Compilers::RequiresCompiler + def compile(*args, &blk); end + + def initialize(*args, &blk); end +end + +class Tapioca::Compilers::RequiresCompiler + extend ::T::Sig + extend ::T::Private::Methods::MethodHooks + extend ::T::Private::Methods::SingletonMethodHooks +end + module Tapioca::Compilers::Sorbet SORBET = ::T.let(nil, ::T.untyped) end @@ -22607,6 +22747,7 @@ class Tapioca::Compilers::SymbolTable::SymbolGenerator def initialize(*args, &blk); end IGNORED_SYMBOLS = ::T.let(nil, ::T.untyped) SPECIAL_METHOD_NAMES = ::T.let(nil, ::T.untyped) + TYPE_PARAMETER_MATCHER = ::T.let(nil, ::T.untyped) end class Tapioca::Compilers::SymbolTable::SymbolGenerator @@ -22663,6 +22804,8 @@ class Tapioca::Config def generate_command(); end + def generators(); end + def initialize(*args, &blk); end def outdir(); end @@ -22676,13 +22819,16 @@ class Tapioca::Config def todos_path(); end def typed_overrides(); end - CONFIG_FILE_PATH = ::T.let(nil, ::T.untyped) - DEFAULT_OUTDIR = ::T.let(nil, ::T.untyped) + DEFAULT_DSLDIR = ::T.let(nil, ::T.untyped) + DEFAULT_GEMDIR = ::T.let(nil, ::T.untyped) DEFAULT_OVERRIDES = ::T.let(nil, ::T.untyped) DEFAULT_POSTREQUIRE = ::T.let(nil, ::T.untyped) DEFAULT_RBIDIR = ::T.let(nil, ::T.untyped) DEFAULT_TODOSPATH = ::T.let(nil, ::T.untyped) SORBET_CONFIG = ::T.let(nil, ::T.untyped) + SORBET_PATH = ::T.let(nil, ::T.untyped) + TAPIOCA_CONFIG = ::T.let(nil, ::T.untyped) + TAPIOCA_PATH = ::T.let(nil, ::T.untyped) end class Tapioca::Config @@ -22757,8 +22903,12 @@ class Tapioca::Gemfile end class Tapioca::Generator + def build_dsl(*args, &blk); end + def build_gem_rbis(*args, &blk); end + def build_requires(*args, &blk); end + def build_todos(*args, &blk); end def config(*args, &blk); end @@ -22778,6 +22928,8 @@ class Tapioca::Loader def initialize(*args, &blk); end def load_bundle(*args, &blk); end + + def load_rails(*args, &blk); end end class Tapioca::Loader @@ -22786,6 +22938,23 @@ class Tapioca::Loader extend ::T::Private::Methods::SingletonMethodHooks end +class Tapioca::SorbetConfig + def ignore(); end + + def initialize(*args, &blk); end + + def paths(*args, &blk); end +end + +class Tapioca::SorbetConfig + extend ::T::Sig + extend ::T::Private::Methods::MethodHooks + extend ::T::Private::Methods::SingletonMethodHooks + def self.parse_file(*args, &blk); end + + def self.parse_string(*args, &blk); end +end + module Tapioca end From 9ddf587c3278069eb5f60adbbae9c246cc21d33c Mon Sep 17 00:00:00 2001 From: vidusheeamoli Date: Sat, 1 Aug 2020 00:39:35 +0530 Subject: [PATCH 39/44] sorbet/cli.rbi: add method --- Library/Homebrew/sorbet/rbi/cli.rbi | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Library/Homebrew/sorbet/rbi/cli.rbi b/Library/Homebrew/sorbet/rbi/cli.rbi index c9ec5b3cb0..c95e13e3c9 100644 --- a/Library/Homebrew/sorbet/rbi/cli.rbi +++ b/Library/Homebrew/sorbet/rbi/cli.rbi @@ -15,5 +15,7 @@ module Homebrew::CLI def build_from_source?; end def named_args; end + + def force_bottle?; end end end From 9dd52a83e464e9fd9613341f50bab11c4b9703b0 Mon Sep 17 00:00:00 2001 From: Rylan Polster Date: Fri, 31 Jul 2020 15:12:41 -0400 Subject: [PATCH 40/44] Reword comment above get_pypi_info --- Library/Homebrew/utils/pypi.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/utils/pypi.rb b/Library/Homebrew/utils/pypi.rb index ceee364396..4393d8d217 100644 --- a/Library/Homebrew/utils/pypi.rb +++ b/Library/Homebrew/utils/pypi.rb @@ -21,7 +21,7 @@ module PyPI url end - # Get name, url, and version for a given pypi package + # Get name, url and sha256 for a given pypi package def get_pypi_info(package, version) metadata_url = "https://pypi.org/pypi/#{package}/#{version}/json" out, _, status = curl_output metadata_url, "--location" From 17d0a46afd931a565eb38087ad27866e6f01abbd Mon Sep 17 00:00:00 2001 From: vidusheeamoli Date: Sat, 1 Aug 2020 00:53:51 +0530 Subject: [PATCH 41/44] .gitignore: add sorbet and tapioca dependencies --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index f2a0f78cf0..8026b79241 100644 --- a/.gitignore +++ b/.gitignore @@ -86,11 +86,13 @@ **/vendor/bundle/ruby/*/gems/byebug-*/ **/vendor/bundle/ruby/*/gems/coderay-*/ **/vendor/bundle/ruby/*/gems/colorize-*/ +**/vendor/bundle/ruby/*/gems/commander-*/ **/vendor/bundle/ruby/*/gems/connection_pool-*/ **/vendor/bundle/ruby/*/gems/codecov-*/ **/vendor/bundle/ruby/*/gems/diff-lcs-*/ **/vendor/bundle/ruby/*/gems/docile-*/ **/vendor/bundle/ruby/*/gems/domain_name-*/ +**/vendor/bundle/ruby/*/gems/highline-*/ **/vendor/bundle/ruby/*/gems/http-cookie-*/ **/vendor/bundle/ruby/*/gems/hpricot-*/ **/vendor/bundle/ruby/*/gems/jaro_winkler-*/ @@ -107,6 +109,7 @@ **/vendor/bundle/ruby/*/gems/ntlm-http-*/ **/vendor/bundle/ruby/*/gems/parallel-*/ **/vendor/bundle/ruby/*/gems/parallel_tests-*/ +**/vendor/bundle/ruby/*/gems/parlour-*/ **/vendor/bundle/ruby/*/gems/parser-*/ **/vendor/bundle/ruby/*/gems/powerpack-*/ **/vendor/bundle/ruby/*/gems/psych-*/ From 1e47a9dde80e05cfb954f71cfa4474601b2919b2 Mon Sep 17 00:00:00 2001 From: Seeker Date: Fri, 31 Jul 2020 14:12:14 -0700 Subject: [PATCH 42/44] bump-formula-pr: fix `missing keyword: args` error --- Library/Homebrew/dev-cmd/bump-formula-pr.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/dev-cmd/bump-formula-pr.rb b/Library/Homebrew/dev-cmd/bump-formula-pr.rb index 7915b15eb1..94bef20b28 100644 --- a/Library/Homebrew/dev-cmd/bump-formula-pr.rb +++ b/Library/Homebrew/dev-cmd/bump-formula-pr.rb @@ -510,7 +510,7 @@ module Homebrew end # if we haven't already found open requests, try for an exact match across all requests pull_requests = fetch_pull_requests("#{formula.name} #{version}", tap_full_name) if pull_requests.blank? - check_for_duplicate_pull_requests(pull_requests) + check_for_duplicate_pull_requests(pull_requests, args: args) end def check_for_duplicate_pull_requests(pull_requests, args:) From 59b9d80ebd526ce8ee15df199f2a52148e7752b5 Mon Sep 17 00:00:00 2001 From: Rylan Polster Date: Sat, 1 Aug 2020 01:25:59 -0400 Subject: [PATCH 43/44] bump-formula-pr: add args to check_all_pull_requests --- Library/Homebrew/dev-cmd/bump-formula-pr.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Library/Homebrew/dev-cmd/bump-formula-pr.rb b/Library/Homebrew/dev-cmd/bump-formula-pr.rb index 94bef20b28..ae36178de4 100644 --- a/Library/Homebrew/dev-cmd/bump-formula-pr.rb +++ b/Library/Homebrew/dev-cmd/bump-formula-pr.rb @@ -128,7 +128,7 @@ module Homebrew check_open_pull_requests(formula, tap_full_name, args: args) new_version = args.version - check_all_pull_requests(formula, tap_full_name, version: new_version) if new_version + check_all_pull_requests(formula, tap_full_name, version: new_version, args: args) if new_version requested_spec = :stable formula_spec = formula.stable @@ -159,10 +159,10 @@ module Homebrew old_version = old_formula_version.to_s forced_version = new_version.present? new_url_hash = if new_url && new_hash - check_all_pull_requests(formula, tap_full_name, url: new_url) unless new_version + check_all_pull_requests(formula, tap_full_name, url: new_url, args: args) unless new_version true elsif new_tag && new_revision - check_all_pull_requests(formula, tap_full_name, url: old_url, tag: new_tag) unless new_version + check_all_pull_requests(formula, tap_full_name, url: old_url, tag: new_tag, args: args) unless new_version false elsif !hash_type odie "#{formula}: no --tag= or --version= argument specified!" if !new_tag && !new_version @@ -173,7 +173,7 @@ module Homebrew and old tag are both #{new_tag}. EOS end - check_all_pull_requests(formula, tap_full_name, url: old_url, tag: new_tag) unless new_version + check_all_pull_requests(formula, tap_full_name, url: old_url, tag: new_tag, args: args) unless new_version resource_path, forced_version = fetch_resource(formula, new_version, old_url, tag: new_tag) new_revision = Utils.popen_read("git -C \"#{resource_path}\" rev-parse -q --verify HEAD") new_revision = new_revision.strip @@ -190,7 +190,7 @@ module Homebrew #{new_url} EOS end - check_all_pull_requests(formula, tap_full_name, url: new_url) unless new_version + check_all_pull_requests(formula, tap_full_name, url: new_url, args: args) unless new_version resource_path, forced_version = fetch_resource(formula, new_version, new_url) tar_file_extensions = %w[.tar .tb2 .tbz .tbz2 .tgz .tlz .txz .tZ] if tar_file_extensions.any? { |extension| new_url.include? extension } @@ -502,7 +502,7 @@ module Homebrew check_for_duplicate_pull_requests(pull_requests, args: args) end - def check_all_pull_requests(formula, tap_full_name, version: nil, url: nil, tag: nil) + def check_all_pull_requests(formula, tap_full_name, version: nil, url: nil, tag: nil, args:) unless version specs = {} specs[:tag] = tag if tag From c494789d700fbb76035c2cd5d8c92cbe3ef2c0b0 Mon Sep 17 00:00:00 2001 From: Rylan Polster Date: Sat, 1 Aug 2020 10:56:21 -0400 Subject: [PATCH 44/44] list: pass args properly --- Library/Homebrew/cmd/list.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Library/Homebrew/cmd/list.rb b/Library/Homebrew/cmd/list.rb index 87e3d38985..cb1f27ed8b 100644 --- a/Library/Homebrew/cmd/list.rb +++ b/Library/Homebrew/cmd/list.rb @@ -53,7 +53,7 @@ module Homebrew def list args = list_args.parse - return list_casks if args.cask? + return list_casks(args: args) if args.cask? return list_unbrewed if args.unbrewed? @@ -66,7 +66,7 @@ module Homebrew end if args.pinned? || args.versions? - filtered_list + filtered_list args: args elsif args.no_named? if args.full_name? full_names = Formula.installed.map(&:full_name).sort(&tap_and_name_comparison) @@ -134,7 +134,7 @@ module Homebrew safe_system "find", *arguments end - def filtered_list + def filtered_list(args:) names = if args.no_named? Formula.racks else @@ -163,7 +163,7 @@ module Homebrew end end - def list_casks + def list_casks(args:) cask_list = Cask::Cmd::List.new args.named cask_list.one = ARGV.include? "-1" cask_list.versions = args.versions?