mirror of
https://github.com/ruby/ruby.git
synced 2025-08-26 14:34:39 +02:00
[rubygems/rubygems] Let GemVersionPromoter sort in preferred order directly
So that we don't need to reverse the Array.
aeea5e2e00
This commit is contained in:
parent
2b82b7d192
commit
d69ef1cc52
3 changed files with 28 additions and 28 deletions
|
@ -59,20 +59,20 @@ module Bundler
|
||||||
a_pre = a.prerelease?
|
a_pre = a.prerelease?
|
||||||
b_pre = b.prerelease?
|
b_pre = b.prerelease?
|
||||||
|
|
||||||
next -1 if a_pre && !b_pre
|
next 1 if a_pre && !b_pre
|
||||||
next 1 if b_pre && !a_pre
|
next -1 if b_pre && !a_pre
|
||||||
end
|
end
|
||||||
|
|
||||||
if major? || locked_version.nil?
|
if major? || locked_version.nil?
|
||||||
a <=> b
|
b <=> a
|
||||||
elsif either_version_older_than_locked?(a, b, locked_version)
|
elsif either_version_older_than_locked?(a, b, locked_version)
|
||||||
a <=> b
|
b <=> a
|
||||||
elsif segments_do_not_match?(a, b, :major)
|
elsif segments_do_not_match?(a, b, :major)
|
||||||
b <=> a
|
|
||||||
elsif !minor? && segments_do_not_match?(a, b, :minor)
|
|
||||||
b <=> a
|
|
||||||
else
|
|
||||||
a <=> b
|
a <=> b
|
||||||
|
elsif !minor? && segments_do_not_match?(a, b, :minor)
|
||||||
|
a <=> b
|
||||||
|
else
|
||||||
|
b <=> a
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
post_sort(result, package.unlock?, locked_version)
|
post_sort(result, package.unlock?, locked_version)
|
||||||
|
@ -137,13 +137,13 @@ module Bundler
|
||||||
if unlock || locked_version.nil?
|
if unlock || locked_version.nil?
|
||||||
result
|
result
|
||||||
else
|
else
|
||||||
move_version_to_end(result, locked_version)
|
move_version_to_beginning(result, locked_version)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def move_version_to_end(result, version)
|
def move_version_to_beginning(result, version)
|
||||||
move, keep = result.partition {|s| s.version.to_s == version.to_s }
|
move, keep = result.partition {|s| s.version.to_s == version.to_s }
|
||||||
keep.concat(move)
|
move.concat(keep)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -359,7 +359,7 @@ module Bundler
|
||||||
|
|
||||||
def sort_versions_by_preferred(package, versions)
|
def sort_versions_by_preferred(package, versions)
|
||||||
if versions.size > 1
|
if versions.size > 1
|
||||||
@gem_version_promoter.sort_versions(package, versions).reverse
|
@gem_version_promoter.sort_versions(package, versions)
|
||||||
else
|
else
|
||||||
versions
|
versions
|
||||||
end
|
end
|
||||||
|
|
|
@ -33,13 +33,13 @@ RSpec.describe Bundler::GemVersionPromoter do
|
||||||
|
|
||||||
it "numerically sorts versions" do
|
it "numerically sorts versions" do
|
||||||
versions = sorted_versions(candidates: %w[1.7.7 1.7.8 1.7.9 1.7.15 1.8.0], current: "1.7.8")
|
versions = sorted_versions(candidates: %w[1.7.7 1.7.8 1.7.9 1.7.15 1.8.0], current: "1.7.8")
|
||||||
expect(versions).to eq %w[1.7.7 1.7.8 1.7.9 1.7.15 1.8.0]
|
expect(versions).to eq %w[1.8.0 1.7.15 1.7.9 1.7.8 1.7.7]
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with no options" do
|
context "with no options" do
|
||||||
it "defaults to level=:major, strict=false, pre=false" do
|
it "defaults to level=:major, strict=false, pre=false" do
|
||||||
versions = sorted_versions(candidates: %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.0.1 2.1.0], current: "0.3.0")
|
versions = sorted_versions(candidates: %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.0.1 2.1.0], current: "0.3.0")
|
||||||
expect(versions).to eq %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.0.1 2.1.0]
|
expect(versions).to eq %w[2.1.0 2.0.1 1.0.0 0.9.0 0.3.1 0.3.0 0.2.0]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -51,25 +51,25 @@ RSpec.describe Bundler::GemVersionPromoter do
|
||||||
|
|
||||||
it "keeps downgrades" do
|
it "keeps downgrades" do
|
||||||
versions = sorted_versions(candidates: %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.0.1 2.1.0], current: "0.3.0")
|
versions = sorted_versions(candidates: %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.0.1 2.1.0], current: "0.3.0")
|
||||||
expect(versions).to eq %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.0.1 2.1.0]
|
expect(versions).to eq %w[2.1.0 2.0.1 1.0.0 0.9.0 0.3.1 0.3.0 0.2.0]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when level is minor" do
|
context "when level is minor" do
|
||||||
before { gvp.level = :minor }
|
before { gvp.level = :minor }
|
||||||
|
|
||||||
it "sorts highest minor within same major in last position" do
|
it "sorts highest minor within same major in first position" do
|
||||||
versions = sorted_versions(candidates: %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.0.1 2.1.0], current: "0.3.0")
|
versions = sorted_versions(candidates: %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.0.1 2.1.0], current: "0.3.0")
|
||||||
expect(versions).to eq %w[0.2.0 2.0.1 2.1.0 1.0.0 0.3.0 0.3.1 0.9.0]
|
expect(versions).to eq %w[0.9.0 0.3.1 0.3.0 1.0.0 2.1.0 2.0.1 0.2.0]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when level is patch" do
|
context "when level is patch" do
|
||||||
before { gvp.level = :patch }
|
before { gvp.level = :patch }
|
||||||
|
|
||||||
it "sorts highest patch within same minor in last position" do
|
it "sorts highest patch within same minor in first position" do
|
||||||
versions = sorted_versions(candidates: %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.0.1 2.1.0], current: "0.3.0")
|
versions = sorted_versions(candidates: %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.0.1 2.1.0], current: "0.3.0")
|
||||||
expect(versions).to eq %w[0.2.0 2.1.0 2.0.1 1.0.0 0.9.0 0.3.0 0.3.1]
|
expect(versions).to eq %w[0.3.1 0.3.0 0.9.0 1.0.0 2.0.1 2.1.0 0.2.0]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -82,25 +82,25 @@ RSpec.describe Bundler::GemVersionPromoter do
|
||||||
|
|
||||||
it "orders by version" do
|
it "orders by version" do
|
||||||
versions = sorted_versions(candidates: %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.0.1 2.1.0], current: "0.3.0")
|
versions = sorted_versions(candidates: %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.0.1 2.1.0], current: "0.3.0")
|
||||||
expect(versions).to eq %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.0.1 2.1.0]
|
expect(versions).to eq %w[2.1.0 2.0.1 1.0.0 0.9.0 0.3.1 0.3.0 0.2.0]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when level is minor" do
|
context "when level is minor" do
|
||||||
before { gvp.level = :minor }
|
before { gvp.level = :minor }
|
||||||
|
|
||||||
it "favors downgrades, then upgrades by major descending, minor ascending, patch ascending" do
|
it "favors minor upgrades, then patch upgrades, then major upgrades, then downgrades" do
|
||||||
versions = sorted_versions(candidates: %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.0.1 2.1.0], current: "0.3.0")
|
versions = sorted_versions(candidates: %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.0.1 2.1.0], current: "0.3.0")
|
||||||
expect(versions).to eq %w[0.2.0 2.0.1 2.1.0 1.0.0 0.3.0 0.3.1 0.9.0]
|
expect(versions).to eq %w[0.9.0 0.3.1 0.3.0 1.0.0 2.1.0 2.0.1 0.2.0]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when level is patch" do
|
context "when level is patch" do
|
||||||
before { gvp.level = :patch }
|
before { gvp.level = :patch }
|
||||||
|
|
||||||
it "favors downgrades, then upgrades by major descending, minor descending, patch ascending" do
|
it "favors patch upgrades, then minor upgrades, then major upgrades, then downgrades" do
|
||||||
versions = sorted_versions(candidates: %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.0.1 2.1.0], current: "0.3.0")
|
versions = sorted_versions(candidates: %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.0.1 2.1.0], current: "0.3.0")
|
||||||
expect(versions).to eq %w[0.2.0 2.1.0 2.0.1 1.0.0 0.9.0 0.3.0 0.3.1]
|
expect(versions).to eq %w[0.3.1 0.3.0 0.9.0 1.0.0 2.0.1 2.1.0 0.2.0]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -110,7 +110,7 @@ RSpec.describe Bundler::GemVersionPromoter do
|
||||||
|
|
||||||
it "sorts regardless of prerelease status" do
|
it "sorts regardless of prerelease status" do
|
||||||
versions = sorted_versions(candidates: %w[1.7.7.pre 1.8.0 1.8.1.pre 1.8.1 2.0.0.pre 2.0.0], current: "1.8.0")
|
versions = sorted_versions(candidates: %w[1.7.7.pre 1.8.0 1.8.1.pre 1.8.1 2.0.0.pre 2.0.0], current: "1.8.0")
|
||||||
expect(versions).to eq %w[1.7.7.pre 1.8.0 1.8.1.pre 1.8.1 2.0.0.pre 2.0.0]
|
expect(versions).to eq %w[2.0.0 2.0.0.pre 1.8.1 1.8.1.pre 1.8.0 1.7.7.pre]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -119,16 +119,16 @@ RSpec.describe Bundler::GemVersionPromoter do
|
||||||
|
|
||||||
it "deprioritizes prerelease gems" do
|
it "deprioritizes prerelease gems" do
|
||||||
versions = sorted_versions(candidates: %w[1.7.7.pre 1.8.0 1.8.1.pre 1.8.1 2.0.0.pre 2.0.0], current: "1.8.0")
|
versions = sorted_versions(candidates: %w[1.7.7.pre 1.8.0 1.8.1.pre 1.8.1 2.0.0.pre 2.0.0], current: "1.8.0")
|
||||||
expect(versions).to eq %w[1.7.7.pre 1.8.1.pre 2.0.0.pre 1.8.0 1.8.1 2.0.0]
|
expect(versions).to eq %w[2.0.0 1.8.1 1.8.0 2.0.0.pre 1.8.1.pre 1.7.7.pre]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when locking and not major" do
|
context "when locking and not major" do
|
||||||
before { gvp.level = :minor }
|
before { gvp.level = :minor }
|
||||||
|
|
||||||
it "keeps the current version last" do
|
it "keeps the current version first" do
|
||||||
versions = sorted_versions(candidates: %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.1.0 2.0.1], current: "0.3.0", locked: ["bar"])
|
versions = sorted_versions(candidates: %w[0.2.0 0.3.0 0.3.1 0.9.0 1.0.0 2.1.0 2.0.1], current: "0.3.0", locked: ["bar"])
|
||||||
expect(versions.last).to eq("0.3.0")
|
expect(versions.first).to eq("0.3.0")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue