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