Spec-Zone.ru › Homebrew

Класс: 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. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Utils::Bottles::Collector)


21
22
23
# File 'bottle_specification.rb', line 21

def collector
  @collector
end

#repository ⇒ String (только для чтения)

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String)


27
28
29
# File 'bottle_specification.rb', line 27

def repository
  @repository
end

#root_url_specs ⇒ Hash{Symbol => T.untyped} (только для чтения)

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Hash{Symbol => T.untyped})


24
25
26
# File 'bottle_specification.rb', line 24

def root_url_specs
  @root_url_specs
end

#tap ⇒ Tap?

Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Tap, nil)


18
19
20
# File 'bottle_specification.rb', line 18

def tap
  @tap
end

Подробное описание методов экземпляра

#checksums ⇒ Array<Hash>

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Array<Hash>)


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
  tags = collector.tags.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
  tags.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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • tag (Utils::Bottles::Tag) (по умолчанию: Utils::Bottles.tag)

Возвращает:

  • (Boolean)


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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • val (Integer) (по умолчанию: T.unsafe(nil))

Возвращает:

  • (Integer)


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. Сторонним разработчикам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • var (String, nil) (по умолчанию: nil)
  • specs (Hash{Symbol => T.untyped}) (по умолчанию: {})

Возвращает:

  • (String)


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

Параметры:

  • hash (Hash{Symbol, String => String, Symbol})


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.

Параметры:

  • tag (Utils::Bottles::Tag) (по умолчанию: Utils::Bottles.tag)
  • tab (Tab, nil) (по умолчанию: nil)

Возвращает:

  • (Boolean)


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. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Параметры:

  • tag (Utils::Bottles::Tag)
  • no_older_versions (Boolean) (по умолчанию: false)

Возвращает:

  • (Boolean)


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. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Параметры:

  • tag (Utils::Bottles::Tag)
  • no_older_versions (Boolean) (по умолчанию: false)

Возвращает:

  • (Utils::Bottles::TagSpecification, nil)


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. По возможности сторонним разработчикам следует избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.

Параметры:

  • tag (Utils::Bottles::Tag) (по умолчанию: Utils::Bottles.tag)

Возвращает:

  • (Symbol, String)


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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API