Skip to content

Commit e30e86a

Browse files
committed
Extract Gem::BUNDLED_GEMS from Bundler
1 parent 9583a7e commit e30e86a

File tree

3 files changed

+40
-24
lines changed

3 files changed

+40
-24
lines changed

bundler/lib/bundler/rubygems_ext.rb

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,29 +29,6 @@
2929
end
3030

3131
module Gem
32-
33-
BUNDLED_GEMS = {
34-
"rexml" => "3.0.0",
35-
"rss" => "3.0.0",
36-
"webrick" => "3.0.0",
37-
"matrix" => "3.1.0",
38-
"net-ftp" => "3.1.0",
39-
"net-imap" => "3.1.0",
40-
"net-pop" => "3.1.0",
41-
"net-smtp" => "3.1.0",
42-
"abbrev" => "3.4.0",
43-
"observer" => "3.4.0",
44-
"getoptlong" => "3.4.0",
45-
"resolv-replace" => "3.4.0",
46-
"rinda" => "3.4.0",
47-
"nkf" => "3.4.0",
48-
"syslog" => "3.4.0",
49-
"drb" => "3.4.0",
50-
"mutex_m" => "3.4.0",
51-
"csv" => "3.4.0",
52-
"base64" => "3.4.0"
53-
}.freeze
54-
5532
class Specification
5633
include ::Bundler::MatchMetadata
5734
include ::Bundler::MatchPlatform

bundler/lib/bundler/rubygems_integration.rb

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# frozen_string_literal: true
22

33
require "rubygems" unless defined?(Gem)
4+
begin
5+
require "bundled_gems" unless defined?(Gem::BUNDLED_GEMS)
6+
rescue LoadError
7+
end
48

59
module Bundler
610
class RubygemsIntegration
@@ -225,6 +229,20 @@ def security_policies
225229
end
226230
end
227231

232+
def reverse_rubygems_kernel_mixin
233+
# Disable rubygems' gem activation system
234+
if Gem.respond_to?(:discover_gems_on_require=)
235+
Gem.discover_gems_on_require = false
236+
else
237+
kernel = (class << ::Kernel; self; end)
238+
[kernel, ::Kernel].each do |k|
239+
if k.private_method_defined?(:gem_original_require)
240+
redefine_method(k, :require, k.instance_method(:gem_original_require))
241+
end
242+
end
243+
end
244+
end
245+
228246
def replace_require(specs)
229247
return if [::Kernel.singleton_class, ::Kernel].any?{|klass| klass.respond_to?(:no_warning_require)}
230248

@@ -370,7 +388,11 @@ def replace_bin_path(specs_by_name)
370388
def replace_entrypoints(specs)
371389
specs_by_name = add_default_gems_to(specs)
372390

373-
replace_require(specs)
391+
if defined?(::Gem::BUNDLED_GEMS)
392+
replace_require(specs)
393+
else
394+
reverse_rubygems_kernel_mixin
395+
end
374396
replace_gem(specs, specs_by_name)
375397
stub_rubygems(specs)
376398
replace_bin_path(specs_by_name)

bundler/spec/runtime/setup_spec.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1566,7 +1566,12 @@ def require(path)
15661566
gem "rack"
15671567
G
15681568

1569+
15691570
ruby <<-R
1571+
module Gem
1572+
remove_const :BUNDLED_GEMS if defined?(BUNDLED_GEMS)
1573+
BUNDLED_GEMS = { "csv" => "1.0.0" }
1574+
end
15701575
require 'bundler/setup'
15711576
require 'csv'
15721577
R
@@ -1585,6 +1590,10 @@ def require(path)
15851590
G
15861591

15871592
ruby <<-R
1593+
module Gem
1594+
remove_const :BUNDLED_GEMS if defined?(BUNDLED_GEMS)
1595+
BUNDLED_GEMS = { "csv" => "1.0.0" }
1596+
end
15881597
require 'csv'
15891598
require 'bundler/setup'
15901599
require 'csv'
@@ -1604,6 +1613,10 @@ def require(path)
16041613
G
16051614

16061615
ruby <<-R
1616+
module Gem
1617+
remove_const :BUNDLED_GEMS if defined?(BUNDLED_GEMS)
1618+
BUNDLED_GEMS = { "csv" => "1.0.0" }
1619+
end
16071620
require 'bundler/setup'
16081621
require 'csv'
16091622
R
@@ -1625,6 +1638,10 @@ def require(path)
16251638
G
16261639

16271640
ruby <<-R
1641+
module Gem
1642+
remove_const :BUNDLED_GEMS if defined?(BUNDLED_GEMS)
1643+
BUNDLED_GEMS = { "csv" => "1.0.0", "net-imap" => "0.0.1" }
1644+
end
16281645
require 'bundler/setup'
16291646
begin
16301647
require 'net/imap'

0 commit comments

Comments
 (0)