Skip to content
Snippets Groups Projects
Commit bc378d09 authored by Adam Vandenberg's avatar Adam Vandenberg
Browse files

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.
parent 55f7b826
No related branches found
No related tags found
No related merge requests found
......@@ -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"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment