Класс: Dependency
Обзор
Этот класс является частью внутреннего API. Этот класс можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением cask-файлов и формул. По возможности сторонним разработчикам следует избегать использования этого класса, поскольку он может быть удалён или изменён без предупреждения.
Зависимость от другой формулы Homebrew.
Прямые известные подклассы
Сводка констант
Константы, подключённые из Dependable
Dependable::KEEP_BUT_PRUNE_RECURSIVE_DEPS, Dependable::PRUNE, Dependable::RESERVED_TAGS, Dependable::SKIP
Краткое описание атрибутов экземпляра свернуть
- #name ⇒ String только для чтения закрытый
- #tags ⇒ Array<Symbol, String, Array<T.untyped>> только для чтения закрытый
- #tap ⇒ Tap? только для чтения закрытый
Краткое описание методов класса свернуть
- .action(dependent, dep, &block) ⇒ Symbol? закрытый
CaskDependent может быть ещё не инициализирован, поэтому мы не используем сигнатуру времени выполнения.
- .cache(key, cache_timestamp: nil) ⇒ Hash{String, Symbol => T.untyped} закрытый
- .clear_cache ⇒ void закрытый
- .delete_timestamped_cache_entry(key, cache_timestamp) ⇒ void закрытый
- .expand(dependent, deps = dependent.deps, cache_key: nil, cache_timestamp: nil, &block) ⇒ Array<Dependency> внутренний
Рекурсивно раскрывает зависимости каждого зависимого объекта и при необходимости передаёт пары
[dependent, dep]в блок, чтобы вызывающая сторона могла применить к списку произвольные фильтры. - .merge_repeats(all) ⇒ Array<Dependency> закрытый
Краткое описание методов экземпляра свернуть
- #dup_with_formula_name(formula) ⇒ T.self_type закрытый
- #initialize(name, tags = []) ⇒ void конструктор закрытый
- #installed?(minimum_version: nil, minimum_revision: nil, minimum_compatibility_version: nil, bottle_os_version: nil) ⇒ Boolean закрытый
- #missing_options ⇒ Options закрытый
- #option_names ⇒ Array<String> закрытый
- #satisfied?(minimum_version: nil, minimum_revision: nil, minimum_compatibility_version: nil, bottle_os_version: nil) ⇒ Boolean закрытый
- #to_formula ⇒ Formula закрытый
- #to_installed_formula ⇒ Formula закрытый
- #uses_from_macos? ⇒ Boolean закрытый
Методы, подключённые из Dependable
#build?, #implicit?, #no_linkage?, #option_tags, #optional?, #options, #prune_from_option?, #prune_if_build_and_not_dependent?, #recommended?, #required?, #test?
Подробное описание конструкторов
#initialize(name, tags = []) ⇒ void
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
23 24 25 26 27 28 29 30 31 | # File 'dependency.rb', line 23 def initialize(name, = []) @name = name @tags = T.let(Array(), T::Array[T.any(Symbol, String)]) @tap = T.let(nil, T.nilable(Tap)) return unless (tap_with_name = Tap.with_formula_name(name)) @tap, = tap_with_name end |
Подробное описание атрибутов экземпляра
#name ⇒ String (только для чтения)
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
14 15 16 | # File 'dependency.rb', line 14 def name @name end |
#tags ⇒ Array<Symbol, String, Array<T.untyped>> (только для чтения)
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
20 21 22 | # File 'dependency.rb', line 20 def @tags end |
#tap ⇒ Tap? (только для чтения)
Этот метод является частью приватного API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
17 18 19 | # File 'dependency.rb', line 17 def tap @tap end |
Подробное описание методов класса
.action(dependent, dep, &block) ⇒ Symbol?
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
CaskDependent может быть ещё не инициализирован, поэтому мы не используем сигнатуру времени выполнения
241 242 243 244 245 246 247 | # File 'dependency.rb', line 241 def action(dependent, dep, &block) if block yield dependent, dep elsif dep.optional? || dep.recommended? Dependable::PRUNE unless T.cast(dependent, Formula).build.with?(dep) end end |
.cache(key, cache_timestamp: nil) ⇒ Hash{String, Symbol => T.untyped}
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
266 267 268 269 270 271 272 273 274 275 276 | # File 'dependency.rb', line 266 def cache(key, cache_timestamp: nil) @cache = T.let(@cache, T.nilable(T::Hash[Symbol, T.untyped])) @cache ||= { timestamped: {}, not_timestamped: {} } if @cache[:timestamped][] ||= {} @cache[:timestamped][][key] ||= {} else @cache[:not_timestamped][key] ||= {} end end |
.clear_cache ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
279 280 281 282 283 284 285 | # File 'dependency.rb', line 279 def clear_cache return unless @cache # No need to clear the timestamped cache as it's timestamped, and doing so causes problems in `expand`. # See https://github.com/Homebrew/brew/pull/20896#issuecomment-3419257460 @cache[:not_timestamped].clear end |
.delete_timestamped_cache_entry(key, cache_timestamp) ⇒ void
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Сторонним разработчикам следует по возможности избегать использования этого метода, так как он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
288 289 290 291 292 293 294 | # File 'dependency.rb', line 288 def (key, ) return unless @cache return unless ( = @cache[:timestamped][]) .delete(key) @cache[:timestamped].delete() if .empty? end |
.expand(dependent, deps = dependent.deps, cache_key: nil, cache_timestamp: nil, &block) ⇒ Array<Dependency>
Этот метод является частью внутреннего API. Этот метод можно использовать только внутри репозиториев, принадлежащих Homebrew, за исключением cask и formula. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Рекурсивно разворачивает зависимости каждого зависимого объекта; при необходимости передаёт пары [dependent, dep], чтобы вызывающий код мог применить к списку произвольные фильтры. Фильтр по умолчанию, применяемый, если блок не задан, исключает необязательные зависимости и рекомендации в соответствии с запросом зависимого объекта
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 | # File 'dependency.rb', line 184 def (dependent, deps = dependent.deps, cache_key: nil, cache_timestamp: nil, &block) # Keep track dependencies to avoid infinite cyclic dependency recursion. @expand_stack ||= T.let([], T.nilable(T::Array[T.any(String, Symbol)])) @expand_stack.push dependent.name begin if cache_key.present? cache_key = "#{cache_key}-#{}" if if (entry = cache(cache_key, cache_timestamp:)[cache_id dependent]) return entry.dup end end = [] deps.each do |dep| next if dependent.name == dep.name case action(dependent, dep, &block) when Dependable::PRUNE next when Dependable::SKIP next if @expand_stack.include? dep.name .concat((dep.to_formula, cache_key:, &block)) when Dependable::KEEP_BUT_PRUNE_RECURSIVE_DEPS << dep else next if @expand_stack.include? dep.name dep_formula = dep.to_formula .concat((dep_formula, cache_key:, &block)) # Fixes names for renamed/aliased formulae. dep = dep.dup_with_formula_name(dep_formula) << dep end end = merge_repeats() cache(cache_key, cache_timestamp:)[cache_id dependent] = .dup if cache_key.present? ensure @expand_stack.pop end end |
.merge_repeats(all) ⇒ Array<Dependency>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
250 251 252 253 254 255 256 257 258 259 260 261 262 263 | # File 'dependency.rb', line 250 def merge_repeats(all) grouped = all.group_by(&:name) all.map(&:name).uniq.filter_map do |name| deps = grouped.fetch(name) dep = deps.first next unless dep = (deps) kwargs = {} kwargs[:bounds] = T.cast(dep, UsesFromMacOSDependency).bounds if dep.uses_from_macos? dep.class.new(name, , **kwargs) end end |
Подробное описание методов экземпляра
#dup_with_formula_name(formula) ⇒ T.self_type
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
161 162 163 | # File 'dependency.rb', line 161 def dup_with_formula_name(formula) self.class.new(formula.full_name.to_s, ) end |
#installed?(minimum_version: nil, minimum_revision: nil, minimum_compatibility_version: nil, bottle_os_version: nil) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | # File 'dependency.rb', line 70 def installed?(minimum_version: nil, minimum_revision: nil, minimum_compatibility_version: nil, bottle_os_version: nil) formula = begin to_installed_formula rescue FormulaUnavailableError nil end return false unless formula # If the opt prefix doesn't exist: we likely have an incomplete installation. return false unless formula.opt_prefix.exist? return true if formula.latest_version_installed? return false if minimum_version.blank? installed_keg = formula.any_installed_keg return false unless installed_keg # If the keg name doesn't match, we may have moved from an alias to a full formula and need to upgrade. return false unless formula.possible_names.include?(installed_keg.name) installed_version = installed_keg.version # If both the formula and minimum dependency have a compatibility_version set, # and they match, the dependency is satisfied regardless of version/revision. if minimum_compatibility_version.present? && formula.compatibility_version.present? installed_tab = Tab.for_keg(installed_keg) installed_compatibility_version = installed_tab.source.dig("versions", "compatibility_version") # If installed version has same compatibility_version as required, it's compatible return true if installed_compatibility_version == minimum_compatibility_version && formula.compatibility_version == minimum_compatibility_version end # Tabs prior to 4.1.18 did not have revision or pkg_version fields. # As a result, we have to be more conversative when we do not have # a minimum revision from the tab and assume that if the formula has a # the same version and a non-zero revision that it needs upgraded. if minimum_revision.present? minimum_pkg_version = PkgVersion.new(minimum_version, minimum_revision) installed_version >= minimum_pkg_version elsif installed_version.version == minimum_version formula.revision.zero? else installed_version.version > minimum_version end end |
#missing_options ⇒ Options
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
134 135 136 137 138 139 140 | # File 'dependency.rb', line 134 def formula = to_installed_formula required = required &= formula..to_a required -= Tab.for_formula(formula). required end |
#option_names ⇒ Array<String>
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
143 144 145 | # File 'dependency.rb', line 143 def option_names [Utils.name_from_full_name(name)].freeze end |
#satisfied?(minimum_version: nil, minimum_revision: nil, minimum_compatibility_version: nil, bottle_os_version: nil) ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
127 128 129 130 131 | # File 'dependency.rb', line 127 def satisfied?(minimum_version: nil, minimum_revision: nil, minimum_compatibility_version: nil, bottle_os_version: nil) installed?(minimum_version:, minimum_revision:, minimum_compatibility_version:, bottle_os_version:) && .empty? end |
#to_formula ⇒ Formula
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
56 57 58 59 60 | # File 'dependency.rb', line 56 def to_formula formula = Formulary.factory(name, warn: false) formula.build = BuildOptions.new(, formula.) formula end |
#to_installed_formula ⇒ Formula
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
49 50 51 52 53 | # File 'dependency.rb', line 49 def to_installed_formula formula = Formulary.resolve(name) formula.build = BuildOptions.new(, formula.) formula end |
#uses_from_macos? ⇒ Boolean
Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. Третьим сторонам по возможности следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
148 149 150 | # File 'dependency.rb', line 148 def uses_from_macos? false end |
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Dependency.html