Merge pull request #17724 from Homebrew/ww/fix-local-bottles

This commit is contained in:
William Woodruff 2024-07-14 13:32:36 -04:00 committed by GitHub
commit a6e6837077
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 44 additions and 7 deletions

View File

@ -108,8 +108,16 @@ module Homebrew
return unless url.match?(%r{^https?://files\.pythonhosted\.org/packages/})
return if name == owner.name # Skip the top-level package name as we only care about `resource "foo"` blocks.
url =~ %r{/(?<package_name>[^/]+)-}
pypi_package_name = Regexp.last_match(:package_name).to_s.gsub(/[_.]/, "-")
if url.end_with? ".whl"
path = URI(url).path
return unless path.present?
pypi_package_name, = File.basename(path).split("-", 2)
else
url =~ %r{/(?<package_name>[^/]+)-}
pypi_package_name = Regexp.last_match(:package_name).to_s.gsub(/[_.]/, "-")
end
return if name.casecmp(pypi_package_name).zero?
problem "resource name should be `#{pypi_package_name}` to match the PyPI package name"

View File

@ -503,7 +503,7 @@ RSpec.describe Homebrew::FormulaAuditor do
end
describe "#audit_resource_name_matches_pypi_package_name_in_url" do
it "reports a problem if the resource name does not match the python package name" do
it "reports a problem if the resource name does not match the python sdist name" do
fa = formula_auditor "foo", <<~RUBY
class Foo < Formula
url "https://brew.sh/foo-1.0.tgz"
@ -521,6 +521,25 @@ RSpec.describe Homebrew::FormulaAuditor do
expect(fa.problems.first[:message])
.to match("resource name should be `FooSomething` to match the PyPI package name")
end
it "reports a problem if the resource name does not match the python wheel name" do
fa = formula_auditor "foo", <<~RUBY
class Foo < Formula
url "https://brew.sh/foo-1.0.tgz"
sha256 "abc123"
homepage "https://brew.sh"
resource "Something" do
url "https://files.pythonhosted.org/packages/FooSomething-1.0.0-py3-none-any.whl"
sha256 "def456"
end
end
RUBY
fa.audit_specs
expect(fa.problems.first[:message])
.to match("resource name should be `FooSomething` to match the PyPI package name")
end
end
describe "#check_service_command" do

View File

@ -73,12 +73,22 @@ module PyPI
return
end
sdist = json["urls"].find { |url| url["packagetype"] == "sdist" }
return if sdist.nil?
dist = json["urls"].find do |url|
url["packagetype"] == "sdist"
end
# If there isn't an sdist, we use the first universal wheel.
if dist.nil?
dist = json["urls"].find do |url|
url["filename"].end_with?("-none-any.whl")
end
end
return if dist.nil?
@pypi_info = [
PyPI.normalize_python_package(json["info"]["name"]), sdist["url"],
sdist["digests"]["sha256"], json["info"]["version"]
PyPI.normalize_python_package(json["info"]["name"]), dist["url"],
dist["digests"]["sha256"], json["info"]["version"]
]
end