Skip to content

Commit

Permalink
Extract Gem::BUNDLED_GEMS from Bundler
Browse files Browse the repository at this point in the history
  • Loading branch information
hsbt committed Jul 21, 2023
1 parent 637ffb9 commit 0e5bc60
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 24 deletions.
23 changes: 23 additions & 0 deletions lib/bundled_gems.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
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
end
23 changes: 0 additions & 23 deletions lib/bundler/rubygems_ext.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,29 +29,6 @@
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
Expand Down
21 changes: 20 additions & 1 deletion lib/bundler/rubygems_integration.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# frozen_string_literal: true

require "rubygems" unless defined?(Gem)
require "bundled_gems" unless defined?(Gem::BUNDLED_GEMS)

module Bundler
class RubygemsIntegration
Expand Down Expand Up @@ -225,6 +226,20 @@ def security_policies
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)}

Expand Down Expand Up @@ -370,7 +385,11 @@ def replace_bin_path(specs_by_name)
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)
Expand Down
17 changes: 17 additions & 0 deletions spec/bundler/runtime/setup_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1556,7 +1556,12 @@ def require(path)
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
Expand All @@ -1575,6 +1580,10 @@ def require(path)
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'
Expand All @@ -1594,6 +1603,10 @@ def require(path)
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
Expand All @@ -1615,6 +1628,10 @@ def require(path)
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'
Expand Down

0 comments on commit 0e5bc60

Please sign in to comment.