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