Fix issues with writable? detection in brew doctor
Closes Homebrew/homebrew#13689. Signed-off-by: Max 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 :/
This commit is contained in:
parent
1f62284384
commit
bcde6432f3
@ -73,7 +73,7 @@ supplied, patches will also be downloaded and applied.
|
|||||||
unpack_dir.mkpath unless unpack_dir.exist?
|
unpack_dir.mkpath unless unpack_dir.exist?
|
||||||
end
|
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|
|
formulae.each do |f|
|
||||||
# Create a nice name for the stage folder.
|
# 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/man/man5 share/man/man6 share/man/man7 share/man/man8
|
||||||
share/info share/doc share/aclocal ).
|
share/info share/doc share/aclocal ).
|
||||||
map{ |d| "/usr/local/#{d}" }.
|
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? }
|
chgrps = chmods.reject{ |d| File.stat(d).grpowned? }
|
||||||
|
|
||||||
unless chmods.empty?
|
unless chmods.empty?
|
||||||
|
|||||||
@ -279,7 +279,7 @@ def __check_subdir_access base
|
|||||||
|
|
||||||
target.find do |d|
|
target.find do |d|
|
||||||
next unless d.directory?
|
next unless d.directory?
|
||||||
cant_read << d unless d.writable?
|
cant_read << d unless d.writable_real?
|
||||||
end
|
end
|
||||||
|
|
||||||
cant_read.sort!
|
cant_read.sort!
|
||||||
@ -300,7 +300,7 @@ end
|
|||||||
def check_access_usr_local
|
def check_access_usr_local
|
||||||
return unless HOMEBREW_PREFIX.to_s == '/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.
|
The /usr/local directory is not writable.
|
||||||
Even if this directory was writable when you installed Homebrew, other
|
Even if this directory was writable when you installed Homebrew, other
|
||||||
software may change permissions on this directory. Some versions of the
|
software may change permissions on this directory. Some versions of the
|
||||||
@ -322,7 +322,7 @@ end
|
|||||||
|
|
||||||
def __check_folder_access base, msg
|
def __check_folder_access base, msg
|
||||||
folder = HOMEBREW_PREFIX+base
|
folder = HOMEBREW_PREFIX+base
|
||||||
if folder.exist? and not folder.writable?
|
if folder.exist? and not folder.writable_real?
|
||||||
<<-EOS.undent
|
<<-EOS.undent
|
||||||
#{folder} isn't writable.
|
#{folder} isn't writable.
|
||||||
This can happen if you "sudo make install" software that isn't managed
|
This can happen if you "sudo make install" software that isn't managed
|
||||||
|
|||||||
@ -33,8 +33,8 @@ module Homebrew extend self
|
|||||||
end
|
end
|
||||||
|
|
||||||
def check_writable_install_location
|
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_CELLAR}" if HOMEBREW_CELLAR.exist? and not HOMEBREW_CELLAR.writable_real?
|
||||||
raise "Cannot write to #{HOMEBREW_PREFIX}" unless HOMEBREW_PREFIX.writable? or HOMEBREW_PREFIX.to_s == '/usr/local'
|
raise "Cannot write to #{HOMEBREW_PREFIX}" unless HOMEBREW_PREFIX.writable_real? or HOMEBREW_PREFIX.to_s == '/usr/local'
|
||||||
end
|
end
|
||||||
|
|
||||||
def check_xcode
|
def check_xcode
|
||||||
|
|||||||
@ -353,7 +353,7 @@ class Pathname
|
|||||||
To list all files that would be deleted:
|
To list all files that would be deleted:
|
||||||
brew link -n formula_name
|
brew link -n formula_name
|
||||||
EOS
|
EOS
|
||||||
elsif !dirname.writable?
|
elsif !dirname.writable_real?
|
||||||
raise <<-EOS.undent
|
raise <<-EOS.undent
|
||||||
Could not symlink file: #{src.expand_path}
|
Could not symlink file: #{src.expand_path}
|
||||||
#{dirname} is not writable. You should change its permissions.
|
#{dirname} is not writable. You should change its permissions.
|
||||||
@ -375,7 +375,7 @@ class Pathname
|
|||||||
|
|
||||||
def ensure_writable
|
def ensure_writable
|
||||||
saved_perms = nil
|
saved_perms = nil
|
||||||
unless writable?
|
unless writable_real?
|
||||||
saved_perms = stat.mode
|
saved_perms = stat.mode
|
||||||
chmod 0644
|
chmod 0644
|
||||||
end
|
end
|
||||||
|
|||||||
@ -16,7 +16,7 @@ def cache
|
|||||||
# we do this for historic reasons, however the cache *should* be the same
|
# 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
|
# directory whichever user is used and whatever instance of brew is executed
|
||||||
home_cache = Pathname.new("~/Library/Caches/Homebrew").expand_path
|
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
|
home_cache
|
||||||
else
|
else
|
||||||
root_cache = Pathname.new("/Library/Caches/Homebrew")
|
root_cache = Pathname.new("/Library/Caches/Homebrew")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user