[前][次][番号順一覧][スレッド一覧]

ruby-changes:74443

From: Yusuke <ko1@a...>
Date: Fri, 11 Nov 2022 07:45:45 +0900 (JST)
Subject: [ruby-changes:74443] b5f809c496 (master): [rubygems/rubygems] Load "bundler/setup" in lib/rubygems.rb

https://git.ruby-lang.org/ruby.git/commit/?id=b5f809c496

From b5f809c4961bd43b8e77cceebad44e341618998d Mon Sep 17 00:00:00 2001
From: Yusuke Endoh <mame@r...>
Date: Sat, 29 Oct 2022 01:19:36 +0900
Subject: [rubygems/rubygems] Load "bundler/setup" in lib/rubygems.rb

Ruby interpreter loads some special gems at startup: did_you_mean,
error_highlight, and syntax_suggest. These gems are loaded before
`bundler/setup` is loaded by `RUBYOPT=-rbundler/setup`.
So, the versions of the gems are not controllable by Gemfile.

This change will `require "bundler/setup"` in rubygems.rb (i.e., before
the special gems are loaded). Now `bundle exec` sets an environment
variable `BUNDLER_SETUP`, and rubygems requires the variable if defined.

See also: https://bugs.ruby-lang.org/issues/19089

https://github.com/rubygems/rubygems/commit/963cb65a2d
---
 lib/bundler/environment_preserver.rb        | 1 +
 lib/bundler/shared_helpers.rb               | 1 +
 lib/rubygems.rb                             | 2 ++
 spec/bundler/bundler/shared_helpers_spec.rb | 7 +++++++
 4 files changed, 11 insertions(+)

diff --git a/lib/bundler/environment_preserver.rb b/lib/bundler/environment_preserver.rb
index 0f08e049d8..70967522af 100644
--- a/lib/bundler/environment_preserver.rb
+++ b/lib/bundler/environment_preserver.rb
@@ -7,6 +7,7 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/environment_preserver.rb#L7
       BUNDLE_BIN_PATH
       BUNDLE_GEMFILE
       BUNDLER_VERSION
+      BUNDLER_SETUP
       GEM_HOME
       GEM_PATH
       MANPATH
diff --git a/lib/bundler/shared_helpers.rb b/lib/bundler/shared_helpers.rb
index 899eb68e0a..0a6afe0e5a 100644
--- a/lib/bundler/shared_helpers.rb
+++ b/lib/bundler/shared_helpers.rb
@@ -284,6 +284,7 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/shared_helpers.rb#L284
       Bundler::SharedHelpers.set_env "BUNDLE_BIN_PATH", exe_file
       Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", find_gemfile.to_s
       Bundler::SharedHelpers.set_env "BUNDLER_VERSION", Bundler::VERSION
+      Bundler::SharedHelpers.set_env "BUNDLER_SETUP", File.expand_path("setup", __dir__)
     end
 
     def set_path
diff --git a/lib/rubygems.rb b/lib/rubygems.rb
index 915a899f38..43b1c45288 100644
--- a/lib/rubygems.rb
+++ b/lib/rubygems.rb
@@ -1348,3 +1348,5 @@ Gem::Specification.load_defaults https://github.com/ruby/ruby/blob/trunk/lib/rubygems.rb#L1348
 require_relative "rubygems/core_ext/kernel_gem"
 require_relative "rubygems/core_ext/kernel_require"
 require_relative "rubygems/core_ext/kernel_warn"
+
+require ENV["BUNDLER_SETUP"] if ENV["BUNDLER_SETUP"]
diff --git a/spec/bundler/bundler/shared_helpers_spec.rb b/spec/bundler/bundler/shared_helpers_spec.rb
index 68a24be31c..569d6ed9cd 100644
--- a/spec/bundler/bundler/shared_helpers_spec.rb
+++ b/spec/bundler/bundler/shared_helpers_spec.rb
@@ -246,6 +246,13 @@ RSpec.describe Bundler::SharedHelpers do https://github.com/ruby/ruby/blob/trunk/spec/bundler/bundler/shared_helpers_spec.rb#L246
       end
     end
 
+    shared_examples_for "ENV['BUNDLER_SETUP'] gets set correctly" do
+      it "ensures bundler/setup is set in ENV['BUNDLE_SETUP']" do
+        subject.set_bundle_environment
+        expect(ENV["BUNDLER_SETUP"]).to eq("#{source_lib_dir}/bundler/setup")
+      end
+    end
+
     shared_examples_for "ENV['RUBYLIB'] gets set correctly" do
       let(:ruby_lib_path) { "stubbed_ruby_lib_dir" }
 
-- 
cgit v1.2.3


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]