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:
parent
55f7b826d9
commit
bc378d091b
@ -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"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user