aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlyssa Ross2016-09-19 16:59:33 +0100
committerAlyssa Ross2016-09-19 19:09:55 +0100
commit4c773725c7683ec624863459ac3b4a3237a7382f (patch)
treef72e57f7d01e99e096de40d8d854a7a8a5336f5b
parent13f08a2bd4ff3aec13423fa5bb62b6ef08ffa0c4 (diff)
downloadbrew-4c773725c7683ec624863459ac3b4a3237a7382f.tar.bz2
Use user GEM_HOME for installing gems
Save the value of GEM_HOME before unsetting it, and resetting it when setting up a gem environment. Fixes #944.
-rw-r--r--Library/Homebrew/brew.sh4
-rw-r--r--Library/Homebrew/utils.rb13
2 files changed, 14 insertions, 3 deletions
diff --git a/Library/Homebrew/brew.sh b/Library/Homebrew/brew.sh
index 0fadecaba..e8d2fe469 100644
--- a/Library/Homebrew/brew.sh
+++ b/Library/Homebrew/brew.sh
@@ -59,6 +59,10 @@ then
odie "Cowardly refusing to continue at this prefix: $HOMEBREW_PREFIX"
fi
+# Save value to use for installing gems
+export GEM_OLD_HOME="$GEM_HOME"
+export GEM_OLD_PATH="$GEM_PATH"
+
# Users may have these set, pointing the system Ruby
# at non-system gem paths
unset GEM_HOME
diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb
index cda67a8c6..8121b7146 100644
--- a/Library/Homebrew/utils.rb
+++ b/Library/Homebrew/utils.rb
@@ -270,17 +270,24 @@ module Homebrew
end
def self.install_gem_setup_path!(name, version = nil, executable = name)
- require "rubygems"
+ # Respect user's preferences for where gems should be installed.
+ ENV["GEM_HOME"] = ENV["GEM_OLD_HOME"].to_s
+ ENV["GEM_HOME"] = Gem.user_dir if ENV["GEM_HOME"].empty?
+ ENV["GEM_PATH"] = ENV["GEM_OLD_PATH"] unless ENV["GEM_OLD_PATH"].to_s.empty?
+
+ # Make rubygems notice env changes.
+ Gem.clear_paths
+ Gem::Specification.reset
# Add Gem binary directory and (if missing) Ruby binary directory to PATH.
path = ENV["PATH"].split(File::PATH_SEPARATOR)
path.unshift(RUBY_BIN) if which("ruby") != RUBY_PATH
- path.unshift("#{Gem.user_dir}/bin")
+ path.unshift("#{Gem.dir}/bin")
ENV["PATH"] = path.join(File::PATH_SEPARATOR)
if Gem::Specification.find_all_by_name(name, version).empty?
ohai "Installing or updating '#{name}' gem"
- install_args = %W[--no-ri --no-rdoc --user-install #{name}]
+ install_args = %W[--no-ri --no-rdoc #{name}]
install_args << "--version" << version if version
# Do `gem install [...]` without having to spawn a separate process or