args: Refactor to load casks directly
This commit is contained in:
parent
4dc2df6e6a
commit
8a05b5258a
@ -36,11 +36,11 @@ module Homebrew
|
|||||||
# Reset cache values reliant on named_args
|
# Reset cache values reliant on named_args
|
||||||
@formulae = nil
|
@formulae = nil
|
||||||
@resolved_formulae = nil
|
@resolved_formulae = nil
|
||||||
@resolved_formulae_and_unknowns = nil
|
@resolved_formulae_casks = nil
|
||||||
@formulae_paths = nil
|
@formulae_paths = nil
|
||||||
@casks = nil
|
@casks = nil
|
||||||
@kegs = nil
|
@kegs = nil
|
||||||
@kegs_and_unknowns = nil
|
@kegs_casks = nil
|
||||||
|
|
||||||
self[:named_args] = named_args
|
self[:named_args] = named_args
|
||||||
self[:named_args].freeze
|
self[:named_args].freeze
|
||||||
@ -98,17 +98,23 @@ module Homebrew
|
|||||||
end.uniq(&:name).freeze
|
end.uniq(&:name).freeze
|
||||||
end
|
end
|
||||||
|
|
||||||
def resolved_formulae_and_unknowns
|
def resolved_formulae_casks
|
||||||
return @resolved_formulae_and_unknowns if @resolved_formulae_and_unknowns
|
@resolved_formulae_casks ||= begin
|
||||||
|
resolved_formulae = []
|
||||||
|
casks = []
|
||||||
|
|
||||||
resolved_formulae = []
|
downcased_unique_named.each do |name|
|
||||||
unknowns = []
|
resolved_formulae << Formulary.resolve(name, spec: spec(nil))
|
||||||
downcased_unique_named.each do |name|
|
rescue FormulaUnavailableError
|
||||||
resolved_formulae << Formulary.resolve(name, spec: spec(nil))
|
begin
|
||||||
rescue FormulaUnavailableError
|
casks << Cask::CaskLoader.load(name)
|
||||||
unknowns << name
|
rescue Cask::CaskUnavailableError
|
||||||
|
raise "No available formula or cask with the name \"#{name}\""
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
[resolved_formulae.freeze, casks.freeze].freeze
|
||||||
end
|
end
|
||||||
@resolved_formulae_and_unknowns = [resolved_formulae.freeze, unknowns.freeze].freeze
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def formulae_paths
|
def formulae_paths
|
||||||
@ -133,62 +139,22 @@ module Homebrew
|
|||||||
end.freeze
|
end.freeze
|
||||||
end
|
end
|
||||||
|
|
||||||
def kegs_and_unknowns
|
def kegs_casks
|
||||||
return @kegs_and_unknowns if @kegs_and_unknowns
|
@kegs_casks ||= begin
|
||||||
|
kegs = []
|
||||||
|
casks = []
|
||||||
|
|
||||||
kegs = []
|
downcased_unique_named.each do |name|
|
||||||
unknowns = []
|
kegs << resolve_keg(name)
|
||||||
downcased_unique_named.each do |name|
|
rescue NoSuchKegError
|
||||||
kegs << resolve_keg(name)
|
begin
|
||||||
rescue NoSuchKegError
|
casks << Cask::CaskLoader.load(name)
|
||||||
unknowns << name
|
rescue Cask::CaskUnavailableError
|
||||||
end
|
raise "No installed keg or cask with the name \"#{name}\""
|
||||||
|
|
||||||
@kegs_and_unknowns = [kegs.freeze, unknowns.freeze].freeze
|
|
||||||
end
|
|
||||||
|
|
||||||
def resolve_keg(name)
|
|
||||||
require "keg"
|
|
||||||
require "formula"
|
|
||||||
require "missing_formula"
|
|
||||||
|
|
||||||
raise UsageError if name.empty?
|
|
||||||
|
|
||||||
rack = Formulary.to_rack(name.downcase)
|
|
||||||
|
|
||||||
dirs = rack.directory? ? rack.subdirs : []
|
|
||||||
|
|
||||||
raise NoSuchKegError, rack.basename if dirs.empty?
|
|
||||||
|
|
||||||
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)
|
|
||||||
else
|
|
||||||
f = if name.include?("/") || File.exist?(name)
|
|
||||||
Formulary.factory(name)
|
|
||||||
else
|
|
||||||
Formulary.from_rack(rack)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
unless (prefix = f.installed_prefix).directory?
|
|
||||||
raise MultipleVersionsInstalledError, rack.basename
|
|
||||||
end
|
|
||||||
|
|
||||||
Keg.new(prefix)
|
|
||||||
end
|
end
|
||||||
rescue FormulaUnavailableError
|
|
||||||
raise <<~EOS
|
[kegs.freeze, casks.freeze].freeze
|
||||||
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
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -274,6 +240,51 @@ module Homebrew
|
|||||||
default
|
default
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def resolve_keg(name)
|
||||||
|
require "keg"
|
||||||
|
require "formula"
|
||||||
|
require "missing_formula"
|
||||||
|
|
||||||
|
raise UsageError if name.empty?
|
||||||
|
|
||||||
|
rack = Formulary.to_rack(name.downcase)
|
||||||
|
|
||||||
|
dirs = rack.directory? ? rack.subdirs : []
|
||||||
|
|
||||||
|
raise NoSuchKegError, rack.basename if dirs.empty?
|
||||||
|
|
||||||
|
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)
|
||||||
|
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)
|
||||||
|
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
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -57,7 +57,7 @@ module Homebrew
|
|||||||
|
|
||||||
Install.perform_preinstall_checks
|
Install.perform_preinstall_checks
|
||||||
|
|
||||||
resolved_formulae, possible_casks = args.resolved_formulae_and_unknowns
|
resolved_formulae, casks = args.resolved_formulae_casks
|
||||||
resolved_formulae.each do |f|
|
resolved_formulae.each do |f|
|
||||||
if f.pinned?
|
if f.pinned?
|
||||||
onoe "#{f.full_name} is pinned. You must unpin it to reinstall."
|
onoe "#{f.full_name} is pinned. You must unpin it to reinstall."
|
||||||
@ -69,13 +69,11 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
Homebrew.messages.display_messages
|
Homebrew.messages.display_messages
|
||||||
|
|
||||||
possible_casks.each do |name|
|
unless casks.empty?
|
||||||
reinstall_cmd = Cask::Cmd::Reinstall.new(name)
|
reinstall_cmd = Cask::Cmd::Reinstall.new(casks)
|
||||||
reinstall_cmd.verbose = args.verbose?
|
reinstall_cmd.verbose = args.verbose?
|
||||||
reinstall_cmd.force = args.force?
|
reinstall_cmd.force = args.force?
|
||||||
reinstall_cmd.run
|
reinstall_cmd.run
|
||||||
rescue Cask::CaskUnavailableError
|
|
||||||
ofail "No installed keg or cask with the name \"#{name}\""
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -33,20 +33,24 @@ module Homebrew
|
|||||||
uninstall_args.parse
|
uninstall_args.parse
|
||||||
|
|
||||||
if args.force?
|
if args.force?
|
||||||
possible_casks = []
|
casks = []
|
||||||
kegs_by_rack = Hash[args.named.map do |name|
|
kegs_by_rack = Hash[args.named.map do |name|
|
||||||
rack = Formulary.to_rack(name)
|
rack = Formulary.to_rack(name)
|
||||||
|
|
||||||
unless rack.directory?
|
unless rack.directory?
|
||||||
possible_casks << name
|
begin
|
||||||
|
casks << Cask::CaskLoader.load(name)
|
||||||
|
rescue Cask::CaskUnavailableError
|
||||||
|
# Since the uninstall was forced, ignore any unavailable casks
|
||||||
|
end
|
||||||
next
|
next
|
||||||
end
|
end
|
||||||
|
|
||||||
[rack, rack.subdirs.map { |d| Keg.new(d) }]
|
[rack, rack.subdirs.map { |d| Keg.new(d) }]
|
||||||
end]
|
end]
|
||||||
else
|
else
|
||||||
kegs_, possible_casks = args.kegs_and_unknowns
|
_kegs, casks = args.kegs_casks
|
||||||
kegs_by_rack = kegs_.group_by(&:rack)
|
kegs_by_rack = _kegs.group_by(&:rack)
|
||||||
end
|
end
|
||||||
|
|
||||||
handle_unsatisfied_dependents(kegs_by_rack)
|
handle_unsatisfied_dependents(kegs_by_rack)
|
||||||
@ -118,14 +122,13 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
possible_casks.each do |name|
|
unless casks.empty?
|
||||||
cmd = Cask::Cmd::Uninstall.new(name)
|
cask_uninstall = Cask::Cmd::Uninstall.new(casks)
|
||||||
cmd.force = args.force?
|
cask_uninstall.force = args.force?
|
||||||
cmd.verbose = args.verbose?
|
cask_uninstall.verbose = args.verbose?
|
||||||
cmd.run
|
cask_uninstall.run
|
||||||
rescue Cask::CaskUnavailableError
|
|
||||||
ofail "No installed keg or cask with the name \"#{name}\""
|
|
||||||
end
|
end
|
||||||
|
|
||||||
rescue MultipleVersionsInstalledError => e
|
rescue MultipleVersionsInstalledError => e
|
||||||
ofail e
|
ofail e
|
||||||
puts "Run `brew uninstall --force #{e.name}` to remove all versions."
|
puts "Run `brew uninstall --force #{e.name}` to remove all versions."
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user