[rubygems/rubygems] Instantiate Resolver::SpecGroup
with explicit priority
https://github.com/rubygems/rubygems/commit/e2c1bc1b6c
This commit is contained in:
parent
5fdfdc30f1
commit
086cde1651
@ -273,11 +273,11 @@ module Bundler
|
||||
platform_specs.uniq!
|
||||
|
||||
ruby_specs = select_best_platform_match(specs, Gem::Platform::RUBY)
|
||||
groups << Resolver::Candidate.new(version, specs: ruby_specs) if ruby_specs.any?
|
||||
groups << Resolver::Candidate.new(version, specs: ruby_specs, priority: -1) if ruby_specs.any?
|
||||
|
||||
next groups if platform_specs == ruby_specs || package.force_ruby_platform?
|
||||
|
||||
groups << Resolver::Candidate.new(version, specs: platform_specs)
|
||||
groups << Resolver::Candidate.new(version, specs: platform_specs, priority: 1)
|
||||
|
||||
groups
|
||||
end
|
||||
@ -432,8 +432,8 @@ module Bundler
|
||||
|
||||
def requirement_to_range(requirement)
|
||||
ranges = requirement.requirements.map do |(op, version)|
|
||||
ver = Resolver::Candidate.new(version).generic!
|
||||
platform_ver = Resolver::Candidate.new(version).platform_specific!
|
||||
ver = Resolver::Candidate.new(version, priority: -1)
|
||||
platform_ver = Resolver::Candidate.new(version, priority: 1)
|
||||
|
||||
case op
|
||||
when "~>"
|
||||
|
@ -24,10 +24,10 @@ module Bundler
|
||||
|
||||
attr_reader :version
|
||||
|
||||
def initialize(version, specs: [])
|
||||
def initialize(version, specs: [], priority: -1)
|
||||
@spec_group = Resolver::SpecGroup.new(specs)
|
||||
@version = Gem::Version.new(version)
|
||||
@ruby_only = specs.map(&:platform).uniq == [Gem::Platform::RUBY]
|
||||
@priority = priority
|
||||
end
|
||||
|
||||
def dependencies
|
||||
@ -40,18 +40,6 @@ module Bundler
|
||||
@spec_group.to_specs(package.force_ruby_platform?)
|
||||
end
|
||||
|
||||
def generic!
|
||||
@ruby_only = true
|
||||
|
||||
self
|
||||
end
|
||||
|
||||
def platform_specific!
|
||||
@ruby_only = false
|
||||
|
||||
self
|
||||
end
|
||||
|
||||
def prerelease?
|
||||
@version.prerelease?
|
||||
end
|
||||
@ -61,7 +49,7 @@ module Bundler
|
||||
end
|
||||
|
||||
def sort_obj
|
||||
[@version, @ruby_only ? -1 : 1]
|
||||
[@version, @priority]
|
||||
end
|
||||
|
||||
def <=>(other)
|
||||
|
@ -2,20 +2,19 @@
|
||||
|
||||
RSpec.describe Bundler::Resolver::Candidate do
|
||||
it "compares fine" do
|
||||
version1 = described_class.new("1.12.5", specs: [Gem::Specification.new("foo", "1.12.5") {|s| s.platform = Gem::Platform::RUBY }])
|
||||
version2 = described_class.new("1.12.5") # passing no specs creates a platform specific candidate, so sorts higher
|
||||
version1 = described_class.new("1.12.5", priority: -1)
|
||||
version2 = described_class.new("1.12.5", priority: 1)
|
||||
|
||||
expect(version2 >= version1).to be true
|
||||
expect(version2 > version1).to be true
|
||||
|
||||
expect(version1.generic! == version2.generic!).to be true
|
||||
expect(version1.platform_specific! == version2.platform_specific!).to be true
|
||||
version1 = described_class.new("1.12.5")
|
||||
version2 = described_class.new("1.12.5")
|
||||
|
||||
expect(version1.platform_specific! >= version2.generic!).to be true
|
||||
expect(version2.platform_specific! >= version1.generic!).to be true
|
||||
expect(version2 == version1).to be true
|
||||
|
||||
version1 = described_class.new("1.12.5", specs: [Gem::Specification.new("foo", "1.12.5") {|s| s.platform = Gem::Platform::RUBY }])
|
||||
version2 = described_class.new("1.12.5", specs: [Gem::Specification.new("foo", "1.12.5") {|s| s.platform = Gem::Platform::X64_LINUX }])
|
||||
version1 = described_class.new("1.12.5", priority: 1)
|
||||
version2 = described_class.new("1.12.5", priority: -1)
|
||||
|
||||
expect(version2 >= version1).to be true
|
||||
expect(version2 < version1).to be true
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user