Класс: BottleSpecification Закрытый
- Наследует:
- Object
- Object
- BottleSpecification
- Подключает:
- OS::Linux::BottleSpecification, Utils::Output::Mixin
- Определён в:
- bottle_specification.rb
Этот класс является частью закрытого API. Этот класс можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого класса, поскольку он может быть удалён или изменён без предупреждения.
Краткое описание констант свернуть
- ANY_CELLAR =
Эта константа является частью закрытого API. Эту константу можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.
Перемещаемый cellar с использованием заполнителей, например
@@HOMEBREW_PREFIX@@. Требуется перемещение текстовых файлов и двоичных файлов. :any- ANY_SKIP_RELOCATION_CELLAR =
Эта константа является частью закрытого API. Эту константу можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.
Перемещаемый cellar с использованием заполнителей, например
@@HOMEBREW_PREFIX@@. Двоичные файлы перемещать не требуется, но текстовые файлы по-прежнему перемещаются. :any_skip_relocation- RELOCATABLE_CELLARS =
Эта константа является частью закрытого API. Эту константу можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.
T.let([ANY_CELLAR, ANY_SKIP_RELOCATION_CELLAR].freeze, T::Array[Symbol])
Краткое описание атрибутов экземпляра свернуть
- #collector ⇒ Utils::Bottles::Collector только для чтения закрытый
- #repository ⇒ String только для чтения закрытый
- #root_url_specs ⇒ Hash{Symbol => T.untyped} только для чтения закрытый
- #tap ⇒ Tap? закрытый
Краткое описание методов экземпляра свернуть
- #checksums ⇒ Array<Hash> закрытый
- #compatible_locations?(tag: Utils::Bottles.tag) ⇒ Boolean закрытый
- #initialize ⇒ void конструктор закрытый
- #rebuild(val = T.unsafe(nil)) ⇒ Integer закрытый
- #root_url(var = nil, specs = {}) ⇒ String закрытый
- #sha256(hash) ⇒ void закрытый
Методы контрольных сумм в блоке bottle DSL принимают Hash, который указывает платформу, для которой применяется контрольная сумма.
- #skip_relocation?(tag: Utils::Bottles.tag, tab: nil) ⇒ Boolean закрытый
Требуется ли перемещение для Bottle, к которому относится этот BottleSpecification.
- #tag?(tag, no_older_versions: false) ⇒ Boolean закрытый
- #tag_specification_for(tag, no_older_versions: false) ⇒ Utils::Bottles::TagSpecification? закрытый
- #tag_to_cellar(tag = Utils::Bottles.tag) ⇒ Symbol, String закрытый
Методы, подключённые из Utils::Output::Mixin
#issue_reporting_message, #odebug, #odeprecated, #odie, #odisabled, #ofail, #oh1, #oh1_title, #ohai, #ohai_title, #onoe, #opoo, #opoo_outside_github_actions, #opoo_without_github_actions_annotation, #pretty_deprecated, #pretty_disabled, #pretty_duration, #pretty_install_status, #pretty_installed, #pretty_uninstalled, #pretty_upgradable, #pretty_warning
Краткое описание конструкторов
#initialize ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
30 31 32 33 34 35 36 | # File 'bottle_specification.rb', line 30 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[Symbol, T.untyped]) @root_url = T.let(nil, T.nilable(String)) end |
Подробное описание атрибутов экземпляра
#collector ⇒ Utils::Bottles::Collector (только для чтения)
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
21 22 23 | # File 'bottle_specification.rb', line 21 def collector @collector end |
#repository ⇒ String (только для чтения)
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
27 28 29 | # File 'bottle_specification.rb', line 27 def repository @repository end |
#root_url_specs ⇒ Hash{Symbol => T.untyped} (только для чтения)
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
24 25 26 | # File 'bottle_specification.rb', line 24 def root_url_specs @root_url_specs end |
#tap ⇒ Tap?
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
18 19 20 | # File 'bottle_specification.rb', line 18 def tap @tap end |
Подробное описание методов экземпляра
#checksums ⇒ Array<Hash>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | # File 'bottle_specification.rb', line 154 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) odie "Specification for tag #{tag} is nil" if spec.nil? { "tag" => spec.tag.to_sym, "digest" => spec.checksum, "cellar" => spec.cellar, } end end |
#compatible_locations?(tag: Utils::Bottles.tag) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | # File 'bottle_specification.rb', line 84 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
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
39 40 41 | # File 'bottle_specification.rb', line 39 def rebuild(val = T.unsafe(nil)) val.nil? ? @rebuild : @rebuild = val end |
#root_url(var = nil, specs = {}) ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | # File 'bottle_specification.rb', line 44 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) @root_url end end |
#sha256(hash) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
Методы контрольных сумм в блоке bottle DSL принимают Hash, указывающий платформу, к которой относится контрольная сумма. Пример синтаксиса блока bottle: bottle do sha256 cellar: :any_skip_relocation, big_sur: "69489ae397e4645..." sha256 cellar: :any, catalina: "449de5ea35d0e94..." end
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | # File 'bottle_specification.rb', line 124 def sha256(hash) sha256_regex = /^[a-f0-9]{64}$/i # find new `sha256 big_sur: "69489ae397e4645..."` format tag, digest = hash.find do |key, value| # Don't use `odie` in this case. We want to be able to catch this exception # in runtime when getting committed version info in formula auditor raise LegacyDSLError.new(:sha256, hash) if key.is_a?(String) && key.match?(sha256_regex) && value.is_a?(Symbol) key.is_a?(Symbol) && value.is_a?(String) && value.match?(sha256_regex) end odie "Invalid sha256 hash: #{digest}" if !tag || !digest tag = Utils::Bottles::Tag.from_symbol(T.cast(tag, Symbol)) cellar = hash[:cellar] || tag.default_cellar collector.add(tag, checksum: Checksum.new(digest.to_s), cellar:) end |
#skip_relocation?(tag: Utils::Bottles.tag, tab: nil) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Нужно ли перемещать Bottle, которому принадлежит эта BottleSpecification?
В Linux метод всегда возвращает false, если не предоставлен tab, указывающий, что бутылка была собрана с помощью Homebrew 5.1.15 или более поздней версии. Вызывающий код должен убедиться, что предоставленный tab относится к запрошенному tag.
106 107 108 109 | # File 'bottle_specification.rb', line 106 def skip_relocation?(tag: Utils::Bottles.tag, tab: nil) spec = collector.specification_for(tag) spec&.cellar == ANY_SKIP_RELOCATION_CELLAR end |
#tag?(tag, no_older_versions: false) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
112 113 114 | # File 'bottle_specification.rb', line 112 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?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
149 150 151 | # File 'bottle_specification.rb', line 149 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
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
74 75 76 77 78 79 80 81 | # File 'bottle_specification.rb', line 74 def tag_to_cellar(tag = Utils::Bottles.tag) spec = collector.specification_for(tag) if spec.present? spec.cellar else tag.default_cellar end end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/BottleSpecification.html