nandahkrishna f520301180
livecheck migration: add strategies
Co-authored-by: Sam Ford <1584702+samford@users.noreply.github.com>
Co-authored-by: Thierry Moisan <thierry.moisan@gmail.com>
Co-authored-by: Dawid Dziurla <dawidd0811@gmail.com>
Co-authored-by: Maxim Belkin <maxim.belkin@gmail.com>
Co-authored-by: Issy Long <me@issyl0.co.uk>
Co-authored-by: Mike McQuaid <mike@mikemcquaid.com>
Co-authored-by: Seeker <meaningseeking@protonmail.com>
2020-08-27 20:00:30 +05:30

59 lines
2.3 KiB
Ruby

# frozen_string_literal: true
module Homebrew
module Livecheck
module Strategy
# The `Gnome` strategy identifies versions of software at gnome.org by
# checking the available downloads found in a project's `cache.json`
# file.
#
# GNOME URLs generally follow a format like:
# `https://download.gnome.org/sources/example/1.2/example-1.2.3.tar.xz`.
#
# The default regex restricts matching to filenames containing a version
# with an even-numbered minor below 90, as these are stable releases.
#
# @api public
class Gnome
NICE_NAME = "GNOME"
# The `Regexp` used to determine if the strategy applies to the URL.
URL_MATCH_REGEX = /download\.gnome\.org/i.freeze
# Whether the strategy can be applied to the provided URL.
# @param url [String] the URL to match against
# @return [Boolean]
def self.match?(url)
URL_MATCH_REGEX.match?(url)
end
# Generates a URL and regex (if one isn't provided) and passes them
# to the `PageMatch#find_versions` method to identify versions in the
# content.
# @param url [String] the URL of the content to check
# @param regex [Regexp] a regex used for matching versions in content
# @return [Hash]
def self.find_versions(url, regex = nil)
%r{/sources/(?<package_name>.*?)/}i =~ url
page_url = "https://download.gnome.org/sources/#{package_name}/cache.json"
# GNOME archive files seem to use a standard filename format, so we
# count on the delimiter between the package name and numeric version
# being a hyphen and the file being a tarball.
#
# The `([0-8]\d*?)?[02468]` part of the regex is intended to restrict
# matching to versions with an even-numbered minor, as these are
# stable releases. This also excludes x.90+ versions, which are
# development versions. See: https://www.gnome.org/gnome-3/source/
#
# Example regex: `/example-(\d+\.([0-8]\d*?)?[02468](?:\.\d+)*?)\.t/i`
regex ||= /#{Regexp.escape(package_name)}-(\d+\.([0-8]\d*?)?[02468](?:\.\d+)*?)\.t/i
Homebrew::Livecheck::Strategy::PageMatch.find_versions(page_url, regex)
end
end
end
end
end