diff options
author | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2023-01-31 09:35:54 +0900 |
---|---|---|
committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2023-01-31 10:49:08 +0900 |
commit | d3822c9a8aa91151bd040d5635b723ff80bc1886 (patch) | |
tree | 65239bbe567a43b2f4925196fb20b11c8492179f /lib/bundler/resolver | |
parent | 4cbfd87e5a8464db42657ee0019f9bd78c15c05c (diff) |
Merge RubyGems/Bundler master.
Pick from https://github.com/rubygems/rubygems/commit/5ace20dbecfeaf09fba5f616193f3cfcff70ba00
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/7203
Diffstat (limited to 'lib/bundler/resolver')
-rw-r--r-- | lib/bundler/resolver/base.rb | 45 | ||||
-rw-r--r-- | lib/bundler/resolver/candidate.rb | 7 | ||||
-rw-r--r-- | lib/bundler/resolver/package.rb | 13 |
3 files changed, 51 insertions, 14 deletions
diff --git a/lib/bundler/resolver/base.rb b/lib/bundler/resolver/base.rb index 78b798f4ec..6921c047a7 100644 --- a/lib/bundler/resolver/base.rb +++ b/lib/bundler/resolver/base.rb @@ -1,19 +1,47 @@ # frozen_string_literal: true +require_relative "package" + module Bundler class Resolver class Base - def initialize(base, additional_base_requirements) + attr_reader :packages, :requirements, :source_requirements + + def initialize(source_requirements, dependencies, base, platforms, options) + @source_requirements = source_requirements + @base = base - @additional_base_requirements = additional_base_requirements + + @packages = Hash.new do |hash, name| + hash[name] = Package.new(name, platforms, **options) + end + + @requirements = dependencies.map do |dep| + dep_platforms = dep.gem_platforms(platforms) + + # Dependencies scoped to external platforms are ignored + next if dep_platforms.empty? + + name = dep.name + + @packages[name] = Package.new(name, dep_platforms, **options.merge(:dependency => dep)) + + dep + end.compact end def [](name) @base[name] end - def delete(spec) - @base.delete(spec) + def delete(specs) + specs.each do |spec| + @base.delete(spec) + end + end + + def get_package(name) + @packages[name] end def base_requirements @@ -24,10 +52,14 @@ module Bundler names.each do |name| @base.delete_by_name(name) - @additional_base_requirements.reject! {|dep| dep.name == name } + @base_requirements.delete(name) end + end - @base_requirements = nil + def include_prereleases(names) + names.each do |name| + get_package(name).consider_prereleases! + end end private @@ -38,7 +70,6 @@ module Bundler req = Gem::Requirement.new(ls.version) base_requirements[ls.name] = req end - @additional_base_requirements.each {|d| base_requirements[d.name] = d.requirement } base_requirements end end diff --git a/lib/bundler/resolver/candidate.rb b/lib/bundler/resolver/candidate.rb index 681f9aca73..e695ef08ee 100644 --- a/lib/bundler/resolver/candidate.rb +++ b/lib/bundler/resolver/candidate.rb @@ -26,9 +26,8 @@ module Bundler def initialize(version, specs: []) @spec_group = Resolver::SpecGroup.new(specs) - @platforms = specs.map(&:platform).sort_by(&:to_s).uniq @version = Gem::Version.new(version) - @ruby_only = @platforms == [Gem::Platform::RUBY] + @ruby_only = specs.map(&:platform).uniq == [Gem::Platform::RUBY] end def dependencies @@ -88,9 +87,7 @@ module Bundler end def to_s - return @version.to_s if @platforms.empty? || @ruby_only - - "#{@version} (#{@platforms.join(", ")})" + @version.to_s end end end diff --git a/lib/bundler/resolver/package.rb b/lib/bundler/resolver/package.rb index 7d64632860..7499a75006 100644 --- a/lib/bundler/resolver/package.rb +++ b/lib/bundler/resolver/package.rb @@ -15,12 +15,13 @@ module Bundler class Package attr_reader :name, :platforms, :dependency, :locked_version - def initialize(name, platforms, locked_specs, unlock, dependency: nil) + def initialize(name, platforms, locked_specs:, unlock:, prerelease: false, dependency: nil) @name = name @platforms = platforms @locked_version = locked_specs[name].first&.version @unlock = unlock @dependency = dependency || Dependency.new(name, @locked_version) + @prerelease = @dependency.prerelease? || @locked_version&.prerelease? || prerelease ? :consider_first : :ignore end def to_s @@ -47,8 +48,16 @@ module Bundler @unlock.empty? || @unlock.include?(name) end + def ignores_prereleases? + @prerelease == :ignore + end + def prerelease_specified? - @dependency.prerelease? + @prerelease == :consider_first + end + + def consider_prereleases! + @prerelease = :consider_last end def force_ruby_platform? |