diff options
| author | David RodrÃguez <deivid.rodriguez@riseup.net> | 2024-05-22 21:08:53 +0200 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2024-05-24 15:02:30 +0000 |
| commit | 744dd5a362eca2000eadb1873e7c0118aef97fe4 (patch) | |
| tree | b5f87929e8f0d38ea2b559cde22ae89d950dcacc /lib | |
| parent | c23798c2c47d531d6ed9a8557899b6f582ea6e1b (diff) | |
[rubygems/rubygems] Fix performance regression on applications with a local cache
Even if all gems are properly installed and no resolve is needed, we
recently started always reading all packages in `vendor/cache` and
extracting specifications from them.
This commit fixes the problem by longer making considering cached specs
the default and only enable them when a resolve is actually needed.
https://github.com/rubygems/rubygems/commit/edeb2c42bf
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/bundler/definition.rb | 2 | ||||
| -rw-r--r-- | lib/bundler/self_manager.rb | 2 | ||||
| -rw-r--r-- | lib/bundler/source/rubygems.rb | 3 | ||||
| -rw-r--r-- | lib/bundler/source_list.rb | 8 | ||||
| -rw-r--r-- | lib/bundler/spec_set.rb | 1 |
5 files changed, 10 insertions, 6 deletions
diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb index 5c9437a83c..6cf1f9a255 100644 --- a/lib/bundler/definition.rb +++ b/lib/bundler/definition.rb @@ -168,11 +168,13 @@ module Bundler end def resolve_with_cache! + sources.local! sources.cached! resolve end def resolve_remotely! + sources.cached! sources.remote! resolve end diff --git a/lib/bundler/self_manager.rb b/lib/bundler/self_manager.rb index bfd000b1a0..5accda4bcb 100644 --- a/lib/bundler/self_manager.rb +++ b/lib/bundler/self_manager.rb @@ -113,7 +113,7 @@ module Bundler end def local_specs - @local_specs ||= Bundler::Source::Rubygems.new("allow_local" => true, "allow_cached" => true).specs.select {|spec| spec.name == "bundler" } + @local_specs ||= Bundler::Source::Rubygems.new("allow_local" => true).specs.select {|spec| spec.name == "bundler" } end def remote_specs diff --git a/lib/bundler/source/rubygems.rb b/lib/bundler/source/rubygems.rb index 2e76becb84..553039ea17 100644 --- a/lib/bundler/source/rubygems.rb +++ b/lib/bundler/source/rubygems.rb @@ -17,7 +17,7 @@ module Bundler @remotes = [] @dependency_names = [] @allow_remote = false - @allow_cached = options["allow_cached"] || false + @allow_cached = false @allow_local = options["allow_local"] || false @checksum_store = Checksum::Store.new @@ -53,7 +53,6 @@ module Bundler return if @allow_cached @specs = nil - @allow_local = true @allow_cached = true end diff --git a/lib/bundler/source_list.rb b/lib/bundler/source_list.rb index ece2177d49..5f9dd68f17 100644 --- a/lib/bundler/source_list.rb +++ b/lib/bundler/source_list.rb @@ -9,7 +9,7 @@ module Bundler :metadata_source def global_rubygems_source - @global_rubygems_source ||= rubygems_aggregate_class.new("allow_local" => true, "allow_cached" => true) + @global_rubygems_source ||= rubygems_aggregate_class.new("allow_local" => true) end def initialize @@ -145,6 +145,10 @@ module Bundler all_sources.each(&:local_only!) end + def local! + all_sources.each(&:local!) + end + def cached! all_sources.each(&:cached!) end @@ -185,7 +189,7 @@ module Bundler replacement_source = replace_rubygems_source(replacement_sources, global_rubygems_source) return global_rubygems_source unless replacement_source - replacement_source.cached! + replacement_source.local! replacement_source end diff --git a/lib/bundler/spec_set.rb b/lib/bundler/spec_set.rb index 8e1130e40e..2933d28450 100644 --- a/lib/bundler/spec_set.rb +++ b/lib/bundler/spec_set.rb @@ -129,7 +129,6 @@ module Bundler def materialized_for_all_platforms @specs.map do |s| next s unless s.is_a?(LazySpecification) - s.source.cached! s.source.remote! spec = s.materialize_for_installation raise GemNotFound, "Could not find #{s.full_name} in any of the sources" unless spec |
