Class: BottleSpecification Private
- Defined in:
- extend/os/linux/bottle_specification.rb,
bottle_specification.rb
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 ⇒ String readonly private
- #root_url_specs ⇒ Hash{String => T.untyped} readonly private
- #tap ⇒ Tap? private
Instance Method Summary collapse
- #checksums ⇒ Object private
- #compatible_locations?(tag: Utils::Bottles.tag) ⇒ Boolean private
- #initialize ⇒ void constructor private
- #rebuild(val = T.unsafe(nil)) ⇒ Integer 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
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.
19 20 21 22 23 24 25 |
# File 'bottle_specification.rb', line 19 def initialize @rebuild = T.let(0, Integer) @repository = T.let(Homebrew::DEFAULT_REPOSITORY, String) @collector = T.let(Utils::Bottles::Collector.new, Utils::Bottles::Collector) @root_url_specs = T.let({}, T::Hash[String, T.untyped]) @root_url = T.let(nil, T.nilable(String)) 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.
10 11 12 |
# File 'bottle_specification.rb', line 10 def collector @collector end |
#repository ⇒ String (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.
16 17 18 |
# File 'bottle_specification.rb', line 16 def repository @repository end |
#root_url_specs ⇒ Hash{String => T.untyped} (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.
13 14 15 |
# File 'bottle_specification.rb', line 13 def root_url_specs @root_url_specs end |
#tap ⇒ Tap?
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.
8 9 10 |
# File 'bottle_specification.rb', line 8 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.
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'bottle_specification.rb', line 126 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) ? 3 : 2 "#{priority}.#{version}_#{tag}" rescue MacOSVersion::Error # Sort non-macOS tags below macOS tags, and arm64 tags before other tags. priority = (tag.arch == :arm64) ? 1 : 0 "#{priority}.#{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.
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'bottle_specification.rb', line 66 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(val = T.unsafe(nil)) ⇒ Integer
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.
28 29 30 |
# File 'bottle_specification.rb', line 28 def rebuild(val = T.unsafe(nil)) val.nil? ? @rebuild : @rebuild = val 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.
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'bottle_specification.rb', line 32 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
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'bottle_specification.rb', line 101 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/bottle_specification.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.
90 91 92 |
# File 'bottle_specification.rb', line 90 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.
122 123 124 |
# File 'bottle_specification.rb', line 122 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.
56 57 58 59 60 61 62 63 |
# File 'bottle_specification.rb', line 56 def tag_to_cellar(tag = Utils::Bottles.tag) spec = collector.specification_for(tag) if spec.present? spec.cellar else tag.default_cellar end end |