summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Rodríguez <deivid.rodriguez@riseup.net>2024-07-03 20:17:59 +0200
committergit <svn-admin@ruby-lang.org>2024-07-09 16:34:07 +0000
commit086cde1651902abb758184f1eadbbfb367b2fedf (patch)
tree68cc9f949a406061273f18328ca3d9c9f9d5fff1
parent5fdfdc30f155ac41f865d4a0ae9ee37f1371fd7f (diff)
[rubygems/rubygems] Instantiate `Resolver::SpecGroup` with explicit priority
https://github.com/rubygems/rubygems/commit/e2c1bc1b6c
-rw-r--r--lib/bundler/resolver.rb8
-rw-r--r--lib/bundler/resolver/candidate.rb18
-rw-r--r--spec/bundler/bundler/resolver/candidate_spec.rb19
3 files changed, 16 insertions, 29 deletions
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb
index ba52712d15..c546eaa2b3 100644
--- a/lib/bundler/resolver.rb
+++ b/lib/bundler/resolver.rb
@@ -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 "~>"
diff --git a/lib/bundler/resolver/candidate.rb b/lib/bundler/resolver/candidate.rb
index 9e8b913335..debf73584d 100644
--- a/lib/bundler/resolver/candidate.rb
+++ b/lib/bundler/resolver/candidate.rb
@@ -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)
diff --git a/spec/bundler/bundler/resolver/candidate_spec.rb b/spec/bundler/bundler/resolver/candidate_spec.rb
index f7b378d32b..aefad3316e 100644
--- a/spec/bundler/bundler/resolver/candidate_spec.rb
+++ b/spec/bundler/bundler/resolver/candidate_spec.rb
@@ -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