From 6f622cd525cc2fe26ea6638c4eebbf139aa7806f Mon Sep 17 00:00:00 2001 From: hyuraku <32809703+hyuraku@users.noreply.github.com> Date: Sat, 28 Mar 2020 16:57:47 +0900 Subject: [PATCH 1/6] audit whether GitHub prerelease ot not --- Library/Homebrew/dev-cmd/audit.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index 09734fc964..301717d206 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -795,6 +795,12 @@ module Homebrew return if stable_url_minor_version.even? problem "#{stable.version} is a development release" + when %r{^https://github.com/} + _, owner = URI.parse(stable.url).path.split("/") + tag = stable.specs[:tag] || stable.version.to_s + if GitHub.open_api("#{GitHub::API_URL}/repos/#{owner}/#{stable.full_name}/releases/tags/#{tag}")["prerelease"] + problem "#{tag} is a GitHub prerelease" + end end end From e89be06447bc392ba5cd90722f5946d447c3b0e4 Mon Sep 17 00:00:00 2001 From: hyuraku <32809703+hyuraku@users.noreply.github.com> Date: Thu, 2 Apr 2020 00:13:58 +0900 Subject: [PATCH 2/6] change how to get tag --- Library/Homebrew/dev-cmd/audit.rb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index 301717d206..8f2dbc94c4 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -796,10 +796,14 @@ module Homebrew problem "#{stable.version} is a development release" when %r{^https://github.com/} - _, owner = URI.parse(stable.url).path.split("/") - tag = stable.specs[:tag] || stable.version.to_s - if GitHub.open_api("#{GitHub::API_URL}/repos/#{owner}/#{stable.full_name}/releases/tags/#{tag}")["prerelease"] - problem "#{tag} is a GitHub prerelease" + _, owner, _, _, version = URI.parse(stable.url).path.split("/") + tag = stable.specs[:tag] || version.gsub(".tar.gz","") + begin + if GitHub.open_api("#{GitHub::API_URL}/repos/#{owner}/#{stable.full_name}/releases/tags/#{tag}")\ + ["prerelease"] + problem "#{tag} is a GitHub prerelease" + end + rescue end end end From 40871a97823e0854284813426b63ad3c665bf668 Mon Sep 17 00:00:00 2001 From: hyuraku <32809703+hyuraku@users.noreply.github.com> Date: Thu, 2 Apr 2020 00:32:09 +0900 Subject: [PATCH 3/6] repair style --- Library/Homebrew/dev-cmd/audit.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index 8f2dbc94c4..fd591b56f6 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -797,13 +797,14 @@ module Homebrew problem "#{stable.version} is a development release" when %r{^https://github.com/} _, owner, _, _, version = URI.parse(stable.url).path.split("/") - tag = stable.specs[:tag] || version.gsub(".tar.gz","") + tag = stable.specs[:tag] || version.gsub(".tar.gz", "") begin if GitHub.open_api("#{GitHub::API_URL}/repos/#{owner}/#{stable.full_name}/releases/tags/#{tag}")\ ["prerelease"] problem "#{tag} is a GitHub prerelease" end - rescue + rescue GitHub::HTTPNotFoundError => e + opoo e.message end end end From 399caa007c1f2da56fba2328e00e3327e2bc42da Mon Sep 17 00:00:00 2001 From: hyuraku <32809703+hyuraku@users.noreply.github.com> Date: Thu, 2 Apr 2020 23:44:55 +0900 Subject: [PATCH 4/6] chnage how to extract owner and tag --- Library/Homebrew/dev-cmd/audit.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index fd591b56f6..a099e35ce4 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -796,8 +796,9 @@ module Homebrew problem "#{stable.version} is a development release" when %r{^https://github.com/} - _, owner, _, _, version = URI.parse(stable.url).path.split("/") - tag = stable.specs[:tag] || version.gsub(".tar.gz", "") + matches = stable.url.match(%r{https://github.com/(.*)/.*/(releases/download/(.*)/.*tar.gz|archive/(.*).tar.gz)}) + owner = matches[1] + tag = matches[3] || matches[4] begin if GitHub.open_api("#{GitHub::API_URL}/repos/#{owner}/#{stable.full_name}/releases/tags/#{tag}")\ ["prerelease"] From 5578845e3f27761f3ad9741c79461553e8488430 Mon Sep 17 00:00:00 2001 From: hyuraku <32809703+hyuraku@users.noreply.github.com> Date: Sun, 12 Apr 2020 20:23:43 +0900 Subject: [PATCH 5/6] repair regex condition --- Library/Homebrew/dev-cmd/audit.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index a099e35ce4..7565ffd665 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -796,9 +796,8 @@ module Homebrew problem "#{stable.version} is a development release" when %r{^https://github.com/} - matches = stable.url.match(%r{https://github.com/(.*)/.*/(releases/download/(.*)/.*tar.gz|archive/(.*).tar.gz)}) - owner = matches[1] - tag = matches[3] || matches[4] + owner = stable.url.match(%r{https://github.com/(.*?)(/)})[1] + tag = stable.url.match(%r{https://github.com/.*(download|archive)/(\D*(\d*.){2}\d*)})[2] begin if GitHub.open_api("#{GitHub::API_URL}/repos/#{owner}/#{stable.full_name}/releases/tags/#{tag}")\ ["prerelease"] From afa5713e638fabe1517944e07cbf942c6c41c58d Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Sun, 12 Apr 2020 14:51:49 +0100 Subject: [PATCH 6/6] audit: cleanup prerelease detection. --- Library/Homebrew/dev-cmd/audit.rb | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index 7565ffd665..32aaca5543 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -777,7 +777,7 @@ module Homebrew .split(".", 3) .map(&:to_i) - case stable.url + case (url = stable.url) when /[\d\._-](alpha|beta|rc\d)/ matched = Regexp.last_match(1) version_prefix = stable_version_string.sub(/\d+$/, "") @@ -795,16 +795,23 @@ module Homebrew return if stable_url_minor_version.even? problem "#{stable.version} is a development release" - when %r{^https://github.com/} - owner = stable.url.match(%r{https://github.com/(.*?)(/)})[1] - tag = stable.url.match(%r{https://github.com/.*(download|archive)/(\D*(\d*.){2}\d*)})[2] + when %r{^https://github.com/([\w-]+)/([\w-]+)/} + owner = Regexp.last_match(1) + repo = Regexp.last_match(2) + tag = url.match(%r{^https://github\.com/[\w-]+/[\w-]+/archive/([^/]+)\.(tar\.gz|zip)$}) + .to_a + .second + tag ||= url.match(%r{^https://github\.com/[\w-]+/[\w-]+/releases/download/([^/]+)/}) + .to_a + .second + begin - if GitHub.open_api("#{GitHub::API_URL}/repos/#{owner}/#{stable.full_name}/releases/tags/#{tag}")\ - ["prerelease"] - problem "#{tag} is a GitHub prerelease" + if (release = GitHub.open_api("#{GitHub::API_URL}/repos/#{owner}/#{repo}/releases/tags/#{tag}")) + problem "#{tag} is a GitHub prerelease" if release["prerelease"] end - rescue GitHub::HTTPNotFoundError => e - opoo e.message + rescue GitHub::HTTPNotFoundError + # No-op if we can't find the release. + nil end end end