From 9e135d47c3ced3f206ab8cdf9eaef391f87ae0da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Tue, 23 Jul 2019 18:44:21 +0200 Subject: [PATCH] Remove unnecessary rubygems monkeypatch Instead, make sure we always load the local copy of bundler during specs, and never end up using the default copy. --- lib/bundler.rb | 2 +- spec/commands/pristine_spec.rb | 3 +- spec/install/gemfile/groups_spec.rb | 2 +- spec/install/gems/compact_index_spec.rb | 2 + spec/install/gems/dependency_api_spec.rb | 2 + spec/plugins/source/example_spec.rb | 1 - spec/realworld/double_check_spec.rb | 4 +- spec/runtime/executable_spec.rb | 20 ++++----- spec/runtime/inline_spec.rb | 6 +-- spec/runtime/load_spec.rb | 2 +- spec/runtime/require_spec.rb | 2 +- spec/runtime/setup_spec.rb | 52 ++++++++++++------------ spec/runtime/with_unbundled_env_spec.rb | 5 ++- spec/support/artifice/endpoint.rb | 2 +- spec/support/hax.rb | 10 +---- spec/support/helpers.rb | 6 ++- 16 files changed, 60 insertions(+), 61 deletions(-) diff --git a/lib/bundler.rb b/lib/bundler.rb index 1887457c779..e8bcb33732c 100644 --- a/lib/bundler.rb +++ b/lib/bundler.rb @@ -299,7 +299,7 @@ def unbundled_env env.delete_if {|k, _| k[0, 7] == "BUNDLE_" } if env.key?("RUBYOPT") - env["RUBYOPT"] = env["RUBYOPT"].sub "-rbundler/setup", "" + env["RUBYOPT"] = env["RUBYOPT"].sub "-r#{File.expand_path("bundler/setup", __dir__)}", "" end if env.key?("RUBYLIB") diff --git a/spec/commands/pristine_spec.rb b/spec/commands/pristine_spec.rb index 252bef6d0d9..aa5c2213d1f 100644 --- a/spec/commands/pristine_spec.rb +++ b/spec/commands/pristine_spec.rb @@ -42,8 +42,7 @@ expect(changes_txt).to_not be_file end - it "does not delete the bundler gem", :rubygems => ">= 2.6.2" do - ENV["BUNDLER_SPEC_KEEP_DEFAULT_BUNDLER_GEM"] = "true" + it "does not delete the bundler gem" do system_gems :bundler bundle! "install" bundle! "pristine", :system_bundler => true diff --git a/spec/install/gemfile/groups_spec.rb b/spec/install/gemfile/groups_spec.rb index b38e8b43d5e..0c8858cba40 100644 --- a/spec/install/gemfile/groups_spec.rb +++ b/spec/install/gemfile/groups_spec.rb @@ -333,7 +333,7 @@ G ruby <<-R - require "bundler" + require "#{__dir__}/../../../lib/bundler" Bundler.setup :default Bundler.require :default puts RACK diff --git a/spec/install/gems/compact_index_spec.rb b/spec/install/gems/compact_index_spec.rb index 2c145ce6431..09fcb18cbd2 100644 --- a/spec/install/gems/compact_index_spec.rb +++ b/spec/install/gems/compact_index_spec.rb @@ -528,6 +528,8 @@ def require(*args) gem "rack" G + system_gems :bundler + bundle "install --binstubs", :artifice => "compact_index" gembin "rackup" diff --git a/spec/install/gems/dependency_api_spec.rb b/spec/install/gems/dependency_api_spec.rb index a8713eb445c..fc02d4505c6 100644 --- a/spec/install/gems/dependency_api_spec.rb +++ b/spec/install/gems/dependency_api_spec.rb @@ -502,6 +502,8 @@ def require(*args) gem "rack" G + system_gems :bundler + bundle "install --binstubs", :artifice => "endpoint" gembin "rackup" diff --git a/spec/plugins/source/example_spec.rb b/spec/plugins/source/example_spec.rb index 7bc8fb0f29b..1ef7c2134df 100644 --- a/spec/plugins/source/example_spec.rb +++ b/spec/plugins/source/example_spec.rb @@ -6,7 +6,6 @@ build_repo2 do build_plugin "bundler-source-mpath" do |s| s.write "plugins.rb", <<-RUBY - require "bundler/vendored_fileutils" require "bundler-source-mpath" class MPath < Bundler::Plugin::API diff --git a/spec/realworld/double_check_spec.rb b/spec/realworld/double_check_spec.rb index 6fee578a71a..dea3c5f9682 100644 --- a/spec/realworld/double_check_spec.rb +++ b/spec/realworld/double_check_spec.rb @@ -25,9 +25,9 @@ RUBY cmd = <<-RUBY - require "bundler" + require #{File.expand_path("../../../lib/bundler.rb", __FILE__).dump} require #{File.expand_path("../../support/artifice/vcr.rb", __FILE__).dump} - require "bundler/inline" + require #{File.expand_path("../../../lib/bundler/inline.rb", __FILE__).dump} gemfile(true) do source "https://rubygems.org" gem "rails", path: "." diff --git a/spec/runtime/executable_spec.rb b/spec/runtime/executable_spec.rb index 974637f7e50..5ee98781b62 100644 --- a/spec/runtime/executable_spec.rb +++ b/spec/runtime/executable_spec.rb @@ -9,7 +9,7 @@ end it "runs the bundled command when in the bundle" do - bundle! "binstubs rack" + bundle! "binstubs rack bundler" build_gem "rack", "2.0", :to_system => true do |s| s.executables = "rackup" @@ -20,7 +20,7 @@ end it "allows the location of the gem stubs to be specified" do - bundle! "binstubs rack", :path => "gbin" + bundle! "binstubs rack bundler", :path => "gbin" expect(bundled_app("bin")).not_to exist expect(bundled_app("gbin/rackup")).to exist @@ -30,19 +30,19 @@ end it "allows absolute paths as a specification of where to install bin stubs" do - bundle! "binstubs rack", :path => tmp("bin") + bundle! "binstubs rack bundler", :path => tmp("bin") gembin tmp("bin/rackup") expect(out).to eq("1.0.0") end it "uses the default ruby install name when shebang is not specified" do - bundle! "binstubs rack" + bundle! "binstubs rack bundler" expect(File.open("bin/rackup").gets).to eq("#!/usr/bin/env #{RbConfig::CONFIG["ruby_install_name"]}\n") end it "allows the name of the shebang executable to be specified" do - bundle! "binstubs rack", :shebang => "ruby-foo" + bundle! "binstubs rack bundler", :shebang => "ruby-foo" expect(File.open("bin/rackup").gets).to eq("#!/usr/bin/env ruby-foo\n") end @@ -69,7 +69,7 @@ gem "rack", :path => "#{lib_path("rack")}" G - bundle! "binstubs rack" + bundle! "binstubs rack bundler" build_gem "rack", "2.0", :to_system => true do |s| s.executables = "rackup" @@ -138,7 +138,7 @@ create_file("bin/rackup", "OMG") - bundle! "binstubs rack" + bundle! "binstubs rack bundler" expect(bundled_app("bin/rackup").read).to_not eq("OMG") end @@ -162,12 +162,12 @@ bundle "install" bundle! "binstubs bindir" - # remove user settings - ENV["BUNDLE_GEMFILE"] = nil - # run binstub for non default Gemfile gembin "foo" + # remove user settings + ENV["BUNDLE_GEMFILE"] = nil + expect(exitstatus).to eq(0) if exitstatus expect(out).to eq("1.0") end diff --git a/spec/runtime/inline_spec.rb b/spec/runtime/inline_spec.rb index 6168c0c1973..9518783cc36 100644 --- a/spec/runtime/inline_spec.rb +++ b/spec/runtime/inline_spec.rb @@ -2,7 +2,7 @@ RSpec.describe "bundler/inline#gemfile" do def script(code, options = {}) - requires = ["bundler/inline"] + requires = ["../../lib/bundler/inline.rb"] requires.unshift File.expand_path("../../support/artifice/" + options.delete(:artifice) + ".rb", __FILE__) if options.key?(:artifice) requires = requires.map {|r| "require '#{r}'" }.join("\n") @out = ruby("#{requires}\n\n" + code, options) @@ -96,7 +96,7 @@ def script(code, options = {}) it "lets me use my own ui object" do script <<-RUBY, :artifice => "endpoint" - require 'bundler' + require '../../lib/bundler' class MyBundlerUI < Bundler::UI::Silent def confirm(msg, newline = nil) puts "CONFIRMED!" @@ -140,7 +140,7 @@ def confirm(msg, newline = nil) it "does not mutate the option argument" do script <<-RUBY - require 'bundler' + require '../../lib/bundler' options = { :ui => Bundler::UI::Shell.new } gemfile(false, options) do path "#{lib_path}" do diff --git a/spec/runtime/load_spec.rb b/spec/runtime/load_spec.rb index 80ad6927690..a36ef6f30da 100644 --- a/spec/runtime/load_spec.rb +++ b/spec/runtime/load_spec.rb @@ -80,7 +80,7 @@ G ruby! <<-RUBY - require "bundler" + require "../../lib/bundler" Bundler.setup :default Bundler.require :default puts RACK diff --git a/spec/runtime/require_spec.rb b/spec/runtime/require_spec.rb index 016fc14dfec..26f91bf5ab7 100644 --- a/spec/runtime/require_spec.rb +++ b/spec/runtime/require_spec.rb @@ -193,7 +193,7 @@ G cmd = <<-RUBY - require 'bundler' + require '../../lib/bundler' Bundler.require RUBY ruby(cmd) diff --git a/spec/runtime/setup_spec.rb b/spec/runtime/setup_spec.rb index e15a5d2a0e5..db27c9adfbf 100644 --- a/spec/runtime/setup_spec.rb +++ b/spec/runtime/setup_spec.rb @@ -12,7 +12,7 @@ G ruby <<-RUBY - require 'bundler' + require '../../lib/bundler' Bundler.setup require 'rack' @@ -34,7 +34,7 @@ it "doesn't make all groups available" do ruby <<-RUBY - require 'bundler' + require '../../lib/bundler' Bundler.setup(:default) begin @@ -49,7 +49,7 @@ it "accepts string for group name" do ruby <<-RUBY - require 'bundler' + require '../../lib/bundler' Bundler.setup(:default, 'test') require 'rack' @@ -61,7 +61,7 @@ it "leaves all groups available if they were already" do ruby <<-RUBY - require 'bundler' + require '../../lib/bundler' Bundler.setup Bundler.setup(:default) @@ -74,7 +74,7 @@ it "leaves :default available if setup is called twice" do ruby <<-RUBY - require 'bundler' + require '../../lib/bundler' Bundler.setup(:default) Bundler.setup(:default, :test) @@ -91,7 +91,7 @@ it "handles multiple non-additive invocations" do ruby <<-RUBY - require 'bundler' + require '../../lib/bundler' Bundler.setup(:default, :test) Bundler.setup(:default) require 'rack' @@ -127,7 +127,7 @@ def clean_load_path(lp) ENV["RUBYLIB"] = "rubylib_dir" ruby <<-RUBY - require 'bundler' + require '../../lib/bundler' Bundler.setup puts $LOAD_PATH RUBY @@ -147,7 +147,7 @@ def clean_load_path(lp) G ruby! <<-RUBY - require 'bundler' + require '../../lib/bundler' Bundler.setup puts $LOAD_PATH RUBY @@ -174,7 +174,7 @@ def clean_load_path(lp) G ruby! <<-RUBY - require 'bundler/setup' + require '../../lib/bundler/setup' puts $LOAD_PATH RUBY @@ -291,7 +291,7 @@ def clean_load_path(lp) ENV["BUNDLE_GEMFILE"] = "Gemfile" ruby <<-R - require 'bundler' + require '../../lib/bundler' begin Bundler.setup @@ -446,7 +446,7 @@ def clean_load_path(lp) break_git! ruby <<-R - require 'bundler' + require '../../lib/bundler' begin Bundler.setup @@ -467,7 +467,7 @@ def clean_load_path(lp) break_git! ruby <<-R - require "bundler" + require "../../lib/bundler" begin Bundler.setup @@ -776,7 +776,7 @@ def clean_load_path(lp) s.class.send(:define_method, :build_extensions) { nil } end - require 'bundler' + require '../../lib/bundler' gem '#{gem_name}' puts $LOAD_PATH.count {|path| path =~ /#{gem_name}/} >= 2 @@ -1087,7 +1087,7 @@ def lock_with(bundler_version = nil) context "is not present" do it "does not change the lock" do lockfile lock_with(nil) - ruby "require 'bundler/setup'" + ruby "require '../../lib/bundler/setup'" lockfile_should_be lock_with(nil) end end @@ -1095,7 +1095,7 @@ def lock_with(bundler_version = nil) context "is newer" do it "does not change the lock or warn" do lockfile lock_with(Bundler::VERSION.succ) - ruby "require 'bundler/setup'" + ruby "require '../../lib/bundler/setup'" expect(out).to eq("") expect(err).to eq("") lockfile_should_be lock_with(Bundler::VERSION.succ) @@ -1105,7 +1105,7 @@ def lock_with(bundler_version = nil) context "is older" do it "does not change the lock" do lockfile lock_with("1.10.1") - ruby "require 'bundler/setup'" + ruby "require '../../lib/bundler/setup'" lockfile_should_be lock_with("1.10.1") end end @@ -1152,14 +1152,14 @@ def lock_with(ruby_version = nil) context "is not present" do it "does not change the lock" do - expect { ruby! "require 'bundler/setup'" }.not_to change { lockfile } + expect { ruby! "require '../../lib/bundler/setup'" }.not_to change { lockfile } end end context "is newer" do let(:ruby_version) { "5.5.5" } it "does not change the lock or warn" do - expect { ruby! "require 'bundler/setup'" }.not_to change { lockfile } + expect { ruby! "require '../../lib/bundler/setup'" }.not_to change { lockfile } expect(out).to eq("") expect(err).to eq("") end @@ -1168,7 +1168,7 @@ def lock_with(ruby_version = nil) context "is older" do let(:ruby_version) { "1.0.0" } it "does not change the lock" do - expect { ruby! "require 'bundler/setup'" }.not_to change { lockfile } + expect { ruby! "require '../../lib/bundler/setup'" }.not_to change { lockfile } end end end @@ -1177,7 +1177,7 @@ def lock_with(ruby_version = nil) it "does not load Psych" do gemfile "" ruby <<-RUBY - require 'bundler/setup' + require "../../lib/bundler/setup" puts defined?(Psych::VERSION) ? Psych::VERSION : "undefined" require 'psych' puts Psych::VERSION @@ -1190,7 +1190,7 @@ def lock_with(ruby_version = nil) it "does not load openssl" do install_gemfile! "" ruby! <<-RUBY - require "bundler/setup" + require "../../lib/bundler/setup" puts defined?(OpenSSL) || "undefined" require "openssl" puts defined?(OpenSSL) || "undefined" @@ -1203,7 +1203,7 @@ def lock_with(ruby_version = nil) if Gem::Version.new(Gem::VERSION) >= Gem::Version.new("2.7") [] else - %w[io-console openssl] + %w[io-console openssl fileutils etc] end << "bundler" end @@ -1244,7 +1244,7 @@ def lock_with(ruby_version = nil) it "activates no gems with -rbundler/setup" do install_gemfile! "" - ruby! code, :env => { :RUBYOPT => activation_warning_hack_rubyopt + " -rbundler/setup" } + ruby! code, :env => { :RUBYOPT => activation_warning_hack_rubyopt + " -r../../lib/bundler/setup" } expect(out).to eq("{}") end @@ -1319,7 +1319,7 @@ def lock_with(ruby_version = nil) G ruby! <<-RUBY - require "bundler/setup" + require "../../lib/bundler/setup" Object.new.gem "rack" puts Gem.loaded_specs["rack"].full_name RUBY @@ -1334,7 +1334,7 @@ def lock_with(ruby_version = nil) G ruby <<-RUBY - require "bundler/setup" + require "../../lib/bundler/setup" Object.new.gem "rack" puts "FAIL" RUBY @@ -1350,7 +1350,7 @@ def lock_with(ruby_version = nil) G ruby <<-RUBY - require "bundler/setup" + require "../../lib/bundler/setup" Object.new.require "rack" puts "FAIL" RUBY diff --git a/spec/runtime/with_unbundled_env_spec.rb b/spec/runtime/with_unbundled_env_spec.rb index 30e85180430..b5277f7d00e 100644 --- a/spec/runtime/with_unbundled_env_spec.rb +++ b/spec/runtime/with_unbundled_env_spec.rb @@ -74,9 +74,10 @@ def build_bundler_context it "should remove '-rbundler/setup' from RUBYOPT" do code = "print #{modified_env}['RUBYOPT']" - ENV["RUBYOPT"] = "-W2 -rbundler/setup #{ENV["RUBYOPT"]}" + setup_path = File.expand_path("../../lib/bundler/setup", __dir__) + ENV["RUBYOPT"] = "-W2 -r#{setup_path} #{ENV["RUBYOPT"]}" bundle_exec_ruby! code.dump - expect(last_command.stdboth).not_to include("-rbundler/setup") + expect(last_command.stdboth).not_to include("-r#{setup_path}") end it "should restore RUBYLIB", :ruby_repo do diff --git a/spec/support/artifice/endpoint.rb b/spec/support/artifice/endpoint.rb index fcced6ea359..10cdff82586 100644 --- a/spec/support/artifice/endpoint.rb +++ b/spec/support/artifice/endpoint.rb @@ -44,7 +44,7 @@ def dependencies_for(gem_names, gem_repo = GEM_REPO) return [] if gem_names.nil? || gem_names.empty? require "rubygems" - require "bundler" + require_relative "../../../lib/bundler" Bundler::Deprecate.skip_during do all_specs = %w[specs.4.8 prerelease_specs.4.8].map do |filename| Marshal.load(File.open(gem_repo.join(filename)).read) diff --git a/spec/support/hax.rb b/spec/support/hax.rb index 74daccc9dba..9b35a20cd05 100644 --- a/spec/support/hax.rb +++ b/spec/support/hax.rb @@ -12,16 +12,10 @@ class Platform @local = new(ENV["BUNDLER_SPEC_PLATFORM"]) if ENV["BUNDLER_SPEC_PLATFORM"] end @platforms = [Gem::Platform::RUBY, Gem::Platform.local] - - if defined?(@path_to_default_spec_map) && !ENV["BUNDLER_SPEC_KEEP_DEFAULT_BUNDLER_GEM"] - @path_to_default_spec_map.delete_if do |_path, spec| - spec.name == "bundler" - end - end end if ENV["BUNDLER_SPEC_VERSION"] - require "bundler/version" + require_relative "../../lib/bundler/version" module Bundler remove_const(:VERSION) if const_defined?(:VERSION) @@ -30,7 +24,7 @@ module Bundler end if ENV["BUNDLER_SPEC_WINDOWS"] == "true" - require "bundler/constants" + require_relative "../../lib/bundler/constants" module Bundler remove_const :WINDOWS if defined?(WINDOWS) diff --git a/spec/support/helpers.rb b/spec/support/helpers.rb index 2ced79a529c..ef94035bf17 100644 --- a/spec/support/helpers.rb +++ b/spec/support/helpers.rb @@ -77,7 +77,8 @@ def in_app_root_custom(root, &blk) def run(cmd, *args) opts = args.last.is_a?(Hash) ? args.pop : {} groups = args.map(&:inspect).join(", ") - setup = "require 'bundler' ; Bundler.setup(#{groups})\n" + bundler = File.expand_path("../../lib/bundler.rb", __dir__) + setup = "require '#{bundler}' ; Bundler.setup(#{groups})\n" ruby(setup + cmd, opts) end bang :run @@ -196,8 +197,9 @@ def load_error_ruby(ruby, name, opts = {}) end def gembin(cmd) + bundler_setup = File.expand_path("../../../lib/bundler/setup", __FILE__) old = ENV["RUBYOPT"] - ENV["RUBYOPT"] = "#{ENV["RUBYOPT"]} -I#{lib}" + ENV["RUBYOPT"] = "#{ENV["RUBYOPT"]} -I#{lib} -r#{bundler_setup}" cmd = bundled_app("bin/#{cmd}") unless cmd.to_s.include?("/") sys_exec(cmd.to_s) ensure