aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/brew.rb27
-rw-r--r--Library/Homebrew/brew.sh4
-rw-r--r--Library/Homebrew/config.rb5
-rw-r--r--Library/Homebrew/os/mac/mach.rb5
-rw-r--r--Library/Homebrew/test/support/lib/config.rb6
-rw-r--r--Library/Homebrew/utils.rb42
6 files changed, 25 insertions, 64 deletions
diff --git a/Library/Homebrew/brew.rb b/Library/Homebrew/brew.rb
index 6dab50f29..e19819cf5 100644
--- a/Library/Homebrew/brew.rb
+++ b/Library/Homebrew/brew.rb
@@ -8,13 +8,13 @@ std_trap = trap("INT") { exit! 130 } # no backtrace thanks
RUBY_TWO = RUBY_VERSION.split(".").first.to_i >= 2
raise "Homebrew must be run under Ruby 2!" unless RUBY_TWO
-homebrew_library_path = File.dirname(File.realpath(__FILE__))
-$:.unshift(homebrew_library_path)
-
-require_relative "#{homebrew_library_path}/vendor/bundler/setup"
-
require "pathname"
-HOMEBREW_LIBRARY_PATH = Pathname.new(homebrew_library_path)
+HOMEBREW_LIBRARY_PATH = Pathname.new(__FILE__).realpath.parent
+$:.unshift(HOMEBREW_LIBRARY_PATH)
+
+load_path_before_bundler = $:.dup
+require_relative "#{HOMEBREW_LIBRARY_PATH}/vendor/bundler/setup"
+ENV["HOMEBREW_GEMS_LOAD_PATH"] = ($: - load_path_before_bundler).join(":")
require "global"
require "tap"
@@ -25,8 +25,6 @@ if ARGV == %w[--version] || ARGV == %w[-v]
exit 0
end
-HOMEBREW_GEM_HOME = HOMEBREW_LIBRARY_PATH/"vendor/#{RUBY_ENGINE}/#{RUBY_VERSION}"
-
def require?(path)
require path
rescue LoadError => e
@@ -60,18 +58,21 @@ begin
path.append(Pathname.glob(Tap::TAP_DIRECTORY/"*/*/cmd"))
# Add RubyGems.
- ENV["GEM_HOME"] = ENV["GEM_PATH"] = HOMEBREW_GEM_HOME
+ HOMEBREW_GEM_HOME = HOMEBREW_LIBRARY_PATH/"vendor/#{RUBY_ENGINE}/#{RUBY_VERSION}"
path.append(HOMEBREW_GEM_HOME/"bin")
- # Make RubyGems notice environment changes.
- Gem.clear_paths
- Gem::Specification.reset
-
# Add SCM wrappers.
path.append(HOMEBREW_SHIMS_PATH/"scm")
ENV["PATH"] = path
+ # Setup RubyGems environment.
+ ENV["GEM_HOME"] = ENV["GEM_PATH"] = HOMEBREW_GEM_HOME
+ # Make RubyGems notice environment changes.
+ Gem.clear_paths
+ Gem::Specification.reset
+ Homebrew.run_bundler_if_needed! unless HOMEBREW_GEM_HOME.exist?
+
if cmd
internal_cmd = require? HOMEBREW_LIBRARY_PATH.join("cmd", cmd)
diff --git a/Library/Homebrew/brew.sh b/Library/Homebrew/brew.sh
index 02ce5e1c1..6f4453f28 100644
--- a/Library/Homebrew/brew.sh
+++ b/Library/Homebrew/brew.sh
@@ -69,10 +69,6 @@ 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/config.rb b/Library/Homebrew/config.rb
index 38d7c8043..ef07434de 100644
--- a/Library/Homebrew/config.rb
+++ b/Library/Homebrew/config.rb
@@ -46,5 +46,8 @@ unless defined? HOMEBREW_LIBRARY_PATH
HOMEBREW_LIBRARY_PATH = Pathname.new(__FILE__).realpath.parent
end
+# Load path to vendored gems used by Homebrew
+HOMEBREW_GEMS_LOAD_PATH = ENV["HOMEBREW_GEMS_LOAD_PATH"]
+
# Load path used by standalone scripts to access the Homebrew code base
-HOMEBREW_LOAD_PATH = HOMEBREW_LIBRARY_PATH
+HOMEBREW_LOAD_PATH = [HOMEBREW_LIBRARY_PATH, *HOMEBREW_GEMS_LOAD_PATH].join(":")
diff --git a/Library/Homebrew/os/mac/mach.rb b/Library/Homebrew/os/mac/mach.rb
index 71f501fe9..416183f68 100644
--- a/Library/Homebrew/os/mac/mach.rb
+++ b/Library/Homebrew/os/mac/mach.rb
@@ -1,10 +1,11 @@
-require "macho"
require "os/mac/architecture_list"
module MachOShim
# @private
def macho
@macho ||= begin
+ require "macho"
+
MachO.open(to_s)
end
end
@@ -12,6 +13,8 @@ module MachOShim
# @private
def mach_data
@mach_data ||= begin
+ require "macho"
+
machos = []
mach_data = []
diff --git a/Library/Homebrew/test/support/lib/config.rb b/Library/Homebrew/test/support/lib/config.rb
index fb5c210fe..41f4cbe33 100644
--- a/Library/Homebrew/test/support/lib/config.rb
+++ b/Library/Homebrew/test/support/lib/config.rb
@@ -14,9 +14,9 @@ TEST_TMPDIR = ENV.fetch("HOMEBREW_TEST_TMPDIR") do |k|
end
# Paths pointing into the Homebrew code base that persist across test runs
-HOMEBREW_LIBRARY_PATH = Pathname.new(File.expand_path("../../../..", __FILE__))
-HOMEBREW_SHIMS_PATH = HOMEBREW_LIBRARY_PATH.parent+"Homebrew/shims"
-HOMEBREW_LOAD_PATH = [File.expand_path("..", __FILE__), HOMEBREW_LIBRARY_PATH].join(":")
+HOMEBREW_LIBRARY_PATH = Pathname.new(File.expand_path("../../../..", __FILE__))
+HOMEBREW_SHIMS_PATH = HOMEBREW_LIBRARY_PATH.parent+"Homebrew/shims"
+HOMEBREW_LOAD_PATH = [File.expand_path("..", __FILE__), HOMEBREW_LIBRARY_PATH, ENV["HOMEBREW_GEMS_LOAD_PATH"]].join(":")
# Paths redirected to a temporary directory and wiped at the end of the test run
HOMEBREW_PREFIX = Pathname.new(TEST_TMPDIR).join("prefix")
diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb
index 60af39d93..6ae75a4fb 100644
--- a/Library/Homebrew/utils.rb
+++ b/Library/Homebrew/utils.rb
@@ -179,48 +179,6 @@ module Homebrew
_system(cmd, *args)
end
- def install_gem_setup_path!(name, version = nil, executable = name)
- # 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 = PATH.new(ENV["PATH"])
- path.prepend(RUBY_BIN) if which("ruby") != RUBY_PATH
- path.prepend(Gem.bindir)
- ENV["PATH"] = path
-
- if Gem::Specification.find_all_by_name(name, version).empty?
- ohai "Installing or updating '#{name}' gem"
- 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
- # having to find the right `gem` binary for the running Ruby interpreter.
- require "rubygems/commands/install_command"
- install_cmd = Gem::Commands::InstallCommand.new
- install_cmd.handle_options(install_args)
- exit_code = 1 # Should not matter as `install_cmd.execute` always throws.
- begin
- install_cmd.execute
- rescue Gem::SystemExitException => e
- exit_code = e.exit_code
- end
- odie "Failed to install/update the '#{name}' gem." if exit_code.nonzero?
- end
-
- return if which(executable)
- odie <<-EOS.undent
- The '#{name}' gem is installed but couldn't find '#{executable}' in the PATH:
- #{ENV["PATH"]}
- EOS
- end
-
def run_bundler_if_needed!
return unless Pathname.glob("#{HOMEBREW_GEM_HOME}/bin/*").empty?