diff options
| author | Alyssa Ross | 2016-09-28 19:14:33 +0100 |
|---|---|---|
| committer | Alyssa Ross | 2016-10-25 22:34:34 +0100 |
| commit | b42f76939cebb7267edaeb4fc2cb8a00af4b2789 (patch) | |
| tree | a0859ffa8975271ad008d4d41e753495a17868ba /Library/Homebrew/cmd | |
| parent | 888c44b238b6a5afa705ca46f6a682ac1c4bb729 (diff) | |
| download | brew-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.rb | 65 |
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 |
