Merge pull request #8183 from SeekingMeaning/version/tokens
version: add major, minor, patch methods
This commit is contained in:
commit
6d9bf7286e
@ -261,9 +261,8 @@ module Homebrew
|
||||
!(versioned_formulae = formula.versioned_formulae).empty?
|
||||
versioned_aliases = formula.aliases.grep(/.@\d/)
|
||||
_, last_alias_version = versioned_formulae.map(&:name).last.split("@")
|
||||
major, minor, = formula.version.to_s.split(".")
|
||||
alias_name_major = "#{formula.name}@#{major}"
|
||||
alias_name_major_minor = "#{alias_name_major}.#{minor}"
|
||||
alias_name_major = "#{formula.name}@#{formula.version.major}"
|
||||
alias_name_major_minor = "#{alias_name_major}.#{formula.version.minor}"
|
||||
alias_name = if last_alias_version.split(".").length == 1
|
||||
alias_name_major
|
||||
else
|
||||
@ -488,11 +487,7 @@ module Homebrew
|
||||
return unless formula.name == "postgresql"
|
||||
return unless @core_tap
|
||||
|
||||
major_version = formula.version
|
||||
.to_s
|
||||
.split(".")
|
||||
.first
|
||||
.to_i
|
||||
major_version = formula.version.major.to_i
|
||||
previous_major_version = major_version - 1
|
||||
previous_formula_name = "postgresql@#{previous_major_version}"
|
||||
begin
|
||||
@ -689,7 +684,7 @@ module Homebrew
|
||||
}.freeze
|
||||
|
||||
# version_prefix = stable_version_string.sub(/\d+$/, "")
|
||||
# version_prefix = stable_version_string.split(".")[0..1].join(".")
|
||||
# version_prefix = stable.version.major_minor
|
||||
|
||||
def audit_specs
|
||||
problem "Head-only (no stable download)" if head_only?(formula)
|
||||
@ -753,11 +748,9 @@ module Homebrew
|
||||
|
||||
stable_version_string = stable.version.to_s
|
||||
stable_url_version = Version.parse(stable.url)
|
||||
_, stable_url_minor_version, = stable_url_version.to_s
|
||||
.split(".", 3)
|
||||
.map(&:to_i)
|
||||
stable_url_minor_version = stable_url_version.minor.to_i
|
||||
|
||||
formula_suffix = stable_version_string.split(".").last.to_i
|
||||
formula_suffix = stable.version.patch.to_i
|
||||
throttled_rate = THROTTLED_FORMULAE[formula.name]
|
||||
if throttled_rate && formula_suffix.modulo(throttled_rate).nonzero?
|
||||
problem "should only be updated every #{throttled_rate} releases on multiples of #{throttled_rate}"
|
||||
@ -771,7 +764,7 @@ module Homebrew
|
||||
|
||||
problem "Stable version URLs should not contain #{matched}"
|
||||
when %r{download\.gnome\.org/sources}, %r{ftp\.gnome\.org/pub/GNOME/sources}i
|
||||
version_prefix = stable_version_string.split(".")[0..1].join(".")
|
||||
version_prefix = stable.version.major_minor
|
||||
return if GNOME_DEVEL_ALLOWLIST[formula.name] == version_prefix
|
||||
return if stable_url_version < Version.create("1.0")
|
||||
return if stable_url_minor_version.even?
|
||||
|
||||
@ -4,11 +4,20 @@ require "version"
|
||||
|
||||
class PkgVersion
|
||||
include Comparable
|
||||
extend Forwardable
|
||||
|
||||
RX = /\A(.+?)(?:_(\d+))?\z/.freeze
|
||||
|
||||
attr_reader :version, :revision
|
||||
|
||||
delegate [ # rubocop:disable Layout/HashAlignment
|
||||
:major,
|
||||
:minor,
|
||||
:patch,
|
||||
:major_minor,
|
||||
:major_minor_patch,
|
||||
] => :version
|
||||
|
||||
def self.parse(path)
|
||||
_, version, revision = *path.match(RX)
|
||||
version = Version.create(version)
|
||||
|
||||
@ -85,4 +85,46 @@ describe PkgVersion do
|
||||
expect(p1.hash).not_to eq(p4.hash)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#version" do
|
||||
it "returns package version" do
|
||||
expect(described_class.parse("1.2.3_4").version).to be == Version.create("1.2.3")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#revision" do
|
||||
it "returns package revision" do
|
||||
expect(described_class.parse("1.2.3_4").revision).to be == 4
|
||||
end
|
||||
end
|
||||
|
||||
describe "#major" do
|
||||
it "returns major version token" do
|
||||
expect(described_class.parse("1.2.3_4").major).to be == Version::Token.create("1")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#minor" do
|
||||
it "returns minor version token" do
|
||||
expect(described_class.parse("1.2.3_4").minor).to be == Version::Token.create("2")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#patch" do
|
||||
it "returns patch version token" do
|
||||
expect(described_class.parse("1.2.3_4").patch).to be == Version::Token.create("3")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#major_minor" do
|
||||
it "returns major.minor version" do
|
||||
expect(described_class.parse("1.2.3_4").major_minor).to be == Version.create("1.2")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#major_minor_patch" do
|
||||
it "returns major.minor.patch version" do
|
||||
expect(described_class.parse("1.2.3_4").major_minor_patch).to be == Version.create("1.2.3")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -183,6 +183,15 @@ describe Version do
|
||||
expect(described_class.create("1")).to be == 1
|
||||
end
|
||||
|
||||
it "can be compared against tokens" do
|
||||
expect(described_class.create("2.1.0-p194")).to be > Version::Token.create("2")
|
||||
expect(described_class.create("1")).to be == Version::Token.create("1")
|
||||
end
|
||||
|
||||
it "can be compared against Version::NULL_TOKEN" do
|
||||
expect(described_class.create("2.1.0-p194")).to be > Version::NULL_TOKEN
|
||||
end
|
||||
|
||||
specify "comparison returns nil for non-version" do
|
||||
v = described_class.create("1.0")
|
||||
expect(v <=> Object.new).to be nil
|
||||
@ -276,6 +285,76 @@ describe Version do
|
||||
expect(v2.to_str).to eq("HEAD-ffffff")
|
||||
end
|
||||
|
||||
describe "#major" do
|
||||
it "returns major version token" do
|
||||
expect(described_class.create("1").major).to be == Version::Token.create("1")
|
||||
expect(described_class.create("1.2").major).to be == Version::Token.create("1")
|
||||
expect(described_class.create("1.2.3").major).to be == Version::Token.create("1")
|
||||
expect(described_class.create("1.2.3alpha").major).to be == Version::Token.create("1")
|
||||
expect(described_class.create("1.2.3alpha4").major).to be == Version::Token.create("1")
|
||||
expect(described_class.create("1.2.3beta4").major).to be == Version::Token.create("1")
|
||||
expect(described_class.create("1.2.3pre4").major).to be == Version::Token.create("1")
|
||||
expect(described_class.create("1.2.3rc4").major).to be == Version::Token.create("1")
|
||||
expect(described_class.create("1.2.3-p4").major).to be == Version::Token.create("1")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#minor" do
|
||||
it "returns minor version token" do
|
||||
expect(described_class.create("1").minor).to be nil
|
||||
expect(described_class.create("1.2").minor).to be == Version::Token.create("2")
|
||||
expect(described_class.create("1.2.3").minor).to be == Version::Token.create("2")
|
||||
expect(described_class.create("1.2.3alpha").minor).to be == Version::Token.create("2")
|
||||
expect(described_class.create("1.2.3alpha4").minor).to be == Version::Token.create("2")
|
||||
expect(described_class.create("1.2.3beta4").minor).to be == Version::Token.create("2")
|
||||
expect(described_class.create("1.2.3pre4").minor).to be == Version::Token.create("2")
|
||||
expect(described_class.create("1.2.3rc4").minor).to be == Version::Token.create("2")
|
||||
expect(described_class.create("1.2.3-p4").minor).to be == Version::Token.create("2")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#patch" do
|
||||
it "returns patch version token" do
|
||||
expect(described_class.create("1").patch).to be nil
|
||||
expect(described_class.create("1.2").patch).to be nil
|
||||
expect(described_class.create("1.2.3").patch).to be == Version::Token.create("3")
|
||||
expect(described_class.create("1.2.3alpha").patch).to be == Version::Token.create("3")
|
||||
expect(described_class.create("1.2.3alpha4").patch).to be == Version::Token.create("3")
|
||||
expect(described_class.create("1.2.3beta4").patch).to be == Version::Token.create("3")
|
||||
expect(described_class.create("1.2.3pre4").patch).to be == Version::Token.create("3")
|
||||
expect(described_class.create("1.2.3rc4").patch).to be == Version::Token.create("3")
|
||||
expect(described_class.create("1.2.3-p4").patch).to be == Version::Token.create("3")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#major_minor" do
|
||||
it "returns major.minor version" do
|
||||
expect(described_class.create("1").major_minor).to be == described_class.create("1")
|
||||
expect(described_class.create("1.2").major_minor).to be == described_class.create("1.2")
|
||||
expect(described_class.create("1.2.3").major_minor).to be == described_class.create("1.2")
|
||||
expect(described_class.create("1.2.3alpha").major_minor).to be == described_class.create("1.2")
|
||||
expect(described_class.create("1.2.3alpha4").major_minor).to be == described_class.create("1.2")
|
||||
expect(described_class.create("1.2.3beta4").major_minor).to be == described_class.create("1.2")
|
||||
expect(described_class.create("1.2.3pre4").major_minor).to be == described_class.create("1.2")
|
||||
expect(described_class.create("1.2.3rc4").major_minor).to be == described_class.create("1.2")
|
||||
expect(described_class.create("1.2.3-p4").major_minor).to be == described_class.create("1.2")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#major_minor_patch" do
|
||||
it "returns major.minor.patch version" do
|
||||
expect(described_class.create("1").major_minor_patch).to be == described_class.create("1")
|
||||
expect(described_class.create("1.2").major_minor_patch).to be == described_class.create("1.2")
|
||||
expect(described_class.create("1.2.3").major_minor_patch).to be == described_class.create("1.2.3")
|
||||
expect(described_class.create("1.2.3alpha").major_minor_patch).to be == described_class.create("1.2.3")
|
||||
expect(described_class.create("1.2.3alpha4").major_minor_patch).to be == described_class.create("1.2.3")
|
||||
expect(described_class.create("1.2.3beta4").major_minor_patch).to be == described_class.create("1.2.3")
|
||||
expect(described_class.create("1.2.3pre4").major_minor_patch).to be == described_class.create("1.2.3")
|
||||
expect(described_class.create("1.2.3rc4").major_minor_patch).to be == described_class.create("1.2.3")
|
||||
expect(described_class.create("1.2.3-p4").major_minor_patch).to be == described_class.create("1.2.3")
|
||||
end
|
||||
end
|
||||
|
||||
describe "::parse" do
|
||||
it "returns a NULL version when the URL cannot be parsed" do
|
||||
expect(described_class.parse("https://brew.sh/blah.tar")).to be_null
|
||||
|
||||
@ -46,6 +46,18 @@ class Version
|
||||
"#<#{self.class.name} #{value.inspect}>"
|
||||
end
|
||||
|
||||
def hash
|
||||
value.hash
|
||||
end
|
||||
|
||||
def to_f
|
||||
value.to_f
|
||||
end
|
||||
|
||||
def to_i
|
||||
value.to_i
|
||||
end
|
||||
|
||||
def to_s
|
||||
value.to_s
|
||||
end
|
||||
@ -75,6 +87,10 @@ class Version
|
||||
end
|
||||
end
|
||||
|
||||
def null?
|
||||
true
|
||||
end
|
||||
|
||||
def inspect
|
||||
"#<#{self.class.name}>"
|
||||
end
|
||||
@ -429,8 +445,9 @@ class Version
|
||||
# Used by the *_build_version comparisons, which formerly returned Fixnum
|
||||
other = Version.new(other.to_s) if other.is_a? Integer
|
||||
return 1 if other.nil?
|
||||
|
||||
return 1 if other.respond_to?(:null?) && other.null?
|
||||
|
||||
other = Version.new(other.to_s) if other.is_a? Token
|
||||
return unless other.is_a?(Version)
|
||||
return 0 if version == other.version
|
||||
return 1 if head? && !other.head?
|
||||
@ -469,6 +486,26 @@ class Version
|
||||
end
|
||||
alias eql? ==
|
||||
|
||||
def major
|
||||
tokens.first
|
||||
end
|
||||
|
||||
def minor
|
||||
tokens.second
|
||||
end
|
||||
|
||||
def patch
|
||||
tokens.third
|
||||
end
|
||||
|
||||
def major_minor
|
||||
Version.new([major, minor].compact.join("."))
|
||||
end
|
||||
|
||||
def major_minor_patch
|
||||
Version.new([major, minor, patch].compact.join("."))
|
||||
end
|
||||
|
||||
def empty?
|
||||
version.empty?
|
||||
end
|
||||
|
||||
@ -37,6 +37,26 @@ class Version
|
||||
alias_method :requires_sse42?, :requires_nehalem_cpu?
|
||||
alias_method :requires_popcnt?, :requires_nehalem_cpu?
|
||||
|
||||
def major
|
||||
NULL_TOKEN
|
||||
end
|
||||
|
||||
def minor
|
||||
NULL_TOKEN
|
||||
end
|
||||
|
||||
def patch
|
||||
NULL_TOKEN
|
||||
end
|
||||
|
||||
def major_minor
|
||||
self
|
||||
end
|
||||
|
||||
def major_minor_patch
|
||||
self
|
||||
end
|
||||
|
||||
def to_f
|
||||
Float::NAN
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user