diff options
| author | Samuel Giddins <segiddins@segiddins.me> | 2017-09-10 13:15:19 -0700 |
|---|---|---|
| committer | Samuel Giddins <segiddins@segiddins.me> | 2017-09-13 15:38:18 -0500 |
| commit | 7326958a66c21a19586cbaf9027a08cf2ff20971 (patch) | |
| tree | 527e4aed6e33a971fb4952e7e4d1401284965655 /lib/bundler/source | |
| parent | 018ca4b31f2effb1b14bffb625f5430af959573b (diff) | |
| download | bundler-7326958a66c21a19586cbaf9027a08cf2ff20971.tar.gz | |
Avoid request-bloat in double checking logic
This avoids attempting to double-check in each source for gems that are _in the locally installed set of gems_, which could add hundreds or thousands of extra requests
Diffstat (limited to 'lib/bundler/source')
| -rw-r--r-- | lib/bundler/source/rubygems.rb | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/lib/bundler/source/rubygems.rb b/lib/bundler/source/rubygems.rb index fa60bb0c84..02835a5485 100644 --- a/lib/bundler/source/rubygems.rb +++ b/lib/bundler/source/rubygems.rb @@ -259,13 +259,32 @@ module Bundler return unless api_fetchers.any? unmet_dependency_names = unmet_dependency_names.call - return if !unmet_dependency_names.nil? && unmet_dependency_names.empty? + unless unmet_dependency_names.nil? + unmet_dependency_names -= remote_specs.spec_names # avoid re-fetching things we've already gotten + return if unmet_dependency_names.empty? + end Bundler.ui.debug "Double checking for #{unmet_dependency_names || "all specs (due to the size of the request)"} in #{self}" fetch_names(api_fetchers, unmet_dependency_names, index, override_dupes) end + def dependency_names_to_double_check + names = [] + remote_specs.each do |spec| + case spec + when EndpointSpecification, Gem::Specification, StubSpecification, LazySpecification + names.concat(spec.runtime_dependencies) + when RemoteSpecification # from the full index + return nil + else + raise "unhandled spec type (#{spec.inspect})" + end + end + names.map!(&:name) if names + names + end + protected def credless_remotes |
