aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew
diff options
context:
space:
mode:
authorMike McQuaid2016-09-09 08:06:37 +0100
committerMike McQuaid2016-09-09 08:06:37 +0100
commit492391f5feb5b7d2c33973729d8243f1909078f6 (patch)
tree3657ad828a8f194fc0ffcad8ac4c88d9ca066d93 /Library/Homebrew
parent1d66cdd3ade841c6b7cd8a71d4b71d5426d00a58 (diff)
downloadbrew-492391f5feb5b7d2c33973729d8243f1909078f6.tar.bz2
Don't require/recommend ownership of /usr/local.
Apple reset this on every OS X major (and some minor) updates and it always proves a painful and unnecessary step. Instead just check the directories we actually care about are writable. This may mean if these directories do not already exist (although they are now created by the installed) that `brew link` will fail and require manual intervention but this seems to be superior for both new and the majority of existing users.
Diffstat (limited to 'Library/Homebrew')
-rw-r--r--Library/Homebrew/cmd/update.sh9
-rw-r--r--Library/Homebrew/diagnostic.rb42
2 files changed, 34 insertions, 17 deletions
diff --git a/Library/Homebrew/cmd/update.sh b/Library/Homebrew/cmd/update.sh
index ed51444c5..4a4a56bc3 100644
--- a/Library/Homebrew/cmd/update.sh
+++ b/Library/Homebrew/cmd/update.sh
@@ -341,12 +341,13 @@ EOS
fi
# check permissions
- if [[ "$HOMEBREW_PREFIX" = "/usr/local" && ! -w /usr/local ]]
+ if [[ -e "$HOMEBREW_CELLAR" && ! -w "$HOMEBREW_CELLAR" ]]
then
odie <<EOS
-/usr/local is not writable. You should change the ownership
-and permissions of /usr/local back to your user account:
- sudo chown -R \$(whoami) /usr/local
+$HOMEBREW_CELLAR is not writable. You should change the
+ownership and permissions of $HOMEBREW_CELLAR back to your
+user account:
+ sudo chown -R \$(whoami) $HOMEBREW_CELLAR
EOS
fi
diff --git a/Library/Homebrew/diagnostic.rb b/Library/Homebrew/diagnostic.rb
index 230c96bfc..c064e9169 100644
--- a/Library/Homebrew/diagnostic.rb
+++ b/Library/Homebrew/diagnostic.rb
@@ -324,21 +324,37 @@ module Homebrew
EOS
end
- def check_access_usr_local
- return unless HOMEBREW_PREFIX.to_s == "/usr/local"
- return if HOMEBREW_PREFIX.writable_real?
+ def check_access_homebrew_cellar
+ return if HOMEBREW_CELLAR.writable_real?
<<-EOS.undent
- /usr/local is not writable.
- Even if this directory was writable when you installed Homebrew, other
- software may change permissions on this directory. For example, upgrading
- to OS X El Capitan has been known to do this. Some versions of the
- "InstantOn" component of Airfoil or running Cocktail cleanup/optimizations
- are known to do this as well.
-
- You should change the ownership and permissions of /usr/local back to
- your user account.
- sudo chown -R $(whoami) /usr/local
+ #{HOMEBREW_CELLAR} is not writable.
+
+ You should change the ownership and permissions of #{HOMEBREW_CELLAR}
+ back to your user account.
+ sudo chown -R $(whoami) #{HOMEBREW_CELLAR}
+ EOS
+ end
+
+ def check_access_top_level_directories
+ not_writable_dirs = []
+
+ (Keg::TOP_LEVEL_DIRECTORIES + ["opt"]).each do |dir|
+ path = HOMEBREW_PREFIX/dir
+ next unless path.exist?
+ next if path.writable_real?
+ not_writable_dirs << path
+ end
+
+ return if not_writable_dirs.empty?
+
+ <<-EOS.undent
+ The following directories are not writable:
+ #{not_writable_dirs.join("\n")}
+
+ You should change the ownership and permissions of these directories.
+ back to your user account.
+ sudo chown -R $(whoami) #{not_writable_dirs.join(" ")}
EOS
end