livecheck: split cask versions into sub-versions
This commit is contained in:
parent
f6bc3efac6
commit
9edb648869
@ -4,6 +4,7 @@
|
|||||||
require "livecheck/error"
|
require "livecheck/error"
|
||||||
require "livecheck/skip_conditions"
|
require "livecheck/skip_conditions"
|
||||||
require "livecheck/strategy"
|
require "livecheck/strategy"
|
||||||
|
require "livecheck/version"
|
||||||
require "ruby-progressbar"
|
require "ruby-progressbar"
|
||||||
require "uri"
|
require "uri"
|
||||||
|
|
||||||
@ -150,7 +151,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
|
|
||||||
current_str = current.to_s
|
current_str = current.to_s
|
||||||
current = actual_version(formula_or_cask, current)
|
current = LivecheckVersion.create(formula_or_cask, current)
|
||||||
|
|
||||||
latest = if formula&.head_only?
|
latest = if formula&.head_only?
|
||||||
formula.head.downloader.fetch_last_commit
|
formula.head.downloader.fetch_last_commit
|
||||||
@ -176,7 +177,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
|
|
||||||
latest_str = latest.to_s
|
latest_str = latest.to_s
|
||||||
latest = actual_version(formula_or_cask, latest)
|
latest = LivecheckVersion.create(formula_or_cask, latest)
|
||||||
|
|
||||||
is_outdated = if formula&.head_only?
|
is_outdated = if formula&.head_only?
|
||||||
# A HEAD-only formula is considered outdated if the latest upstream
|
# A HEAD-only formula is considered outdated if the latest upstream
|
||||||
@ -546,7 +547,7 @@ module Homebrew
|
|||||||
next if match_version_map.blank?
|
next if match_version_map.blank?
|
||||||
|
|
||||||
version_info = {
|
version_info = {
|
||||||
latest: Version.new(match_version_map.values.max_by { |v| actual_version(formula_or_cask, v) }),
|
latest: Version.new(match_version_map.values.max_by { |v| LivecheckVersion.create(formula_or_cask, v) }),
|
||||||
}
|
}
|
||||||
|
|
||||||
if json && verbose
|
if json && verbose
|
||||||
@ -570,17 +571,5 @@ module Homebrew
|
|||||||
|
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
sig { params(formula_or_cask: T.any(Formula, Cask::Cask), version: Version).returns(Version) }
|
|
||||||
def actual_version(formula_or_cask, version)
|
|
||||||
case formula_or_cask
|
|
||||||
when Formula
|
|
||||||
version
|
|
||||||
when Cask::Cask
|
|
||||||
Version.new(Cask::DSL::Version.new(version.to_s).before_comma)
|
|
||||||
else
|
|
||||||
T.absurd(formula_or_cask)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
69
Library/Homebrew/livecheck/version.rb
Normal file
69
Library/Homebrew/livecheck/version.rb
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
# 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
|
||||||
|
extend T::Sig
|
||||||
|
|
||||||
|
include Comparable
|
||||||
|
|
||||||
|
sig { params(formula_or_cask: T.any(Formula, Cask::Cask), version: Version).returns(LivecheckVersion) }
|
||||||
|
def self.create(formula_or_cask, version)
|
||||||
|
versions = case formula_or_cask
|
||||||
|
when Formula
|
||||||
|
[version]
|
||||||
|
when Cask::Cask
|
||||||
|
version.to_s.split(/[,:]/).map { |s| Version.new(s) }
|
||||||
|
else
|
||||||
|
T.absurd(formula_or_cask)
|
||||||
|
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
|
Loading…
x
Reference in New Issue
Block a user