Skip to content

Commit 2a41608

Browse files
authored
Merge pull request #9651 from ruby/claude/determined-jang-442e41
Reuse RubyGems' vendored SecureRandom in Bundler
2 parents 210f463 + 08ebcf2 commit 2a41608

9 files changed

Lines changed: 36 additions & 173 deletions

File tree

Manifest.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -292,8 +292,6 @@ lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb
292292
lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb
293293
lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb
294294
lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb
295-
lib/bundler/vendor/securerandom/COPYING
296-
lib/bundler/vendor/securerandom/lib/securerandom.rb
297295
lib/bundler/vendor/thor/LICENSE.md
298296
lib/bundler/vendor/thor/lib/thor.rb
299297
lib/bundler/vendor/thor/lib/thor/actions.rb

bundler.gemspec

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,11 @@ Gem::Specification.new do |s|
3636

3737
s.files = Dir.glob("lib/bundler{.rb,/**/*}", File::FNM_DOTMATCH).reject {|f| File.directory?(f) }
3838

39-
# Bundler reuses RubyGems' vendored URI. Ship a copy under lib/rubygems so
40-
# Bundler stays self-contained on RubyGems versions that predate it.
39+
# Bundler reuses RubyGems' vendored URI and SecureRandom. Ship a copy under
40+
# lib/rubygems so Bundler stays self-contained on RubyGems versions that
41+
# predate them.
4142
s.files += Dir.glob("lib/rubygems/vendor/uri/**/*", File::FNM_DOTMATCH).reject {|f| File.directory?(f) }
43+
s.files += Dir.glob("lib/rubygems/vendor/securerandom/**/*", File::FNM_DOTMATCH).reject {|f| File.directory?(f) }
4244

4345
# include the gemspec itself because warbler breaks w/o it
4446
s.files += %w[bundler.gemspec]

lib/bundler/vendor/securerandom/COPYING

Lines changed: 0 additions & 56 deletions
This file was deleted.

lib/bundler/vendor/securerandom/lib/securerandom.rb

Lines changed: 0 additions & 102 deletions
This file was deleted.
Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
# frozen_string_literal: true
22

3-
# Use RubyGems vendored copy when available. Otherwise fallback to Bundler
4-
# vendored copy. The vendored copy in Bundler can be removed once support for
5-
# RubyGems 3.5.18 is dropped.
3+
# Reuse RubyGems' vendored SecureRandom (Gem::SecureRandom). The Bundler gem
4+
# ships a copy under lib/rubygems/vendor, so this resolves even on RubyGems
5+
# versions that predate it. Fall back to the stdlib only when no vendored copy
6+
# is available at all.
67

7-
begin
8-
require "rubygems/vendored_securerandom"
9-
rescue LoadError
10-
require_relative "vendor/securerandom/lib/securerandom"
11-
Gem::SecureRandom = Bundler::SecureRandom
8+
unless defined?(Gem::SecureRandom)
9+
begin
10+
require "rubygems/vendor/securerandom/lib/securerandom"
11+
rescue LoadError
12+
require "securerandom"
13+
Gem::SecureRandom = SecureRandom
14+
end
1215
end

lib/rubygems/vendor/securerandom/lib/securerandom.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@
3838
# If a secure random number generator is not available,
3939
# +NotImplementedError+ is raised.
4040

41+
# Skip reloading when an identical copy (e.g. the one shipped inside the Bundler
42+
# gem) was already required from a different path, to avoid redefinition warnings.
43+
return if defined?(Gem::SecureRandom::VERSION)
44+
4145
module Gem::SecureRandom
4246

4347
# The version

spec/support/path.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ def git_ls_files(glob)
345345
end
346346

347347
def tracked_files_glob
348-
ruby_core? ? "libexec/bundle* lib/bundler lib/bundler.rb lib/rubygems/vendor/uri spec/bundler man/bundle*" : "exe/bundle exe/bundler lib/bundler lib/bundler.rb lib/rubygems/vendor/uri bundler.gemspec CHANGELOG-bundler.md LICENSE-bundler.md README-bundler.md"
348+
ruby_core? ? "libexec/bundle* lib/bundler lib/bundler.rb lib/rubygems/vendor/uri lib/rubygems/vendor/securerandom spec/bundler man/bundle*" : "exe/bundle exe/bundler lib/bundler lib/bundler.rb lib/rubygems/vendor/uri lib/rubygems/vendor/securerandom bundler.gemspec CHANGELOG-bundler.md LICENSE-bundler.md README-bundler.md"
349349
end
350350

351351
def lib_tracked_files_glob
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
diff --git a/lib/rubygems/vendor/securerandom/lib/securerandom.rb b/lib/rubygems/vendor/securerandom/lib/securerandom.rb
2+
index b6f1d71ad3..dd759fedaa 100644
3+
--- a/lib/rubygems/vendor/securerandom/lib/securerandom.rb
4+
+++ b/lib/rubygems/vendor/securerandom/lib/securerandom.rb
5+
@@ -38,6 +38,10 @@
6+
# If a secure random number generator is not available,
7+
# +NotImplementedError+ is raised.
8+
9+
+# Skip reloading when an identical copy (e.g. the one shipped inside the Bundler
10+
+# gem) was already required from a different path, to avoid redefinition warnings.
11+
+return if defined?(Gem::SecureRandom::VERSION)
12+
+
13+
module Gem::SecureRandom
14+
15+
# The version

tool/automatiek/vendor.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ def require_target
8686
VendoredGem.new(name: "net-protocol", namespace: "Net", prefix: "Gem", vendor_lib: "lib/rubygems/vendor/net-protocol", license_path: "LICENSE.txt"),
8787
VendoredGem.new(name: "optparse", namespace: "OptionParser", prefix: "Gem", vendor_lib: "lib/rubygems/vendor/optparse", license_path: "COPYING", extra_dependencies: %w[uri/lib/rubygems/vendor/uri], patch_name: "optparse-v0.8.0.patch"),
8888
VendoredGem.new(name: "resolv", namespace: "Resolv", prefix: "Gem", vendor_lib: "lib/rubygems/vendor/resolv", license_path: "COPYING", extra_dependencies: %w[securerandom/lib/rubygems/vendor/securerandom timeout], patch_name: "resolv-v0.7.0.patch"),
89-
VendoredGem.new(name: "securerandom", namespace: "SecureRandom", prefix: "Gem", vendor_lib: "lib/rubygems/vendor/securerandom", license_path: "COPYING"),
89+
VendoredGem.new(name: "securerandom", namespace: "SecureRandom", prefix: "Gem", vendor_lib: "lib/rubygems/vendor/securerandom", license_path: "COPYING", patch_name: "securerandom-rubygems.patch"),
9090
VendoredGem.new(name: "timeout", namespace: "Timeout", prefix: "Gem", vendor_lib: "lib/rubygems/vendor/timeout", license_path: "COPYING", patch_name: "timeout-v0.4.3.patch"),
9191
VendoredGem.new(name: "tsort", namespace: "TSort", prefix: "Gem", vendor_lib: "lib/rubygems/vendor/tsort", license_path: "LICENSE.txt"),
9292
VendoredGem.new(name: "uri", namespace: "URI", prefix: "Gem", vendor_lib: "lib/rubygems/vendor/uri", license_path: "COPYING", patch_name: "uri-rubygems.patch"),
@@ -95,7 +95,6 @@ def require_target
9595
VendoredGem.new(name: "fileutils", namespace: "FileUtils", prefix: "Bundler", vendor_lib: "lib/bundler/vendor/fileutils", license_path: "COPYING"),
9696
VendoredGem.new(name: "pub_grub", namespace: "PubGrub", prefix: "Bundler", vendor_lib: "lib/bundler/vendor/pub_grub", license_path: "LICENSE.txt"),
9797
VendoredGem.new(name: "thor", namespace: "Thor", prefix: "Bundler", vendor_lib: "lib/bundler/vendor/thor", license_path: "LICENSE.md", patch_name: "thor-v1.4.0.patch"),
98-
VendoredGem.new(name: "securerandom", namespace: "SecureRandom", prefix: "Bundler", vendor_lib: "lib/bundler/vendor/securerandom", license_path: "COPYING"),
9998
].group_by(&:name)
10099

101100
Bundler.definition.resolve.materialized_for_all_platforms.reject {|s| ignore.include?(s.name) }.each do |s|

0 commit comments

Comments
 (0)