Handle Sparkle appcast which specify the version next to the enclosure.

This commit is contained in:
Markus Reiter 2020-12-14 05:04:14 +01:00 committed by Sam Ford
parent 5ae726e2b4
commit a8d893f134
No known key found for this signature in database
GPG Key ID: 95209E46C7FFDEFE

View File

@ -46,20 +46,34 @@ module Homebrew
contents = Strategy.page_contents(url) contents = Strategy.page_contents(url)
xml = Nokogiri.parse(contents) xml = Nokogiri::XML(contents)
xml.remove_namespaces! xml.remove_namespaces!
enclosure = items = xml.xpath("//rss//channel//item").map do |item|
xml.xpath("//rss//channel//item//enclosure") enclosure = (item > "enclosure").first
.map { |e| { url: e["url"], version: BundleVersion.new(e["shortVersionString"], e["version"]) } }
.max_by { |e| e[:version] }
if enclosure next unless enclosure
short_version ||= enclosure["shortVersionString"]
version ||= enclosure["version"]
short_version ||= (item > "shortVersionString").first&.text
version ||= (item > "version").first&.text
{
url: enclosure["url"],
version: BundleVersion.new(short_version, version),
}
end.compact
item = items.max_by { |e| e[:version] }
if item
match = if block match = if block
enclosure[:version] = enclosure[:version].nice_version item[:version] = item[:version].nice_version
block.call(enclosure).to_s block.call(item).to_s
else else
enclosure[:version].nice_version item[:version].nice_version
end end
match_data[:matches][match] = Version.new(match) match_data[:matches][match] = Version.new(match)