uninstall: Add ability to reference casks from brew uninstall

This commit is contained in:
William Ma 2020-06-24 11:59:55 -04:00
parent cbfea6c125
commit 90c26dadc7
2 changed files with 41 additions and 21 deletions

View File

@ -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

View File

@ -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."