From 7fed6c887d68e1347defcd1364b0ceb5ba18a2b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Thu, 30 Jan 2025 15:34:02 +0100 Subject: [PATCH] [rubygems/rubygems] Remove unnecessary remapping of dependencies Sometimes we'll resolve using bare `Gem::Dependency` instances rather than `Bundler::Dependency` instances, which is fine, simpler, and saves some memory. When resolving from scratch a Gemfile including only `"gem "rails", "~> 8.0.1"`, I get the following results: ### Before Total allocated: 277.48 MB (3384318 objects) Total retained: 117.53 MB (1338657 objects) ### After Total allocated: 265.06 MB (3186053 objects) Total retained: 116.98 MB (1302280 objects) https://github.com/rubygems/rubygems/commit/c6dc2966c5 --- lib/bundler/endpoint_specification.rb | 3 ++- lib/bundler/resolver/spec_group.rb | 11 +---------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/lib/bundler/endpoint_specification.rb b/lib/bundler/endpoint_specification.rb index 9fdf3ec9ce..c06684657d 100644 --- a/lib/bundler/endpoint_specification.rb +++ b/lib/bundler/endpoint_specification.rb @@ -36,6 +36,7 @@ module Bundler def dependencies @dependencies ||= @unbuilt_dependencies.map! {|dep, reqs| build_dependency(dep, reqs) } end + alias_method :runtime_dependencies, :dependencies # needed for standalone, load required_paths from local gemspec # after the gem is installed @@ -167,7 +168,7 @@ module Bundler end def build_dependency(name, requirements) - Gem::Dependency.new(name, requirements) + Dependency.new(name, requirements) end end end diff --git a/lib/bundler/resolver/spec_group.rb b/lib/bundler/resolver/spec_group.rb index c3b72e2798..1b448b617f 100644 --- a/lib/bundler/resolver/spec_group.rb +++ b/lib/bundler/resolver/spec_group.rb @@ -40,7 +40,7 @@ module Bundler def dependencies @dependencies ||= @specs.flat_map do |spec| - __dependencies(spec) + metadata_dependencies(spec) + spec.runtime_dependencies + metadata_dependencies(spec) end.uniq.sort end @@ -72,15 +72,6 @@ module Bundler @specs.first end - def __dependencies(spec) - dependencies = [] - spec.dependencies.each do |dep| - next if dep.type == :development - dependencies << Dependency.new(dep.name, dep.requirement) - end - dependencies - end - def metadata_dependencies(spec) [ metadata_dependency("Ruby", spec.required_ruby_version),