class Bundler::Resolver
def all_versions_for(package)
def all_versions_for(package) name = package.name results = (@base[name] + filter_prereleases(@all_specs[name], package)).uniq {|spec| [spec.version.hash, spec.platform] } if name == "bundler" && !bundler_pinned_to_current_version? bundler_spec = Gem.loaded_specs["bundler"] results << bundler_spec if bundler_spec end locked_requirement = base_requirements[name] results = filter_matching_specs(results, locked_requirement) if locked_requirement results.group_by(&:version).reduce([]) do |groups, (version, specs)| platform_specs = package.platforms.map {|platform| select_best_platform_match(specs, platform) } # If package is a top-level dependency, # candidate is only valid if there are matching versions for all resolution platforms. # # If package is not a top-level deependency, # then it's not necessary that it has matching versions for all platforms, since it may have been introduced only as # a dependency for a platform specific variant, so it will only need to have a valid version for that platform. # if package.top_level? next groups if platform_specs.any?(&:empty?) else next groups if platform_specs.all?(&:empty?) end platform_specs.flatten! ruby_specs = select_best_platform_match(specs, Gem::Platform::RUBY) groups << Resolver::Candidate.new(version, specs: ruby_specs) if ruby_specs.any? next groups if platform_specs == ruby_specs || package.force_ruby_platform? groups << Resolver::Candidate.new(version, specs: platform_specs) groups end end