Spec-Zone.ru › Homebrew

Модуль: InstalledDependents Закрытый

Определён в:
installed_dependents.rb

Обзор

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

Вспомогательные функции для установленных зависимых пакетов.

Краткое описание методов класса свернуть

  • .find_some_installed_dependents(kegs, casks: []) ⇒ Array<(Array<Keg>, Array<String>)>? закрытый

    Получив массив кегов, этот метод попытается найти другие кеги или каски, которые зависят от них.

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

.find_some_installed_dependents(kegs, casks: []) ⇒ Array<(Array<Keg>, Array<String>)>?

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

Получив массив кегов, этот метод попытается найти другие кеги или каски, которые зависят от них. Если такие найдутся, он вернёт:

  • некоторые кеги из переданного массива, от которых зависят установленные пакеты
  • некоторые установленные пакеты, зависящие от этих кегов.

Если такие пакеты не найдутся, метод вернёт nil.

Обратите внимание: nil будет возвращено, если единственными установленными зависимыми пакетами переданных кегов являются другие кеги из массива или каски, указанные в параметре casks.

Для повышения эффективности мы не пытаемся получать полные данные.

Параметры:

  • kegs (Array<Keg>)
  • casks (Array<Cask::Cask>) (по умолчанию: [])

Возвращает:

  • (Array<(Array<Keg>, Array<String>)>, nil)


26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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 'installed_dependents.rb', line 26

def find_some_installed_dependents(kegs, casks: [])
  keg_names = kegs.select(&:optlinked?).map(&:name)
  keg_formulae = []
  kegs_by_source = kegs.group_by do |keg|
    # First, attempt to resolve the keg to a formula
    # to get up-to-date name and tap information.
    f = keg.to_formula
    keg_formulae << f
    [f.name, f.tap]
  rescue
    # If the formula for the keg can't be found,
    # fall back to the information in the tab.
    [keg.name, keg.tab.tap]
  end

  all_required_kegs = Set.new
  all_dependents = []

  # Don't include dependencies of kegs that were in the given array.
  dependents_to_check = (Formula.installed - keg_formulae) + (Cask::Caskroom.casks - casks)

  dependents_to_check.each do |dependent|
    required = case dependent
    when Formula
      dependent.missing_dependencies(hide: keg_names).filter_map do |d|
        d.to_installed_formula
      rescue FormulaUnavailableError
        nil
      end
    when Cask::Cask
      # When checking for cask dependents, we don't care about missing or non-runtime dependencies
      CaskDependent.new(dependent).runtime_dependencies.map(&:to_installed_formula)
    end

    required_kegs = required.filter_map do |f|
      f_kegs = kegs_by_source[[f.name, f.tap]]
      next unless f_kegs

      f_kegs.max_by(&:scheme_and_version)
    end

    next if required_kegs.empty?

    all_required_kegs += required_kegs
    all_dependents << dependent.to_s
  end

  return if all_required_kegs.empty?
  return if all_dependents.empty?

  [all_required_kegs.to_a, all_dependents.sort]
end

© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/InstalledDependents.html

Spec-Zone.ru

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