Merge pull request #15463 from samford/livecheck/fix-bitbucket-tag-match

Bitbucket: Fix tag match
This commit is contained in:
Sam Ford 2023-05-21 23:58:03 -04:00 committed by GitHub
commit cd99f72bc3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 16 deletions

View File

@ -61,24 +61,29 @@ module Homebrew
match = url.match(URL_MATCH_REGEX)
return values if match.blank?
regex_prefix = Regexp.escape(T.must(match[:prefix])).gsub("\\-", "-")
# `/get/` archives are Git tag snapshots, so we need to check that tab
# instead of the main `/downloads/` page
values[:url] = if match[:dl_type] == "get"
"https://bitbucket.org/#{match[:path]}/downloads/?tab=tags"
else
"https://bitbucket.org/#{match[:path]}/downloads/"
end
if match[:dl_type] == "get"
values[:url] = "https://bitbucket.org/#{match[:path]}/downloads/?tab=tags"
regex_prefix = Regexp.escape(T.must(match[:prefix])).gsub("\\-", "-")
# Example tag regexes:
# * `/<td[^>]*?class="name"[^>]*?>\s*v?(\d+(?:\.\d+)+)\s*?</im`
# * `/<td[^>]*?class="name"[^>]*?>\s*abc-v?(\d+(?:\.\d+)+)\s*?</im`
values[:regex] = /<td[^>]*?class="name"[^>]*?>\s*#{regex_prefix}v?(\d+(?:\.\d+)+)\s*?</im
else
values[:url] = "https://bitbucket.org/#{match[:path]}/downloads/"
# Use `\.t` instead of specific tarball extensions (e.g. .tar.gz)
suffix = T.must(match[:suffix]).sub(Strategy::TARBALL_EXTENSION_REGEX, ".t")
regex_suffix = Regexp.escape(suffix).gsub("\\-", "-")
# Example regexes:
# Example file regexes:
# * `/href=.*?v?(\d+(?:\.\d+)+)\.t/i`
# * `/href=.*?example-v?(\d+(?:\.\d+)+)\.t/i`
# * `/href=.*?abc-v?(\d+(?:\.\d+)+)\.t/i`
values[:regex] = /href=.*?#{regex_prefix}v?(\d+(?:\.\d+)+)#{regex_suffix}/i
end
values
end

View File

@ -17,7 +17,7 @@ describe Homebrew::Livecheck::Strategy::Bitbucket do
{
get: {
url: "https://bitbucket.org/abc/def/downloads/?tab=tags",
regex: /href=.*?v?(\d+(?:\.\d+)+)\.t/i,
regex: /<td[^>]*?class="name"[^>]*?>\s*v?(\d+(?:\.\d+)+)\s*?</im,
},
downloads: {
url: "https://bitbucket.org/abc/def/downloads/",