summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/bundler/rubygems_ext.rb23
-rw-r--r--lib/bundler/rubygems_integration.rb24
-rw-r--r--spec/bundler/runtime/setup_spec.rb17
3 files changed, 40 insertions, 24 deletions
diff --git a/lib/bundler/rubygems_ext.rb b/lib/bundler/rubygems_ext.rb
index 1520deaf31..b96edd5e2d 100644
--- a/lib/bundler/rubygems_ext.rb
+++ b/lib/bundler/rubygems_ext.rb
@@ -29,29 +29,6 @@ unless Gem.ruby_version.to_s == RUBY_VERSION || RUBY_PATCHLEVEL == -1
end
module Gem
-
- BUNDLED_GEMS = {
- "rexml" => "3.0.0",
- "rss" => "3.0.0",
- "webrick" => "3.0.0",
- "matrix" => "3.1.0",
- "net-ftp" => "3.1.0",
- "net-imap" => "3.1.0",
- "net-pop" => "3.1.0",
- "net-smtp" => "3.1.0",
- "abbrev" => "3.4.0",
- "observer" => "3.4.0",
- "getoptlong" => "3.4.0",
- "resolv-replace" => "3.4.0",
- "rinda" => "3.4.0",
- "nkf" => "3.4.0",
- "syslog" => "3.4.0",
- "drb" => "3.4.0",
- "mutex_m" => "3.4.0",
- "csv" => "3.4.0",
- "base64" => "3.4.0"
- }.freeze
-
class Specification
include ::Bundler::MatchMetadata
include ::Bundler::MatchPlatform
diff --git a/lib/bundler/rubygems_integration.rb b/lib/bundler/rubygems_integration.rb
index 8f2b6994ed..29940d75f5 100644
--- a/lib/bundler/rubygems_integration.rb
+++ b/lib/bundler/rubygems_integration.rb
@@ -1,6 +1,10 @@
# frozen_string_literal: true
require "rubygems" unless defined?(Gem)
+begin
+ require "bundled_gems" unless defined?(Gem::BUNDLED_GEMS)
+rescue LoadError
+end
module Bundler
class RubygemsIntegration
@@ -225,6 +229,20 @@ module Bundler
end
end
+ def reverse_rubygems_kernel_mixin
+ # Disable rubygems' gem activation system
+ if Gem.respond_to?(:discover_gems_on_require=)
+ Gem.discover_gems_on_require = false
+ else
+ kernel = (class << ::Kernel; self; end)
+ [kernel, ::Kernel].each do |k|
+ if k.private_method_defined?(:gem_original_require)
+ redefine_method(k, :require, k.instance_method(:gem_original_require))
+ end
+ end
+ end
+ end
+
def replace_require(specs)
return if [::Kernel.singleton_class, ::Kernel].any?{|klass| klass.respond_to?(:no_warning_require)}
@@ -370,7 +388,11 @@ module Bundler
def replace_entrypoints(specs)
specs_by_name = add_default_gems_to(specs)
- replace_require(specs)
+ if defined?(::Gem::BUNDLED_GEMS)
+ replace_require(specs)
+ else
+ reverse_rubygems_kernel_mixin
+ end
replace_gem(specs, specs_by_name)
stub_rubygems(specs)
replace_bin_path(specs_by_name)
diff --git a/spec/bundler/runtime/setup_spec.rb b/spec/bundler/runtime/setup_spec.rb
index dde418bf1d..644a93efab 100644
--- a/spec/bundler/runtime/setup_spec.rb
+++ b/spec/bundler/runtime/setup_spec.rb
@@ -1566,7 +1566,12 @@ end
gem "rack"
G
+
ruby <<-R
+ module Gem
+ remove_const :BUNDLED_GEMS if defined?(BUNDLED_GEMS)
+ BUNDLED_GEMS = { "csv" => "1.0.0" }
+ end
require 'bundler/setup'
require 'csv'
R
@@ -1585,6 +1590,10 @@ end
G
ruby <<-R
+ module Gem
+ remove_const :BUNDLED_GEMS if defined?(BUNDLED_GEMS)
+ BUNDLED_GEMS = { "csv" => "1.0.0" }
+ end
require 'csv'
require 'bundler/setup'
require 'csv'
@@ -1604,6 +1613,10 @@ end
G
ruby <<-R
+ module Gem
+ remove_const :BUNDLED_GEMS if defined?(BUNDLED_GEMS)
+ BUNDLED_GEMS = { "csv" => "1.0.0" }
+ end
require 'bundler/setup'
require 'csv'
R
@@ -1625,6 +1638,10 @@ end
G
ruby <<-R
+ module Gem
+ remove_const :BUNDLED_GEMS if defined?(BUNDLED_GEMS)
+ BUNDLED_GEMS = { "csv" => "1.0.0", "net-imap" => "0.0.1" }
+ end
require 'bundler/setup'
begin
require 'net/imap'