diff --git a/Library/Homebrew/cask/cmd/uninstall.rb b/Library/Homebrew/cask/cmd/uninstall.rb index dfa8bbfb77..389fdb2792 100644 --- a/Library/Homebrew/cask/cmd/uninstall.rb +++ b/Library/Homebrew/cask/cmd/uninstall.rb @@ -12,26 +12,30 @@ module Cask def run casks.each do |cask| - odebug "Uninstalling Cask #{cask}" - - raise CaskNotInstalledError, cask unless cask.installed? || force? - - if cask.installed? && !cask.installed_caskfile.nil? - # use the same cask file that was used for installation, if possible - cask = CaskLoader.load(cask.installed_caskfile) if cask.installed_caskfile.exist? - end - - Installer.new(cask, binaries: binaries?, verbose: verbose?, force: force?).uninstall - - next if (versions = cask.versions).empty? - - puts <<~EOS - #{cask} #{versions.to_sentence} #{"is".pluralize(versions.count)} still installed. - Remove #{(versions.count == 1) ? "it" : "them all"} with `brew cask uninstall --force #{cask}`. - EOS + uninstall_cask cask, binaries?, verbose?, force? end end + def self.uninstall_cask(cask, binaries, verbose, force) + odebug "Uninstalling Cask #{cask}" + + raise CaskNotInstalledError, cask unless cask.installed? || force + + if cask.installed? && !cask.installed_caskfile.nil? + # use the same cask file that was used for installation, if possible + cask = CaskLoader.load(cask.installed_caskfile) if cask.installed_caskfile.exist? + end + + Installer.new(cask, binaries: binaries, verbose: verbose, force: force).uninstall + + return if (versions = cask.versions).empty? + + puts <<~EOS + #{cask} #{versions.to_sentence} #{"is".pluralize(versions.count)} still installed. + Remove #{(versions.count == 1) ? "it" : "them all"} with `brew cask uninstall --force #{cask}`. + EOS + end + def self.help "uninstalls the given Cask" end diff --git a/Library/Homebrew/cmd/uninstall.rb b/Library/Homebrew/cmd/uninstall.rb index af66c9ac1e..7da4306b7a 100644 --- a/Library/Homebrew/cmd/uninstall.rb +++ b/Library/Homebrew/cmd/uninstall.rb @@ -5,6 +5,9 @@ require "formula" require "diagnostic" require "migrator" require "cli/parser" +require "cask/all" +require "cask/cmd" +require "cask/cask_loader" module Homebrew module_function @@ -29,15 +32,21 @@ module Homebrew def uninstall uninstall_args.parse - kegs_by_rack = if args.force? - Hash[args.named.map do |name| + if args.force? + possible_casks = [] + kegs_by_rack = Hash[args.named.map do |name| rack = Formulary.to_rack(name) - next unless rack.directory? + + unless rack.directory? + possible_casks << name + next + end [rack, rack.subdirs.map { |d| Keg.new(d) }] end] else - args.kegs.group_by(&:rack) + kegs_, possible_casks = args.kegs_and_unknowns + kegs_by_rack = kegs_.group_by(&:rack) end handle_unsatisfied_dependents(kegs_by_rack) @@ -108,6 +117,13 @@ module Homebrew end end end + + possible_casks.each do |name| + cask = Cask::CaskLoader.load name + Cask::Cmd::Uninstall.uninstall_cask(cask, true, args.verbose, args.force?) + rescue Cask::CaskUnavailableError + ofail "No installed keg or cask with the name \"#{name}\"" + end rescue MultipleVersionsInstalledError => e ofail e puts "Run `brew uninstall --force #{e.name}` to remove all versions."