aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/utils.rb
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Homebrew/utils.rb')
-rw-r--r--Library/Homebrew/utils.rb32
1 files changed, 32 insertions, 0 deletions
diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb
index c37633e41..60af39d93 100644
--- a/Library/Homebrew/utils.rb
+++ b/Library/Homebrew/utils.rb
@@ -221,6 +221,38 @@ module Homebrew
EOS
end
+ def run_bundler_if_needed!
+ return unless Pathname.glob("#{HOMEBREW_GEM_HOME}/bin/*").empty?
+
+ if Gem::Specification.find_all_by_name("bundler").empty?
+ ohai "Installing Bundler..."
+
+ # 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(%w[--no-ri --no-rdoc bundler])
+ 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 Bundler!" if exit_code.nonzero?
+ end
+
+ HOMEBREW_REPOSITORY.cd do
+ unless quiet_system("bundle", "check")
+ ohai "Installing RubyGems..."
+ success = system "bundle", "install",
+ "--path", "Library/Homebrew/vendor",
+ "--standalone",
+ "--jobs", "3"
+ odie "Failed to install RubyGems!" unless success
+ end
+ end
+ end
+
# Hash of Module => Set(method_names)
@injected_dump_stat_modules = {}