aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorMax Howell2012-03-06 13:43:41 +0000
committerMax Howell2012-03-06 13:47:31 +0000
commit6868bf0d6ece15d322b1766bf7ff047d4b5e7dcc (patch)
tree1c74b8333c0180249882485dcb03de9cfef46f11 /Library
parent7ddaaf9bb030d49aba5eb0e8d8fd7944bc6532ee (diff)
downloadbrew-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.rb19
-rw-r--r--Library/Homebrew/extend/ARGV.rb20
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?