Skip to content

Commit

Permalink
bump-formula-pr: update Python resources for non-PyPI formulae
Browse files Browse the repository at this point in the history
This extends previous logic to include non-PyPI formulae that are
specified within pypi_formula_mappings.json.

Signed-off-by: Michael Cho <[email protected]>
  • Loading branch information
cho-m committed Apr 14, 2024
1 parent 17d5ab3 commit 9ebd51a
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 13 deletions.
11 changes: 10 additions & 1 deletion Library/Homebrew/dev-cmd/bump-formula-pr.rb
Expand Up @@ -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)

Check warning on line 338 in Library/Homebrew/dev-cmd/bump-formula-pr.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/bump-formula-pr.rb#L338

Added line #L338 was not covered by tests
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)
Expand Down
34 changes: 22 additions & 12 deletions Library/Homebrew/utils/pypi.rb
Expand Up @@ -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

Expand Down Expand Up @@ -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]),
Expand All @@ -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)
Expand Down Expand Up @@ -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
Expand All @@ -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

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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

0 comments on commit 9ebd51a

Please sign in to comment.