From cbfea6c125247fa302b11c3062df570d5847501a Mon Sep 17 00:00:00 2001 From: William Ma Date: Wed, 24 Jun 2020 11:59:07 -0400 Subject: [PATCH] args: Add field for kegs and unknowns --- Library/Homebrew/cli/args.rb | 93 ++++++++++++++++++++++-------------- 1 file changed, 56 insertions(+), 37 deletions(-) diff --git a/Library/Homebrew/cli/args.rb b/Library/Homebrew/cli/args.rb index ac5fd1875b..90e5f4a11d 100644 --- a/Library/Homebrew/cli/args.rb +++ b/Library/Homebrew/cli/args.rb @@ -39,6 +39,7 @@ module Homebrew @formulae_paths = nil @casks = nil @kegs = nil + @kegs_and_unknowns = nil self[:named_args] = named_args self[:named_args].freeze @@ -108,55 +109,73 @@ module Homebrew end def kegs + @kegs ||= downcased_unique_named.map do |name| + resolve_keg name + rescue NoSuchKegError => e + if (reason = Homebrew::MissingFormula.suggest_command(name, "uninstall")) + $stderr.puts reason + end + raise e + end.freeze + end + + def kegs_and_unknowns + return @kegs_and_unknowns if @kegs_and_unknowns + + kegs = [] + unknowns = [] + downcased_unique_named.each do |name| + kegs << resolve_keg(name) + rescue NoSuchKegError + unknowns << name + end + + @kegs_and_unknowns = [kegs, unknowns] + end + + def resolve_keg(name) require "keg" require "formula" require "missing_formula" - @kegs ||= downcased_unique_named.map do |name| - raise UsageError if name.empty? + raise UsageError if name.empty? - rack = Formulary.to_rack(name.downcase) + rack = Formulary.to_rack(name.downcase) - dirs = rack.directory? ? rack.subdirs : [] + dirs = rack.directory? ? rack.subdirs : [] - if dirs.empty? - if (reason = Homebrew::MissingFormula.suggest_command(name, "uninstall")) - $stderr.puts reason - end - raise NoSuchKegError, rack.basename - end + raise NoSuchKegError, rack.basename if dirs.empty? - linked_keg_ref = HOMEBREW_LINKED_KEGS/rack.basename - opt_prefix = HOMEBREW_PREFIX/"opt/#{rack.basename}" + linked_keg_ref = HOMEBREW_LINKED_KEGS/rack.basename + opt_prefix = HOMEBREW_PREFIX/"opt/#{rack.basename}" - begin - if opt_prefix.symlink? && opt_prefix.directory? - Keg.new(opt_prefix.resolved_path) - elsif linked_keg_ref.symlink? && linked_keg_ref.directory? - Keg.new(linked_keg_ref.resolved_path) - elsif dirs.length == 1 - Keg.new(dirs.first) + begin + if opt_prefix.symlink? && opt_prefix.directory? + Keg.new(opt_prefix.resolved_path) + elsif linked_keg_ref.symlink? && linked_keg_ref.directory? + Keg.new(linked_keg_ref.resolved_path) + elsif dirs.length == 1 + Keg.new(dirs.first) + else + f = if name.include?("/") || File.exist?(name) + Formulary.factory(name) else - f = if name.include?("/") || File.exist?(name) - Formulary.factory(name) - else - Formulary.from_rack(rack) - end - - unless (prefix = f.installed_prefix).directory? - raise MultipleVersionsInstalledError, rack.basename - end - - Keg.new(prefix) + Formulary.from_rack(rack) end - rescue FormulaUnavailableError - raise <<~EOS - Multiple kegs installed to #{rack} - However we don't know which one you refer to. - Please delete (with rm -rf!) all but one and then try again. - EOS + + unless (prefix = f.installed_prefix).directory? + raise MultipleVersionsInstalledError, rack.basename + end + + Keg.new(prefix) end - end.freeze + rescue FormulaUnavailableError + raise <<~EOS + Multiple kegs installed to #{rack} + However we don't know which one you refer to. + Please delete (with rm -rf!) all but one and then try again. + EOS + end end def build_stable?