Модуль: Utils::Bottles
- Определён в:
- utils/bottles.rb
Обзор
Этот модуль является частью внутреннего API. Этот модуль можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и formulae. По возможности сторонним разработчикам следует избегать использования этого модуля, поскольку он может быть удалён или изменён без предупреждения.
Вспомогательные функции для bottles.
Определено в пространстве имён
Классы: Collector, Tag, TagSpecification
Краткое описание методов класса свернуть
- .built_as?(formula) ⇒ Boolean закрытый
- .extname_tag_rebuild(filename) ⇒ Array<String> закрытый
- .file_from_bottle(bottle_file, file_path) ⇒ String закрытый
- .file_outdated?(formula, file) ⇒ Boolean закрытый
- .formula_contents(bottle_file, name: ) ⇒ String закрытый
- .load_tab(formula) ⇒ Tab закрытый
- .path_resolved_basename(root_url, name, checksum, filename) ⇒ Array<(String, [String, nil])>, ... закрытый
- .receipt_path(bottle_file) ⇒ String? закрытый
- .resolve_formula_names(bottle_file) ⇒ Array<(String, String)> закрытый
- .resolve_version(bottle_file) ⇒ PkgVersion закрытый
- .tag(tag = nil) ⇒ Tag внутренний
Возвращает тег для запущенной ОС.
Подробное описание методов класса
.built_as?(formula) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
31 32 33 34 35 36 | # File 'utils/bottles.rb', line 31 def built_as?(formula) return false unless formula.latest_version_installed? tab = Keg.new(formula.latest_installed_prefix).tab !!tab.built_as_bottle end |
.extname_tag_rebuild(filename) ⇒ Array<String>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
53 54 55 | # File 'utils/bottles.rb', line 53 def extname_tag_rebuild(filename) HOMEBREW_BOTTLES_EXTNAME_REGEX.match(filename).to_a.map(&:to_s) end |
.file_from_bottle(bottle_file, file_path) ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
65 66 67 | # File 'utils/bottles.rb', line 65 def file_from_bottle(bottle_file, file_path) Utils.popen_read("tar", "--extract", "--to-stdout", "--file", bottle_file, file_path) end |
.file_outdated?(formula, file) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
39 40 41 42 43 44 45 46 47 48 49 50 | # File 'utils/bottles.rb', line 39 def file_outdated?(formula, file) file = file.resolved_path filename = file.basename.to_s bottle = formula.bottle return false unless bottle _, bottle_tag, bottle_rebuild = extname_tag_rebuild(filename) return false if bottle_tag.blank? bottle_tag != bottle.tag.to_s || bottle_rebuild.to_i != bottle.rebuild end |
.formula_contents(bottle_file, name: ) ⇒ String
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
97 98 99 100 101 102 103 104 | # File 'utils/bottles.rb', line 97 def formula_contents(bottle_file, name: resolve_formula_names(bottle_file)[0]) bottle_version = resolve_version bottle_file formula_path = "#{name}/#{bottle_version}/.brew/#{name}.rb" contents = file_from_bottle(bottle_file, formula_path) raise BottleFormulaUnavailableError.new(bottle_file, formula_path) unless $CHILD_STATUS.success? contents end |
.load_tab(formula) ⇒ Tab
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | # File 'utils/bottles.rb', line 120 def load_tab(formula) keg = Keg.new(formula.prefix) tabfile = keg/AbstractTab::FILENAME bottle_json_path = formula.local_bottle_path&.sub(/\.(\d+\.)?tar\.gz$/, ".json") if bottle_json_path.nil? && (tab_attributes = formula.bottle_tab_attributes.presence) tab = Tab.from_file_content(tab_attributes.to_json, tabfile) return tab if tab.built_on&.[]("os") == HOMEBREW_SYSTEM elsif !tabfile.exist? && bottle_json_path&.exist? _, tag, = Utils::Bottles.extname_tag_rebuild(formula.local_bottle_path.to_s) bottle_hash = JSON.parse(File.read(bottle_json_path)) tab_json = bottle_hash[formula.full_name]["bottle"]["tags"][tag]["tab"].to_json return Tab.from_file_content(tab_json, tabfile) else tab = keg.tab end tab.runtime_dependencies = begin f_runtime_deps = formula.runtime_dependencies(read_from_tab: false) Tab.runtime_deps_hash(formula, f_runtime_deps) end tab end |
.path_resolved_basename(root_url, name, checksum, filename) ⇒ Array<(String, [String, nil])>, ...
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
110 111 112 113 114 115 116 117 | # File 'utils/bottles.rb', line 110 def path_resolved_basename(root_url, name, checksum, filename) if root_url.match?(GitHubPackages::URL_REGEX) image_name = GitHubPackages.image_formula_name(name) ["#{image_name}/blobs/sha256:#{checksum}", filename&.github_packages] else filename&.url_encode end end |
.receipt_path(bottle_file) ⇒ String?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
58 59 60 61 62 | # File 'utils/bottles.rb', line 58 def receipt_path(bottle_file) bottle_file_list(bottle_file).find do |line| %r{.+/.+/INSTALL_RECEIPT.json}.match?(line) end end |
.resolve_formula_names(bottle_file) ⇒ Array<(String, String)>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | # File 'utils/bottles.rb', line 70 def resolve_formula_names(bottle_file) name = bottle_file_list(bottle_file).first.to_s.split("/").fetch(0) full_name = if (receipt_file_path = receipt_path(bottle_file)) receipt_file = file_from_bottle(bottle_file, receipt_file_path) tap = Tab.from_file_content(receipt_file, "#{bottle_file}/#{receipt_file_path}").tap "#{tap}/#{name}" if tap.present? && !tap.core_tap? else bottle_json_path = Pathname(bottle_file.sub(/\.(\d+\.)?tar\.gz$/, ".json")) if bottle_json_path.exist? && (bottle_json_path_contents = bottle_json_path.read.presence) && (bottle_json = JSON.parse(bottle_json_path_contents).presence) && bottle_json.is_a?(Hash) bottle_json.keys.first.presence end end full_name ||= name [name, full_name] end |
.resolve_version(bottle_file) ⇒ PkgVersion
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
91 92 93 94 | # File 'utils/bottles.rb', line 91 def resolve_version(bottle_file) version = bottle_file_list(bottle_file).first.to_s.split("/").fetch(1) PkgVersion.parse(version) end |
.tag(tag = nil) ⇒ Tag
Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением casks и формул. По возможности сторонним разработчикам не следует использовать этот метод, поскольку он может быть удалён или изменён без предупреждения.
Возвращает тег для запущенной операционной системы.
16 17 18 19 20 21 22 23 24 25 26 27 28 | # File 'utils/bottles.rb', line 16 def tag(tag = nil) case tag when Symbol Tag.from_symbol(tag) when Tag tag else @tag ||= T.let(Tag.new( system: HOMEBREW_SYSTEM.downcase.to_sym, arch: HOMEBREW_PROCESSOR.downcase.to_sym, ), T.nilable(Tag)) end end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Utils/Bottles.html