Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor #find_versions parameters in strategies #11854

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
17 changes: 9 additions & 8 deletions Library/Homebrew/livecheck/livecheck.rb
Original file line number Diff line number Diff line change
Expand Up @@ -640,13 +640,12 @@ def latest_version(

next if strategy.blank?

strategy_data = begin
strategy.find_versions(url, livecheck_regex, cask: cask, &livecheck_strategy_block)
rescue ArgumentError => e
raise unless e.message.include?("unknown keyword: cask")

odisabled "`def self.find_versions` in `#{strategy}` without a `cask` parameter"
end
strategy_data = strategy.find_versions(
url: url,
regex: livecheck_regex,
cask: cask,
&livecheck_strategy_block
)
match_version_map = strategy_data[:matches]
regex = strategy_data[:regex]
messages = strategy_data[:messages]
Expand Down Expand Up @@ -711,7 +710,9 @@ def latest_version(
version_info[:meta][:url][:symbol] = livecheck_url if livecheck_url.is_a?(Symbol) && livecheck_url_string
version_info[:meta][:url][:original] = original_url
version_info[:meta][:url][:processed] = url if url != original_url
version_info[:meta][:url][:strategy] = strategy_data[:url] if strategy_data[:url] != url
if strategy_data[:url].present? && strategy_data[:url] != url
version_info[:meta][:url][:strategy] = strategy_data[:url]
end
version_info[:meta][:url][:final] = strategy_data[:final_url] if strategy_data[:final_url]

version_info[:meta][:strategy] = strategy.present? ? strategy_name : nil
Expand Down
12 changes: 6 additions & 6 deletions Library/Homebrew/livecheck/strategy/apache.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,15 @@ def self.match?(url)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **unused, &block)
match = url.match(URL_MATCH_REGEX)

# Use `\.t` instead of specific tarball extensions (e.g. .tar.gz)
Expand All @@ -73,7 +73,7 @@ def self.find_versions(url, regex, cask: nil, &block)
# * `/href=["']?example-v?(\d+(?:\.\d+)+)-bin\.zip/i`
regex ||= /href=["']?#{Regexp.escape(match[:prefix])}v?(\d+(?:\.\d+)+)#{Regexp.escape(suffix)}/i

PageMatch.find_versions(page_url, regex, cask: cask, &block)
PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)
samford marked this conversation as resolved.
Show resolved Hide resolved
end
end
end
Expand Down
12 changes: 6 additions & 6 deletions Library/Homebrew/livecheck/strategy/bitbucket.rb
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,15 @@ def self.match?(url)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **unused, &block)
match = url.match(URL_MATCH_REGEX)

# Use `\.t` instead of specific tarball extensions (e.g. .tar.gz)
Expand All @@ -84,7 +84,7 @@ def self.find_versions(url, regex, cask: nil, &block)
# * `/href=.*?example-v?(\d+(?:\.\d+)+)\.t/i`
regex ||= /href=.*?#{Regexp.escape(match[:prefix])}v?(\d+(?:\.\d+)+)#{Regexp.escape(suffix)}/i

PageMatch.find_versions(page_url, regex, cask: cask, &block)
PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)
end
end
end
Expand Down
12 changes: 6 additions & 6 deletions Library/Homebrew/livecheck/strategy/cpan.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,15 @@ def self.match?(url)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **unused, &block)
match = url.match(URL_MATCH_REGEX)

# Use `\.t` instead of specific tarball extensions (e.g. .tar.gz)
Expand All @@ -68,7 +68,7 @@ def self.find_versions(url, regex, cask: nil, &block)
# Example regex: `/href=.*?Brew[._-]v?(\d+(?:\.\d+)*)\.t/i`
regex ||= /href=.*?#{match[:prefix]}[._-]v?(\d+(?:\.\d+)*)#{Regexp.escape(suffix)}/i

PageMatch.find_versions(page_url, regex, cask: cask, &block)
PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)
end
end
end
Expand Down
14 changes: 6 additions & 8 deletions Library/Homebrew/livecheck/strategy/electron_builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -59,20 +59,18 @@ def self.versions_from_content(content, &block)
# Checks the YAML content at the URL for new versions.
#
# @param url [String] the URL of the content to check
# @param regex [Regexp, nil] a regex used for matching versions
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(T.proc.params(arg0: T::Hash[String, T.untyped]).returns(T.nilable(String))),
url: String,
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(T.proc.params(arg0: T::Hash[String, T.untyped]).returns(T.nilable(String))),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
raise ArgumentError, "The #{T.must(name).demodulize} strategy does not support a regex." if regex
def self.find_versions(url:, **unused, &block)
raise ArgumentError, "The #{T.must(name).demodulize} strategy does not support a regex." if unused[:regex]

match_data = { matches: {}, regex: regex, url: url }
match_data = { matches: {}, url: url }

match_data.merge!(Strategy.page_content(url))
content = match_data.delete(:content)
Expand Down
16 changes: 9 additions & 7 deletions Library/Homebrew/livecheck/strategy/extract_plist.rb
Original file line number Diff line number Diff line change
Expand Up @@ -77,21 +77,23 @@ def self.versions_from_items(items, &block)

# Uses {UnversionedCaskChecker} on the provided cask to identify
# versions from `plist` files.
#
# @param cask [Cask::Cask] the cask to check for version information
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: Cask::Cask,
block: T.nilable(
cask: Cask::Cask,
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: T::Hash[String, Item]).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask:, &block)
raise ArgumentError, "The #{T.must(name).demodulize} strategy does not support a regex." if regex
def self.find_versions(cask:, **unused, &block)
raise ArgumentError, "The #{T.must(name).demodulize} strategy does not support a regex." if unused[:regex]
raise ArgumentError, "The #{T.must(name).demodulize} strategy only supports casks." unless T.unsafe(cask)

match_data = { matches: {}, regex: regex, url: url }
match_data = { matches: {} }

unversioned_cask_checker = UnversionedCaskChecker.new(cask)
items = unversioned_cask_checker.all_versions.transform_values { |v| Item.new(bundle_version: v) }
Expand Down
10 changes: 5 additions & 5 deletions Library/Homebrew/livecheck/strategy/git.rb
Original file line number Diff line number Diff line change
Expand Up @@ -122,16 +122,16 @@ def self.versions_from_tags(tags, regex = nil, &block)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
_unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: T::Array[String], arg1: T.nilable(Regexp))
.returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex = nil, cask: nil, &block)
def self.find_versions(url:, regex: nil, **_unused, &block)
match_data = { matches: {}, regex: regex, url: url }

tags_data = tag_info(url, regex)
Expand Down
12 changes: 6 additions & 6 deletions Library/Homebrew/livecheck/strategy/github_latest.rb
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,15 @@ def self.match?(url)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **unused, &block)
match = url.sub(/\.git$/i, "").match(URL_MATCH_REGEX)

# Example URL: `https://github.com/example/example/releases/latest`
Expand All @@ -82,7 +82,7 @@ def self.find_versions(url, regex, cask: nil, &block)
# The default regex is the same for all URLs using this strategy
regex ||= %r{href=.*?/tag/v?(\d+(?:\.\d+)+)["' >]}i

PageMatch.find_versions(page_url, regex, cask: cask, &block)
PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)
end
end
end
Expand Down
14 changes: 7 additions & 7 deletions Library/Homebrew/livecheck/strategy/gnome.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,15 +53,15 @@ def self.match?(url)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **unused, &block)
match = url.match(URL_MATCH_REGEX)

page_url = "https://download.gnome.org/sources/#{match[:package_name]}/cache.json"
Expand All @@ -71,7 +71,7 @@ def self.find_versions(url, regex, cask: nil, &block)
# count on the delimiter between the package name and numeric
# version being a hyphen and the file being a tarball.
regex = /#{Regexp.escape(match[:package_name])}-(\d+(?:\.\d+)+)\.t/i
version_data = PageMatch.find_versions(page_url, regex, cask: cask, &block)
version_data = PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)

# Filter out unstable versions using the old version scheme where
# the major version is below 40.
Expand All @@ -81,7 +81,7 @@ def self.find_versions(url, regex, cask: nil, &block)

version_data
else
PageMatch.find_versions(page_url, regex, cask: cask, &block)
PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)
end
end
end
Expand Down
12 changes: 6 additions & 6 deletions Library/Homebrew/livecheck/strategy/gnu.rb
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,15 @@ def self.match?(url)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **unused, &block)
match = url.match(URL_MATCH_REGEX)

# The directory listing page for the project's files
Expand All @@ -81,7 +81,7 @@ def self.find_versions(url, regex, cask: nil, &block)
# Example regex: `%r{href=.*?example[._-]v?(\d+(?:\.\d+)*)(?:\.[a-z]+|/)}i`
regex ||= %r{href=.*?#{match[:project_name]}[._-]v?(\d+(?:\.\d+)*)(?:\.[a-z]+|/)}i

PageMatch.find_versions(page_url, regex, cask: cask, &block)
PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)
end
end
end
Expand Down
12 changes: 6 additions & 6 deletions Library/Homebrew/livecheck/strategy/hackage.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,15 @@ def self.match?(url)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **unused, &block)
match = File.basename(url).match(FILENAME_REGEX)

# A page containing a directory listing of the latest source tarball
Expand All @@ -67,7 +67,7 @@ def self.find_versions(url, regex, cask: nil, &block)
# Example regex: `%r{<h3>example-(.*?)/?</h3>}i`
regex ||= %r{<h3>#{Regexp.escape(match[:package_name])}-(.*?)/?</h3>}i

PageMatch.find_versions(page_url, regex, cask: cask, &block)
PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)
end
end
end
Expand Down
10 changes: 5 additions & 5 deletions Library/Homebrew/livecheck/strategy/header_match.rb
Original file line number Diff line number Diff line change
Expand Up @@ -76,15 +76,15 @@ def self.versions_from_headers(headers, regex = nil, &block)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
_unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: T::Hash[String, String], arg1: T.nilable(Regexp)).returns(T.nilable(String)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **_unused, &block)
match_data = { matches: {}, regex: regex, url: url }

headers = Strategy.page_headers(url)
Expand Down
12 changes: 6 additions & 6 deletions Library/Homebrew/livecheck/strategy/launchpad.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,15 @@ def self.match?(url)
# @return [Hash]
sig {
params(
url: String,
regex: T.nilable(Regexp),
cask: T.nilable(Cask::Cask),
block: T.nilable(
url: String,
regex: T.nilable(Regexp),
unused: T.nilable(T::Hash[Symbol, T.untyped]),
block: T.nilable(
T.proc.params(arg0: String, arg1: Regexp).returns(T.any(String, T::Array[String], NilClass)),
),
).returns(T::Hash[Symbol, T.untyped])
}
def self.find_versions(url, regex, cask: nil, &block)
def self.find_versions(url:, regex: nil, **unused, &block)
match = url.match(URL_MATCH_REGEX)

# The main page for the project on Launchpad
Expand All @@ -65,7 +65,7 @@ def self.find_versions(url, regex, cask: nil, &block)
# The default regex is the same for all URLs using this strategy
regex ||= %r{class="[^"]*version[^"]*"[^>]*>\s*Latest version is (.+)\s*</}

PageMatch.find_versions(page_url, regex, cask: cask, &block)
PageMatch.find_versions(url: page_url, regex: regex, **unused, &block)
end
end
end
Expand Down