diff options
| author | Adam Vandenberg | 2009-11-12 11:09:20 -0800 |
|---|---|---|
| committer | Adam Vandenberg | 2009-11-12 12:47:17 -0800 |
| commit | 034337ec5e09f128ecea9f89ff06bbb5b26195ad (patch) | |
| tree | 44129f43903c48da5f8b2f7cbeda9a7c6ea8e25f /Library | |
| parent | 7e0502495fdff7686015802a1c436851f8c876c6 (diff) | |
| download | homebrew-034337ec5e09f128ecea9f89ff06bbb5b26195ad.tar.bz2 | |
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.
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/keg.rb | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/Library/Homebrew/keg.rb b/Library/Homebrew/keg.rb index b9ca83953..8fdc78b4e 100644 --- a/Library/Homebrew/keg.rb +++ b/Library/Homebrew/keg.rb @@ -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" |
