Class: BottleSpecification Private
- Extended by:
- Attrable
- Defined in:
- extend/os/linux/software_spec.rb,
software_spec.rb,
sorbet/rbi/dsl/bottle_specification.rbi
This class is part of a private API. This class may only be used in the Homebrew/brew repository. Third parties should avoid using this class if possible, as it may be removed or changed without warning.
Constant Summary collapse
- RELOCATABLE_CELLARS =
This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.
[:any, :any_skip_relocation].freeze
Instance Attribute Summary collapse
- #collector ⇒ Object readonly private
- #repository ⇒ Object readonly private
- #root_url_specs ⇒ Object readonly private
- #tap ⇒ Object private
Instance Method Summary collapse
- #checksums ⇒ Object private
- #compatible_locations?(tag: Utils::Bottles.tag) ⇒ Boolean private
- #initialize ⇒ void constructor private
- #rebuild(arg = nil) ⇒ T.untyped private
- #root_url(var = nil, specs = {}) ⇒ Object private
-
#sha256(hash) ⇒ Object
private
Checksum methods in the DSL's bottle block take a Hash, which indicates the platform the checksum applies on.
-
#skip_relocation?(tag: Utils::Bottles.tag) ⇒ Boolean
private
Does the Bottle this BottleSpecification belongs to need to be relocated?.
- #tag?(tag, no_older_versions: false) ⇒ Boolean private
- #tag_specification_for(tag, no_older_versions: false) ⇒ Utils::Bottles::TagSpecification? private
- #tag_to_cellar(tag = Utils::Bottles.tag) ⇒ Symbol, String private
Methods included from Attrable
Constructor Details
#initialize ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
525 526 527 528 529 530 |
# File 'software_spec.rb', line 525 def initialize @rebuild = 0 @repository = Homebrew::DEFAULT_REPOSITORY @collector = Utils::Bottles::Collector.new @root_url_specs = {} end |
Instance Attribute Details
#collector ⇒ Object (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
522 523 524 |
# File 'software_spec.rb', line 522 def collector @collector end |
#repository ⇒ Object (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
522 523 524 |
# File 'software_spec.rb', line 522 def repository @repository end |
#root_url_specs ⇒ Object (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
522 523 524 |
# File 'software_spec.rb', line 522 def root_url_specs @root_url_specs end |
#tap ⇒ Object
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
521 522 523 |
# File 'software_spec.rb', line 521 def tap @tap end |
Instance Method Details
#checksums ⇒ Object
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 |
# File 'software_spec.rb', line 626 def checksums = collector..sort_by do |tag| version = tag.to_macos_version # Give `arm64` bottles a higher priority so they are first. priority = (tag.arch == :arm64) ? 2 : 1 "#{priority}.#{version}_#{tag}" rescue MacOSVersion::Error # Sort non-macOS tags below macOS tags. "0.#{tag}" end .reverse.map do |tag| spec = collector.specification_for(tag) { "tag" => spec.tag.to_sym, "digest" => spec.checksum, "cellar" => spec.cellar, } end end |
#compatible_locations?(tag: Utils::Bottles.tag) ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 |
# File 'software_spec.rb', line 566 def compatible_locations?(tag: Utils::Bottles.tag) cellar = tag_to_cellar(tag) return true if RELOCATABLE_CELLARS.include?(cellar) prefix = Pathname(cellar.to_s).parent.to_s cellar_relocatable = cellar.size >= HOMEBREW_CELLAR.to_s.size && ENV["HOMEBREW_RELOCATE_BUILD_PREFIX"].present? prefix_relocatable = prefix.size >= HOMEBREW_PREFIX.to_s.size && ENV["HOMEBREW_RELOCATE_BUILD_PREFIX"].present? compatible_cellar = cellar == HOMEBREW_CELLAR.to_s || cellar_relocatable compatible_prefix = prefix == HOMEBREW_PREFIX.to_s || prefix_relocatable compatible_cellar && compatible_prefix end |
#rebuild(arg = nil) ⇒ T.untyped
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
10 |
# File 'sorbet/rbi/dsl/bottle_specification.rbi', line 10 def rebuild(arg = nil); end |
#root_url(var = nil, specs = {}) ⇒ Object
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 |
# File 'software_spec.rb', line 532 def root_url(var = nil, specs = {}) if var.nil? @root_url ||= if (github_packages_url = GitHubPackages.root_url_if_match(Homebrew::EnvConfig.bottle_domain)) github_packages_url else Homebrew::EnvConfig.bottle_domain end else @root_url = if (github_packages_url = GitHubPackages.root_url_if_match(var)) github_packages_url else var end @root_url_specs.merge!(specs) end end |
#sha256(hash) ⇒ Object
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Checksum methods in the DSL's bottle block take a Hash, which indicates the platform the checksum applies on. Example bottle block syntax: bottle do sha256 cellar: :any_skip_relocation, big_sur: "69489ae397e4645..." sha256 cellar: :any, catalina: "449de5ea35d0e94..." end
601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 |
# File 'software_spec.rb', line 601 def sha256(hash) sha256_regex = /^[a-f0-9]{64}$/i # find new `sha256 big_sur: "69489ae397e4645..."` format tag, digest = hash.find do |key, value| key.is_a?(Symbol) && value.is_a?(String) && value.match?(sha256_regex) end cellar = hash[:cellar] if digest && tag tag = Utils::Bottles::Tag.from_symbol(tag) cellar ||= tag.default_cellar collector.add(tag, checksum: Checksum.new(digest), cellar:) end |
#skip_relocation?(tag: Utils::Bottles.tag) ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Does the Bottle this BottleSpecification belongs to need to be relocated?
6 7 8 |
# File 'extend/os/linux/software_spec.rb', line 6 def skip_relocation?(tag: Utils::Bottles.tag) false end |
#tag?(tag, no_older_versions: false) ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
590 591 592 |
# File 'software_spec.rb', line 590 def tag?(tag, no_older_versions: false) collector.tag?(tag, no_older_versions:) end |
#tag_specification_for(tag, no_older_versions: false) ⇒ Utils::Bottles::TagSpecification?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
622 623 624 |
# File 'software_spec.rb', line 622 def tag_specification_for(tag, no_older_versions: false) collector.specification_for(tag, no_older_versions:) end |
#tag_to_cellar(tag = Utils::Bottles.tag) ⇒ Symbol, String
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
556 557 558 559 560 561 562 563 |
# File 'software_spec.rb', line 556 def tag_to_cellar(tag = Utils::Bottles.tag) spec = collector.specification_for(tag) if spec.present? spec.cellar else tag.default_cellar end end |