Spec-Zone.ru › Homebrew

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

инициализирует новую базу данных с указанным именем файла. Если файл существует, его содержимое будет использовано для заполнения базы данных. При сохранении базы данных файл будет создан или перезаписан.

Параметры:

  • filename (String)

См. также:

  • #save!


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

Возвращает:

  • (Hash{String => Array<String>})


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

Этот метод не возвращает значения.

Параметры:

  • bottle_json_dir (String, nil) (по умолчанию: nil)
  • removed_formulae (Array<String>) (по умолчанию: [])


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.message}"
        next
      end

      bottle_json.each do |full_name, hash|
        path_exec_file_tags = 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 path_exec_file_tags.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")] =
          path_exec_file_tags.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

Spec-Zone.ru

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