Merge pull request #11077 from MikeMcQuaid/any_bottles
Support `all: SHA256` bottles.
This commit is contained in:
commit
1d34f7f2fa
@ -339,7 +339,7 @@ module Homebrew
|
||||
end
|
||||
end
|
||||
|
||||
_, _, bottle_cellar = Formula[f.name].bottle_specification.checksum_for(bottle_tag, exact: true)
|
||||
_, _, bottle_cellar = Formula[f.name].bottle_specification.checksum_for(bottle_tag, no_older_versions: true)
|
||||
relocatable = [:any, :any_skip_relocation].include?(bottle_cellar)
|
||||
skip_relocation = bottle_cellar == :any_skip_relocation
|
||||
|
||||
@ -579,6 +579,12 @@ module Homebrew
|
||||
def merge(args:)
|
||||
bottles_hash = merge_json_files(parse_json_files(args.named))
|
||||
|
||||
# TODO: deduplicate --no-json bottles by:
|
||||
# 1. throwing away bottles for newer versions of macOS if their SHA256 is
|
||||
# identical
|
||||
# 2. generating `all: $SHA256` bottles that can be used on macOS and Linux
|
||||
# i.e. need to be `any_skip_relocation` and contain no ELF/MachO files.
|
||||
|
||||
any_cellars = ["any", "any_skip_relocation"]
|
||||
bottles_hash.each do |formula_name, bottle_hash|
|
||||
ohai formula_name
|
||||
|
@ -158,7 +158,7 @@ module Homebrew
|
||||
|
||||
formulae.each do |f|
|
||||
name = f.name.downcase
|
||||
if f.bottle_specification.tag?(@bottle_tag, exact: true)
|
||||
if f.bottle_specification.tag?(@bottle_tag, no_older_versions: true)
|
||||
puts "#{Tty.bold}#{Tty.green}#{name}#{Tty.reset}: already bottled" if any_named_args
|
||||
next
|
||||
end
|
||||
|
@ -16,10 +16,10 @@ module Utils
|
||||
|
||||
alias generic_find_matching_tag find_matching_tag
|
||||
|
||||
def find_matching_tag(tag, exact: false)
|
||||
def find_matching_tag(tag, no_older_versions: false)
|
||||
# Used primarily by developers testing beta macOS releases.
|
||||
if exact || (OS::Mac.prerelease? && Homebrew::EnvConfig.developer? &&
|
||||
Homebrew::EnvConfig.skip_or_later_bottles?)
|
||||
if no_older_versions ||
|
||||
(OS::Mac.prerelease? && Homebrew::EnvConfig.developer? && Homebrew::EnvConfig.skip_or_later_bottles?)
|
||||
generic_find_matching_tag(tag)
|
||||
else
|
||||
generic_find_matching_tag(tag) ||
|
||||
|
@ -485,9 +485,9 @@ class BottleSpecification
|
||||
cellar == :any_skip_relocation
|
||||
end
|
||||
|
||||
sig { params(tag: T.any(Symbol, Utils::Bottles::Tag), exact: T::Boolean).returns(T::Boolean) }
|
||||
def tag?(tag, exact: false)
|
||||
checksum_for(tag, exact: exact) ? true : false
|
||||
sig { params(tag: T.any(Symbol, Utils::Bottles::Tag), no_older_versions: T::Boolean).returns(T::Boolean) }
|
||||
def tag?(tag, no_older_versions: false)
|
||||
checksum_for(tag, no_older_versions: no_older_versions) ? true : false
|
||||
end
|
||||
|
||||
# Checksum methods in the DSL's bottle block take
|
||||
@ -533,13 +533,13 @@ class BottleSpecification
|
||||
sig {
|
||||
params(
|
||||
tag: T.any(Symbol, Utils::Bottles::Tag),
|
||||
exact: T::Boolean,
|
||||
no_older_versions: T::Boolean,
|
||||
).returns(
|
||||
T.nilable([Checksum, Symbol, T.any(Symbol, String)]),
|
||||
)
|
||||
}
|
||||
def checksum_for(tag, exact: false)
|
||||
collector.fetch_checksum_for(tag, exact: exact)
|
||||
def checksum_for(tag, no_older_versions: false)
|
||||
collector.fetch_checksum_for(tag, no_older_versions: no_older_versions)
|
||||
end
|
||||
|
||||
def checksums
|
||||
|
@ -493,7 +493,8 @@ describe "brew bottle" do
|
||||
end
|
||||
end
|
||||
|
||||
specify "::merge_json_files" do
|
||||
describe "::merge_json_files" do
|
||||
it "merges JSON files" do
|
||||
bottles_hash = homebrew.merge_json_files(
|
||||
[hello_hash_big_sur, hello_hash_catalina, unzip_hash_big_sur, unzip_hash_catalina],
|
||||
)
|
||||
@ -526,6 +527,11 @@ describe "brew bottle" do
|
||||
)
|
||||
end
|
||||
|
||||
# TODO: add deduplication tests e.g.
|
||||
# it "deduplicates JSON files with matching macOS checksums"
|
||||
# it "deduplicates JSON files with matching OS checksums" do
|
||||
end
|
||||
|
||||
describe "#merge_bottle_spec" do
|
||||
it "allows new bottle hash to be empty" do
|
||||
valid_keys = [:root_url, :prefix, :cellar, :rebuild, :sha256]
|
||||
|
@ -87,6 +87,8 @@ module Utils
|
||||
|
||||
sig { params(value: Symbol).returns(T.attached_class) }
|
||||
def self.from_symbol(value)
|
||||
return new(system: :all, arch: :all) if value == :all
|
||||
|
||||
@all_archs_regex ||= begin
|
||||
all_archs = Hardware::CPU::ALL_ARCHS.map(&:to_s)
|
||||
/
|
||||
@ -118,7 +120,9 @@ module Utils
|
||||
|
||||
sig { returns(Symbol) }
|
||||
def to_sym
|
||||
if macos? && arch == :x86_64
|
||||
if system == :all && arch == :all
|
||||
:all
|
||||
elsif macos? && arch == :x86_64
|
||||
system
|
||||
else
|
||||
"#{arch}_#{system}".to_sym
|
||||
@ -205,21 +209,25 @@ module Utils
|
||||
sig {
|
||||
params(
|
||||
tag: T.any(Symbol, Utils::Bottles::Tag),
|
||||
exact: T::Boolean,
|
||||
no_older_versions: T::Boolean,
|
||||
).returns(
|
||||
T.nilable([Checksum, Symbol, T.any(Symbol, String)]),
|
||||
)
|
||||
}
|
||||
def fetch_checksum_for(tag, exact: false)
|
||||
def fetch_checksum_for(tag, no_older_versions: false)
|
||||
tag = Utils::Bottles::Tag.from_symbol(tag) if tag.is_a?(Symbol)
|
||||
tag = find_matching_tag(tag, exact: exact)&.to_sym
|
||||
tag = find_matching_tag(tag, no_older_versions: no_older_versions)&.to_sym
|
||||
return self[tag][:checksum], tag, self[tag][:cellar] if tag
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_matching_tag(tag, exact: false)
|
||||
tag if key?(tag.to_sym)
|
||||
def find_matching_tag(tag, no_older_versions: false)
|
||||
if key?(tag.to_sym)
|
||||
tag
|
||||
elsif key?(:all)
|
||||
Tag.from_symbol(:all)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user