From 9ebd51adf436b9872bd38e92fb84a3deb452b0a5 Mon Sep 17 00:00:00 2001 From: Michael Cho Date: Thu, 29 Feb 2024 21:50:22 -0500 Subject: [PATCH] bump-formula-pr: update Python resources for non-PyPI formulae This extends previous logic to include non-PyPI formulae that are specified within pypi_formula_mappings.json. Signed-off-by: Michael Cho --- Library/Homebrew/dev-cmd/bump-formula-pr.rb | 11 ++++++- Library/Homebrew/utils/pypi.rb | 34 +++++++++++++-------- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/Library/Homebrew/dev-cmd/bump-formula-pr.rb b/Library/Homebrew/dev-cmd/bump-formula-pr.rb index 5e4b0f007c7c67..3aec68e0f0e9ff 100644 --- a/Library/Homebrew/dev-cmd/bump-formula-pr.rb +++ b/Library/Homebrew/dev-cmd/bump-formula-pr.rb @@ -334,14 +334,23 @@ def run end unless args.dry_run? + ignore_non_pypi_packages = formula.tap&.pypi_formula_mappings&.key?(formula.full_name).blank? + non_pypi_pip_install_url = if ignore_non_pypi_packages || new_url.blank? || PyPI.pypi_url?(new_url) + nil + elsif new_tag.present? + "git+#{new_url}@#{new_tag}" + else + new_url + end resources_checked = PyPI.update_python_resources! formula, version: new_formula_version.to_s, + url: non_pypi_pip_install_url, package_name: args.python_package_name, extra_packages: args.python_extra_packages, exclude_packages: args.python_exclude_packages, install_dependencies: args.install_dependencies?, silent: args.quiet?, - ignore_non_pypi_packages: true + ignore_non_pypi_packages: end run_audit(formula, alias_rename, old_contents) diff --git a/Library/Homebrew/utils/pypi.rb b/Library/Homebrew/utils/pypi.rb index bef4322792d775..724f1ef5b7994a 100644 --- a/Library/Homebrew/utils/pypi.rb +++ b/Library/Homebrew/utils/pypi.rb @@ -18,7 +18,7 @@ def initialize(package_string, is_url: false, python_name: "python") @pypi_info = nil @package_string = package_string @is_url = is_url - @is_pypi_url = package_string.start_with? PYTHONHOSTED_URL_PREFIX + @is_pypi_url = PyPI.pypi_url?(package_string) @python_name = python_name end @@ -195,6 +195,7 @@ def self.update_pypi_url(url, version) params( formula: Formula, version: T.nilable(String), + url: T.nilable(String), package_name: T.nilable(String), extra_packages: T.nilable(T::Array[String]), exclude_packages: T.nilable(T::Array[String]), @@ -206,7 +207,7 @@ def self.update_pypi_url(url, version) ignore_non_pypi_packages: T.nilable(T::Boolean), ).returns(T.nilable(T::Boolean)) } - def self.update_python_resources!(formula, version: nil, package_name: nil, extra_packages: nil, + def self.update_python_resources!(formula, version: nil, url: nil, package_name: nil, extra_packages: nil, exclude_packages: nil, dependencies: nil, install_dependencies: false, print_only: false, silent: false, verbose: false, ignore_non_pypi_packages: false) @@ -262,10 +263,12 @@ def self.update_python_resources!(formula, version: nil, package_name: nil, extr nil else stable = T.must(formula.stable) - url = if stable.specs[:tag].present? - url = "git+#{stable.url}@#{stable.specs[:tag]}" - else - stable.url + if url.blank? + url = if stable.specs[:tag].present? + "git+#{stable.url}@#{stable.specs[:tag]}" + else + stable.url + end end Package.new(url, is_url: true, python_name:) end @@ -275,11 +278,13 @@ def self.update_python_resources!(formula, version: nil, package_name: nil, extr elsif version.present? if main_package.valid_pypi_package? main_package.version = version - else - return if ignore_non_pypi_packages - - odie "The main package is not a PyPI package, meaning that version-only updates cannot be \ - performed. Please update its URL manually." + elsif ignore_non_pypi_packages + return + elsif url.blank? + odie "The main package is not a PyPI package, meaning that version-only " \ + "updates cannot be performed. Please update its URL manually." + elsif !silent + ohai "Ignoring #{__method__} `version` argument as `url` argument was provided on non-PyPI main package." end end @@ -309,7 +314,7 @@ def self.update_python_resources!(formula, version: nil, package_name: nil, extr end formula.resources.each do |resource| - if !print_only && !resource.url.start_with?(PYTHONHOSTED_URL_PREFIX) + if !print_only && !PyPI.pypi_url?(resource.url) odie "\"#{formula.name}\" contains non-PyPI resources. Please update the resources manually." end end @@ -432,4 +437,9 @@ def self.pip_report_to_packages(report) Package.new "#{name}==#{version}" end end + + sig { params(url: String).returns(T::Boolean) } + def self.pypi_url?(url) + url.start_with?(PYTHONHOSTED_URL_PREFIX) + end end