mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
70 lines
1.6 KiB
Ruby
70 lines
1.6 KiB
Ruby
# typed: strict
|
|
# frozen_string_literal: true
|
|
|
|
module Homebrew
|
|
module Livecheck
|
|
# A formula or cask version, split into its component sub-versions.
|
|
#
|
|
# @api private
|
|
class LivecheckVersion
|
|
include Comparable
|
|
|
|
sig {
|
|
params(package_or_resource: T.any(Formula, Cask::Cask, Resource), version: Version).returns(LivecheckVersion)
|
|
}
|
|
def self.create(package_or_resource, version)
|
|
versions = case package_or_resource
|
|
when Formula, Resource
|
|
[version]
|
|
when Cask::Cask
|
|
version.to_s.split(",").map { |s| Version.new(s) }
|
|
else
|
|
T.absurd(package_or_resource)
|
|
end
|
|
new(versions)
|
|
end
|
|
|
|
sig { returns(T::Array[Version]) }
|
|
attr_reader :versions
|
|
|
|
sig { params(versions: T::Array[Version]).void }
|
|
def initialize(versions)
|
|
@versions = versions
|
|
end
|
|
|
|
sig { params(other: T.untyped).returns(T.nilable(Integer)) }
|
|
def <=>(other)
|
|
return unless other.is_a?(LivecheckVersion)
|
|
|
|
lversions = versions
|
|
rversions = other.versions
|
|
max = [lversions.count, rversions.count].max
|
|
l = r = 0
|
|
|
|
while l < max
|
|
a = lversions[l] || Version::NULL
|
|
b = rversions[r] || Version::NULL
|
|
|
|
if a == b
|
|
l += 1
|
|
r += 1
|
|
next
|
|
elsif !a.null? && b.null?
|
|
return 1 if a > Version::NULL
|
|
|
|
l += 1
|
|
elsif a.null? && !b.null?
|
|
return -1 if b > Version::NULL
|
|
|
|
r += 1
|
|
else
|
|
return a <=> b
|
|
end
|
|
end
|
|
|
|
0
|
|
end
|
|
end
|
|
end
|
|
end
|