Compare against HOMEBREW_CELLAR using real paths.

The code in Keg.self.for path uses "path = path.parent.realpath" to walk
up subfolders looking for a Keg.

Because 'realpath' is in there, and the path is checked against
HOMEBREW_CELLAR, which  may be a symlink, we need to do realpath-to-realpath
comparisons in Keg. Otherwise, we will hit equivalent but symlinked folders,
not see that they are the same, and walk all the way up to / and then
error out.
This commit is contained in:
Adam Vandenberg 2009-11-12 11:09:20 -08:00
parent 55f7b826d9
commit bc378d091b

View File

@ -24,14 +24,15 @@
class Keg <Pathname
def initialize path
super path
raise "#{to_s} is not a valid keg" unless parent.parent == HOMEBREW_CELLAR
raise "#{to_s} is not a valid keg" unless parent.parent.realpath == HOMEBREW_CELLAR.realpath
raise "#{to_s} is not a directory" unless directory?
end
# if path is a file in a keg then this will return the containing Keg object
def self.for path
path = path.realpath
while not path.root?
return Keg.new(path) if path.parent.parent == HOMEBREW_CELLAR
return Keg.new(path) if path.parent.parent == HOMEBREW_CELLAR.realpath
path = path.parent.realpath # realpath() prevents root? failing
end
raise "#{path} is not inside a keg"