utils: inject Ruby path when running Gems

Particularly the `bundler` Gem requires the right Ruby binary to be in
the PATH to work correctly if the Ruby binary used to run Homebrew is
overridden via `HOMEBREW_RUBY_PATH` and thus intentionally not prefixed
to the PATH (as that would affect formulae with a Ruby dependency).

The workaround here is to prefix this path only when a Gem is activated
via `Homebrew.install_gem_setup_path!` (currently used in `brew man`,
`brew style`, and `brew tests`).
This commit is contained in:
Martin Afanasjew 2016-01-05 01:09:54 +01:00
parent 35c58faa19
commit 8dc1e05ff8

View File

@ -231,7 +231,12 @@ module Homebrew
def self.install_gem_setup_path!(gem, version = nil, executable = gem) def self.install_gem_setup_path!(gem, version = nil, executable = gem)
require "rubygems" require "rubygems"
ENV["PATH"] = "#{Gem.user_dir}/bin:#{ENV["PATH"]}"
# 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")
ENV["PATH"] = path.join(File::PATH_SEPARATOR)
if Gem::Specification.find_all_by_name(gem, version).empty? if Gem::Specification.find_all_by_name(gem, version).empty?
ohai "Installing or updating '#{gem}' gem" ohai "Installing or updating '#{gem}' gem"