bundler/lib/bundler/source/rubygems_aggregate.rb
# Suppose the gem Foo depends on the gem Bar.  Foo exists in Source A.  Bar has some versions that exist in both
# sources A and B.  At this point, the API request will have found all the versions of Bar in source A,
# but will not have found any versions of Bar from source B, which is a problem if the requested version
# of Foo specifically depends on a version of Bar that is only found in source B. This ensures that for
# each spec we found, we add all possible versions from all sources to the index.
Suppose the gem Foo depends on the gem Bar.  Foo exists in Source A.  Bar has some versions that exist in both
sources A and B.  At this point, the API request will have found all the versions of Bar in source A,
but will not have found any versions of Bar from source B, which is a problem if the requested version
of Foo specifically depends on a version of Bar that is only found in source B. This ensures that for
each spec we found, we add all possible versions from all sources to the index.
Suppose the gem Foo depends on the gem Bar . Foo exists in Source A . Bar has some versions that exist in both sources A and B . At this point the API request will have found all the versions of Bar in source A but will not have found any versions of Bar from source B which is a problem if the requested version of Foo specifically depends on a version of Bar that is only found in source B . This ensures that for each spec we found we add all possible versions from all sources to the index .
def double_check_for_index(idx, dependency_names)
        pinned_names = source_map.pinned_spec_names
        names = :names 
        unmet_dependency_names = lambda do
          return names unless names == :names
          new_names = sources.all_sources.map(&:dependency_names_to_double_check)
          return names = nil if new_names.compact!
          names = new_names.flatten(1).concat(dependency_names)
          names.uniq!
          names -= pinned_names
          names
        end
        sources.all_sources.each do |source|
          source.double_check_for(unmet_dependency_names)
        end
      end
def double_check_for_index ( idx , dependency_names ) pinned_names = source_map . pinned_spec_names names = :names unmet_dependency_names = lambda do return names unless names == :names new_names = sources . all_sources . map ( & :dependency_names_to_double_check ) return names = nil if new_names . compact! names = new_names . flatten ( 1 ) . concat ( dependency_names ) names . uniq! names -= pinned_names names end sources . all_sources . each do | source | source . double_check_for ( unmet_dependency_names ) end end
Suppose the gem Foo depends on the gem Bar.
Suppose the gem Foo depends on the gem Bar .
# do this so we only have to traverse to get dependency_names from the index once
idx
<not_specific>
dependency_names
<not_specific>