Класс: Homebrew::ExecutablesDB Приватный
- Наследует:
- Object
- Object
- Homebrew::ExecutablesDB
- Подключает:
- Utils::Output::Mixin
- Определён в:
- executables_db.rb
Обзор
Этот класс является частью приватного API. Этот класс можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого класса, поскольку он может быть удалён или изменён без предупреждения.
ExecutablesDB представляет собой базу данных, связывающую формулы с предоставляемыми ими двоичными файлами.
Краткое описание констант свернуть
- DB_LINE_REGEX =
Эта константа является частью приватного API. Эту константу можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этой константы, поскольку она может быть удалена или изменена без предупреждения.
/^(?<name>.*?)(?:\([^)]*\))?:(?<exes_line>.*)?$/
Краткое описание методов экземпляра свернуть
- #initialize(filename) ⇒ void конструктор приватный
инициализирует новую базу данных с указанным именем файла.
- #save! ⇒ void приватный
сохраняет базу данных в соответствующий файл.
- #to_hash ⇒ Hash{String => Array<String>} приватный
- #update!(bottle_json_dir: nil, removed_formulae: []) ⇒ void приватный
Методы, подключённые из 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(filename) ⇒ void
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
инициализирует новую базу данных с указанным именем файла. Если файл существует, его содержимое будет использовано для заполнения базы данных. При сохранении базы данных файл будет создан или перезаписан.
22 23 24 25 26 27 28 29 30 31 32 33 34 | # File 'executables_db.rb', line 22 def initialize(filename) @filename = filename @exes = T.let({}, T::Hash[String, T::Array[String]]) return unless File.file? @filename File.new(@filename).each do |line| matches = line.match DB_LINE_REGEX next unless matches @exes[matches[:name].to_s] ||= matches[:exes_line]&.split || [] end end |
Подробное описание методов экземпляра
#save! ⇒ void
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод не возвращает значения.
сохраняет базу данных в соответствующий файл
81 82 83 84 85 86 87 | # File 'executables_db.rb', line 81 def save! File.open(@filename, "w") do |f| @exes.sort.each do |formula, binaries| f.write "#{formula}:#{binaries.join("")}\n" end end end |
#to_hash ⇒ Hash{String => Array<String>}
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
37 38 39 | # File 'executables_db.rb', line 37 def to_hash @exes.transform_values(&:dup) end |
#update!(bottle_json_dir: nil, removed_formulae: []) ⇒ void
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод не возвращает значения.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | # File 'executables_db.rb', line 42 def update!(bottle_json_dir: nil, removed_formulae: []) if (json_dir = bottle_json_dir.presence) && Pathname(json_dir).directory? Dir[File.join(json_dir, "**", "*.bottle.json")].each do |path| bottle_json = begin T.cast(JSON.parse(File.read(path)), T::Hash[String, T::Hash[String, T.untyped]]) rescue JSON::ParserError => e opoo "Skipping #{path}: #{e.}" next end bottle_json.each do |full_name, hash| = T.cast( hash.dig("bottle", "tags") || {}, T::Hash[String, T::Hash[String, T.untyped]], ).values.select { |tag_hash| tag_hash.key?("path_exec_files") } if .empty? opoo "Skipping #{full_name}: no `path_exec_files` in #{path}" next end @exes[hash.dig("formula", "name").to_s.presence || File.basename(full_name, ".rb")] = .flat_map { |tag_hash| Array(tag_hash["path_exec_files"]) } .map { |file| File.basename(file.to_s) } .uniq .sort end end end removed_formulae.uniq.sort.each do |name| next unless @exes.delete(name) puts "Removed #{name}" end end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Homebrew/ExecutablesDB.html