diff options
| author | Adam Vandenberg | 2009-11-12 11:09:20 -0800 |
|---|---|---|
| committer | Adam Vandenberg | 2009-11-12 12:47:17 -0800 |
| commit | bc378d091b6eb6a55b0230d7c007896bf76bbd4d (patch) | |
| tree | a428262fd198c46ff5ca125a0b3c2e3d5a3921b6 /Library | |
| parent | 55f7b826d910bb5cc937714d214b100eb30073dd (diff) | |
| download | brew-bc378d091b6eb6a55b0230d7c007896bf76bbd4d.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" |
