[rubygems/rubygems] Lazily parse dependencies in EndpointSpecification

Since not every dependency gets referenced.

When resolving from scratch a Gemfile including only `"gem "rails", "~>
8.0.1"`, I get the following results:

### Before

Total allocated: 295.01 MB (3624335 objects)
Total retained:  119.31 MB (1364474 objects)

### After
Total allocated: 288.21 MB (3498515 objects)
Total retained:  119.10 MB (1357976 objects)

https://github.com/rubygems/rubygems/commit/61eee39d81

Co-authored-by: Samuel Giddins <segiddins@segiddins.me>
This commit is contained in:
David Rodríguez 2025-01-30 11:31:54 +01:00 committed by Hiroshi SHIBATA
parent c83370671b
commit 8e7883011a

View File

@ -6,7 +6,8 @@ module Bundler
include MatchRemoteMetadata
attr_reader :name, :version, :platform, :checksum
attr_accessor :remote, :dependencies, :locked_platform
attr_writer :dependencies
attr_accessor :remote, :locked_platform
def initialize(name, version, platform, spec_fetcher, dependencies, metadata = nil)
super()
@ -14,7 +15,8 @@ module Bundler
@version = Gem::Version.create version
@platform = Gem::Platform.new(platform)
@spec_fetcher = spec_fetcher
@dependencies = dependencies.map {|dep, reqs| build_dependency(dep, reqs) }
@dependencies = nil
@unbuilt_dependencies = dependencies
@loaded_from = nil
@remote_specification = nil
@ -31,6 +33,10 @@ module Bundler
@platform
end
def dependencies
@dependencies ||= @unbuilt_dependencies.map! {|dep, reqs| build_dependency(dep, reqs) }
end
# needed for standalone, load required_paths from local gemspec
# after the gem is installed
def require_paths