aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/cmd
diff options
context:
space:
mode:
authorAlyssa Ross2016-09-28 19:14:33 +0100
committerAlyssa Ross2016-10-25 22:34:34 +0100
commitb42f76939cebb7267edaeb4fc2cb8a00af4b2789 (patch)
treea0859ffa8975271ad008d4d41e753495a17868ba /Library/Homebrew/cmd
parent888c44b238b6a5afa705ca46f6a682ac1c4bb729 (diff)
downloadbrew-b42f76939cebb7267edaeb4fc2cb8a00af4b2789.tar.bz2
uninstall: reorganise code
With the way uninstall is set up at the moment, it's pretty difficult to add functionality to both the --force and normal variants. Extracting the racks and kegs to be uninstalled before uninstalling them should make this easier.
Diffstat (limited to 'Library/Homebrew/cmd')
-rw-r--r--Library/Homebrew/cmd/uninstall.rb65
1 files changed, 36 insertions, 29 deletions
diff --git a/Library/Homebrew/cmd/uninstall.rb b/Library/Homebrew/cmd/uninstall.rb
index c45e94b79..2d7bb90e4 100644
--- a/Library/Homebrew/cmd/uninstall.rb
+++ b/Library/Homebrew/cmd/uninstall.rb
@@ -14,47 +14,54 @@ module Homebrew
def uninstall
raise KegUnspecifiedError if ARGV.named.empty?
- if !ARGV.force?
- ARGV.kegs.each do |keg|
- dependents = keg.installed_dependents - ARGV.kegs
- if dependents.any?
- dependents_output = dependents.map { |k| "#{k.name} #{k.version}" }.join(", ")
- conjugation = dependents.count == 1 ? "is" : "are"
- ofail "Refusing to uninstall #{keg} because it is required by #{dependents_output}, which #{conjugation} currently installed."
- puts "You can override this and force removal with `brew uninstall --force #{keg.name}`."
- next
- end
-
- keg.lock do
- puts "Uninstalling #{keg}... (#{keg.abv})"
- keg.unlink
- keg.uninstall
- rack = keg.rack
- rm_pin rack
-
- if rack.directory?
- versions = rack.subdirs.map(&:basename)
- verb = versions.length == 1 ? "is" : "are"
- puts "#{keg.name} #{versions.join(", ")} #{verb} still installed."
- puts "Remove all versions with `brew uninstall --force #{keg.name}`."
- end
- end
+ kegs_by_rack = if ARGV.force?
+ ARGV.named.map do |name|
+ rack = Formulary.to_rack(name)
+ [rack, rack.subdirs.map { |d| Keg.new(d) }]
end
else
- ARGV.named.each do |name|
- rack = Formulary.to_rack(name)
+ ARGV.kegs.group_by(&:rack)
+ end
+
+ kegs_by_rack.each do |rack, kegs|
+ if ARGV.force?
name = rack.basename
if rack.directory?
puts "Uninstalling #{name}... (#{rack.abv})"
- rack.subdirs.each do |d|
- keg = Keg.new(d)
+ kegs.each do |keg|
keg.unlink
keg.uninstall
end
end
rm_pin rack
+ else
+ kegs.each do |keg|
+ dependents = keg.installed_dependents - ARGV.kegs
+ if dependents.any?
+ dependents_output = dependents.map { |k| "#{k.name} #{k.version}" }.join(", ")
+ conjugation = dependents.count == 1 ? "is" : "are"
+ ofail "Refusing to uninstall #{keg} because it is required by #{dependents_output}, which #{conjugation} currently installed."
+ puts "You can override this and force removal with `brew uninstall --force #{keg.name}`."
+ next
+ end
+
+ keg.lock do
+ puts "Uninstalling #{keg}... (#{keg.abv})"
+ keg.unlink
+ keg.uninstall
+ rack = keg.rack
+ rm_pin rack
+
+ if rack.directory?
+ versions = rack.subdirs.map(&:basename)
+ verb = versions.length == 1 ? "is" : "are"
+ puts "#{keg.name} #{versions.join(", ")} #{verb} still installed."
+ puts "Remove all versions with `brew uninstall --force #{keg.name}`."
+ end
+ end
+ end
end
end
rescue MultipleVersionsInstalledError => e