diff options
author | Samuel Giddins <[email protected]> | 2023-11-27 16:06:27 -0600 |
---|---|---|
committer | git <[email protected]> | 2023-12-01 19:50:03 +0000 |
commit | 0ed55bf09713299201caec3ba9d9ef7ba6e8526f (patch) | |
tree | 4235b408a02137787a6af425b6695a965f1fe8f2 /lib | |
parent | a607d62d8c5786087916413c369dbde0c62db573 (diff) |
[rubygems/rubygems] Reduce array allocations when loading definition
The same array was being re-created in a loop (as well as the `generic_local_platform`), which is avoidable by hoisting it to a frozen array created once
https://github.com/rubygems/rubygems/commit/009a3c6d0d
Diffstat (limited to 'lib')
-rw-r--r-- | lib/bundler/definition.rb | 13 | ||||
-rw-r--r-- | lib/bundler/dependency.rb | 5 |
2 files changed, 14 insertions, 4 deletions
diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb index 4162e19c5e..ca12827579 100644 --- a/lib/bundler/definition.rb +++ b/lib/bundler/definition.rb @@ -245,8 +245,9 @@ module Bundler end def filter_relevant(dependencies) + platforms_array = [generic_local_platform].freeze dependencies.select do |d| - d.should_include? && !d.gem_platforms([generic_local_platform]).empty? + d.should_include? && !d.gem_platforms(platforms_array).empty? end end @@ -270,9 +271,15 @@ module Bundler def dependencies_for(groups) groups.map!(&:to_sym) - current_dependencies.reject do |d| - (d.groups & groups).empty? + deps = current_dependencies # always returns a new array + deps.select! do |d| + if RUBY_VERSION >= "3.1" + d.groups.intersect?(groups) + else + !(d.groups & groups).empty? + end end + deps end # Resolve all the dependencies specified in Gemfile. It ensures that diff --git a/lib/bundler/dependency.rb b/lib/bundler/dependency.rb index 21a4564dcc..82c4c1866b 100644 --- a/lib/bundler/dependency.rb +++ b/lib/bundler/dependency.rb @@ -48,10 +48,13 @@ module Bundler @autorequire = Array(options["require"] || []) if options.key?("require") end + RUBY_PLATFORM_ARRAY = [Gem::Platform::RUBY].freeze + private_constant :RUBY_PLATFORM_ARRAY + # Returns the platforms this dependency is valid for, in the same order as # passed in the `valid_platforms` parameter def gem_platforms(valid_platforms) - return [Gem::Platform::RUBY] if force_ruby_platform + return RUBY_PLATFORM_ARRAY if force_ruby_platform return valid_platforms if @platforms.empty? valid_platforms.select {|p| expanded_platforms.include?(GemHelpers.generic(p)) } |