diff options
| author | Max Howell | 2012-03-06 13:43:41 +0000 |
|---|---|---|
| committer | Max Howell | 2012-03-06 13:47:31 +0000 |
| commit | 6868bf0d6ece15d322b1766bf7ff047d4b5e7dcc (patch) | |
| tree | 1c74b8333c0180249882485dcb03de9cfef46f11 /Library | |
| parent | 7ddaaf9bb030d49aba5eb0e8d8fd7944bc6532ee (diff) | |
| download | brew-6868bf0d6ece15d322b1766bf7ff047d4b5e7dcc.tar.bz2 | |
Don't require formula files for `brew rm --force`
In fixing this I also made it so that ARGV.kegs will return the LinkedKeg if the symlink is set. Which is almost always is. This neatly avoids most multiple-kegs issues.
Fixes Homebrew/homebrew#10685.
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/cmd/uninstall.rb | 19 | ||||
| -rw-r--r-- | Library/Homebrew/extend/ARGV.rb | 20 |
2 files changed, 26 insertions, 13 deletions
diff --git a/Library/Homebrew/cmd/uninstall.rb b/Library/Homebrew/cmd/uninstall.rb index 6f0025c48..cddb8ac65 100644 --- a/Library/Homebrew/cmd/uninstall.rb +++ b/Library/Homebrew/cmd/uninstall.rb @@ -1,27 +1,34 @@ require 'keg' +require 'formula' module Homebrew extend self def uninstall raise KegUnspecifiedError if ARGV.named.empty? - unless ARGV.force? + if not ARGV.force? ARGV.kegs.each do |keg| puts "Uninstalling #{keg}..." keg.unlink keg.uninstall end else - ARGV.formulae.each do |f| - if f.rack.directory? - puts "Uninstalling #{f}..." - f.rack.children.each do |keg| + ARGV.named.each do |name| + name = Formula.canonical_name(name) + + # FIXME canonical_name is insane + raise "Invalid usage" if name.include? '/' + + rack = HOMEBREW_CELLAR/name + if rack.directory? + puts "Uninstalling #{name}..." + rack.children.each do |keg| if keg.directory? keg = Keg.new(keg) keg.unlink keg.rmtree end end - f.rack.rmtree + rack.rmtree end end end diff --git a/Library/Homebrew/extend/ARGV.rb b/Library/Homebrew/extend/ARGV.rb index 47c770ecd..24d70cb1f 100644 --- a/Library/Homebrew/extend/ARGV.rb +++ b/Library/Homebrew/extend/ARGV.rb @@ -17,20 +17,26 @@ module HomebrewArgvExtension require 'keg' require 'formula' @kegs ||= downcased_unique_named.collect do |name| - n = Formula.canonical_name(name) - rack = HOMEBREW_CELLAR + if n.include? "/" + canonical_name = Formula.canonical_name(name) + rack = HOMEBREW_CELLAR + if canonical_name.include? "/" # canonical_name returns a path if it was a formula installed via a # URL. And we only want the name. FIXME that function is insane. - Pathname.new(n).stem + Pathname.new(canonical_name).stem else - n + canonical_name end dirs = rack.children.select{ |pn| pn.directory? } rescue [] raise NoSuchKegError.new(name) if not rack.directory? or dirs.length == 0 - raise MultipleVersionsInstalledError.new(name) if dirs.length > 1 - Keg.new dirs.first + + linked_keg_ref = HOMEBREW_REPOSITORY/"Library/LinkedKegs"/name + + if not linked_keg_ref.symlink? + raise MultipleVersionsInstalledError.new(name) if dirs.length > 1 + Keg.new(dirs.first) + else + Keg.new(linked_keg_ref.realpath) + end end - return @kegs end # self documenting perhaps? |
