diff --git a/Library/Homebrew/dev-cmd/bump-formula-pr.rb b/Library/Homebrew/dev-cmd/bump-formula-pr.rb index 0e8144dee6..6affcf1246 100644 --- a/Library/Homebrew/dev-cmd/bump-formula-pr.rb +++ b/Library/Homebrew/dev-cmd/bump-formula-pr.rb @@ -183,6 +183,7 @@ module Homebrew elsif !new_url && !new_version odie "#{formula}: no --url= or --version= argument specified!" else + new_url ||= PyPI.update_pypi_url(old_url, new_version) new_url ||= old_url.gsub(old_version, new_version) if new_url == old_url odie <<~EOS diff --git a/Library/Homebrew/utils/pypi.rb b/Library/Homebrew/utils/pypi.rb index 486462be19..a3947533ad 100644 --- a/Library/Homebrew/utils/pypi.rb +++ b/Library/Homebrew/utils/pypi.rb @@ -7,6 +7,20 @@ module PyPI @pipgrip_installed = nil + def url_to_pypi_package_name(url) + return unless url.start_with? PYTHONHOSTED_URL_PREFIX + + File.basename(url).match(/^(.+)-[a-z\d.]+$/)[1] + end + + def update_pypi_url(url, version) + package = url_to_pypi_package_name url + return if package.nil? + + _, url = get_pypi_info(package, version) + url + end + # Get name, url, and version for a given pypi package def get_pypi_info(package, version) metadata_url = "https://pypi.org/pypi/#{package}/#{version}/json" @@ -32,7 +46,7 @@ module PyPI # PyPI package name isn't always the same as the formula name. Try to infer from the URL. pypi_name = if formula.stable.url.start_with?(PYTHONHOSTED_URL_PREFIX) - File.basename(formula.stable.url).match(/^(.+)-[a-z\d.]+$/)[1] + url_to_pypi_package_name formula.stable.url else formula.name end