Skip to content
Snippets Groups Projects
Commit bcde6432 authored by Brandon Black's avatar Brandon Black Committed by Max Howell
Browse files

Fix issues with writable? detection in brew doctor


Closes Homebrew/homebrew#13689.

Signed-off-by: default avatarMax Howell <mxcl@me.com>

There are subtle distinctions between writable? and writable_real? we don't
understand precisely why we need this, but it fixes the bugs :/
parent 1f622843
No related branches found
No related tags found
No related merge requests found
......@@ -73,7 +73,7 @@ supplied, patches will also be downloaded and applied.
unpack_dir.mkpath unless unpack_dir.exist?
end
raise "Cannot write to #{unpack_dir}" unless unpack_dir.writable?
raise "Cannot write to #{unpack_dir}" unless unpack_dir.writable_real?
formulae.each do |f|
# Create a nice name for the stage folder.
......
......@@ -84,7 +84,7 @@ chmods = %w( . bin etc include lib lib/pkgconfig Library sbin share var var/log
share/man/man5 share/man/man6 share/man/man7 share/man/man8
share/info share/doc share/aclocal ).
map{ |d| "/usr/local/#{d}" }.
select{ |d| File.directory? d and not File.writable? d }
select{ |d| File.directory? d and not File.writable_real? d }
chgrps = chmods.reject{ |d| File.stat(d).grpowned? }
unless chmods.empty?
......
......@@ -279,7 +279,7 @@ def __check_subdir_access base
target.find do |d|
next unless d.directory?
cant_read << d unless d.writable?
cant_read << d unless d.writable_real?
end
cant_read.sort!
......@@ -300,7 +300,7 @@ end
def check_access_usr_local
return unless HOMEBREW_PREFIX.to_s == '/usr/local'
unless Pathname('/usr/local').writable? then <<-EOS.undent
unless Pathname('/usr/local').writable_real? then <<-EOS.undent
The /usr/local directory is not writable.
Even if this directory was writable when you installed Homebrew, other
software may change permissions on this directory. Some versions of the
......@@ -322,7 +322,7 @@ end
def __check_folder_access base, msg
folder = HOMEBREW_PREFIX+base
if folder.exist? and not folder.writable?
if folder.exist? and not folder.writable_real?
<<-EOS.undent
#{folder} isn't writable.
This can happen if you "sudo make install" software that isn't managed
......
......@@ -33,8 +33,8 @@ module Homebrew extend self
end
def check_writable_install_location
raise "Cannot write to #{HOMEBREW_CELLAR}" if HOMEBREW_CELLAR.exist? and not HOMEBREW_CELLAR.writable?
raise "Cannot write to #{HOMEBREW_PREFIX}" unless HOMEBREW_PREFIX.writable? or HOMEBREW_PREFIX.to_s == '/usr/local'
raise "Cannot write to #{HOMEBREW_CELLAR}" if HOMEBREW_CELLAR.exist? and not HOMEBREW_CELLAR.writable_real?
raise "Cannot write to #{HOMEBREW_PREFIX}" unless HOMEBREW_PREFIX.writable_real? or HOMEBREW_PREFIX.to_s == '/usr/local'
end
def check_xcode
......
......@@ -353,7 +353,7 @@ class Pathname
To list all files that would be deleted:
brew link -n formula_name
EOS
elsif !dirname.writable?
elsif !dirname.writable_real?
raise <<-EOS.undent
Could not symlink file: #{src.expand_path}
#{dirname} is not writable. You should change its permissions.
......@@ -375,7 +375,7 @@ class Pathname
def ensure_writable
saved_perms = nil
unless writable?
unless writable_real?
saved_perms = stat.mode
chmod 0644
end
......
......@@ -16,7 +16,7 @@ def cache
# we do this for historic reasons, however the cache *should* be the same
# directory whichever user is used and whatever instance of brew is executed
home_cache = Pathname.new("~/Library/Caches/Homebrew").expand_path
if home_cache.directory? and home_cache.writable?
if home_cache.directory? and home_cache.writable_real?
home_cache
else
root_cache = Pathname.new("/Library/Caches/Homebrew")
......
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