Fix cask source checksum handling

This commit is contained in:
Bo Anderson 2024-03-19 15:59:35 +00:00
parent 6c5da0dfe1
commit 326bc3f889
No known key found for this signature in database
4 changed files with 34 additions and 3 deletions

View File

@ -275,6 +275,7 @@ module Cask
@ruby_source_path = sourcefile_path.relative_path_from(tap.path)
end
sig { returns(T::Hash[Symbol, String]) }
def ruby_source_checksum
@ruby_source_checksum ||= {
sha256: Digest::SHA256.file(sourcefile_path).hexdigest,
@ -300,7 +301,7 @@ module Cask
# TODO: Clean this up when we deprecate the current JSON API and move to the internal JSON v3.
ruby_source_sha256 = json_cask.dig(:ruby_source_checksum, :sha256)
ruby_source_sha256 ||= json_cask[:ruby_source_sha256]
@ruby_source_checksum = { "sha256" => ruby_source_sha256 }
@ruby_source_checksum = { sha256: ruby_source_sha256 }
end
def to_s

View File

@ -45,4 +45,30 @@ RSpec.describe Homebrew::API::Cask do
expect(casks_output).to eq casks_hash
end
end
describe "::source_download", :needs_macos do
let(:cask) do
cask = Cask::CaskLoader::FromAPILoader.new(
"everything",
from_json: JSON.parse((TEST_FIXTURE_DIR/"cask/everything.json").read.strip),
).load(config: nil)
cask
end
before do
allow_any_instance_of(Homebrew::API::Download).to receive(:fetch)
allow_any_instance_of(Homebrew::API::Download).to receive(:symlink_location).and_return(
TEST_FIXTURE_DIR/"cask/Casks/everything.rb",
)
end
it "specifies the correct URL and sha256" do
expect(Homebrew::API::Download).to receive(:new).with(
"https://raw.githubusercontent.com/Homebrew/homebrew-cask/abcdef1234567890abcdef1234567890abcdef12/Casks/everything.rb",
Checksum.new("d8d0d6b2e5ff65388eccb82236fd3aa157b4a29bb043a1f72b97f0e9b70e8320"),
any_args,
).and_call_original
described_class.source_download(cask)
end
end
end

View File

@ -219,7 +219,11 @@ RSpec.describe Cask::Cask, :cask do
it "returns expected hash" do
allow(MacOS).to receive(:version).and_return(MacOSVersion.new("13"))
hash = Cask::CaskLoader.load("everything").to_h
cask = Cask::CaskLoader.load("everything")
expect(cask.tap).to receive(:git_head).and_return("abcdef1234567890abcdef1234567890abcdef12")
hash = cask.to_h
expect(hash).to be_a(Hash)
expect(JSON.pretty_generate(hash)).to eq(expected_json)

View File

@ -96,7 +96,7 @@
"disabled": false,
"disable_date": null,
"disable_reason": null,
"tap_git_head": null,
"tap_git_head": "abcdef1234567890abcdef1234567890abcdef12",
"languages": [
"en",
"eo"