Module: DependenciesHelpers Private

Includes:
Kernel
Included in:
Homebrew::Cmd::Deps, Homebrew::Cmd::Uses
Defined in:
dependencies_helpers.rb,
dependencies_helpers.rbi

This module is part of a private API. This module may only be used in the Homebrew/brew repository. Third parties should avoid using this module if possible, as it may be removed or changed without warning.

Constant Summary

Constants included from Kernel

Kernel::IGNORE_INTERRUPTS_MUTEX

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Kernel

#disk_usage_readable, #ensure_executable!, #ensure_formula_installed!, #exec_browser, #exec_editor, #ignore_interrupts, #interactive_shell, #number_readable, #odebug, #odeprecated, #odie, #odisabled, #ofail, #oh1, #oh1_title, #ohai, #ohai_title, #onoe, #opoo, #paths, #pretty_duration, #pretty_installed, #pretty_outdated, #pretty_uninstalled, #quiet_system, #redact_secrets, #redirect_stdout, #require?, #safe_system, #tap_and_name_comparison, #truncate_text_to_approximate_size, #which, #which_all, #which_editor, #with_custom_locale, #with_env, #with_homebrew_path

Class Method Details

.dependents(formulae_or_casks) ⇒ Object

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



49
50
51
52
53
54
55
56
57
# File 'dependencies_helpers.rb', line 49

def dependents(formulae_or_casks)
  formulae_or_casks.map do |formula_or_cask|
    if formula_or_cask.is_a?(Formula)
      formula_or_cask
    else
      CaskDependent.new(formula_or_cask)
    end
  end
end

Instance Method Details

#args_includes_ignores(args) ⇒ Object

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



8
9
10
11
12
13
14
15
16
17
18
19
# File 'dependencies_helpers.rb', line 8

def args_includes_ignores(args)
  includes = [:required?, :recommended?] # included by default
  includes << :build? if args.include_build?
  includes << :test? if args.include_test?
  includes << :optional? if args.include_optional?

  ignores = []
  ignores << :recommended? if args.skip_recommended?
  ignores << :satisfied? if args.missing?

  [includes, ignores]
end

#recursive_includes(klass, root_dependent, includes, ignores) ⇒ Object

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Raises:

  • (ArgumentError)


21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'dependencies_helpers.rb', line 21

def recursive_includes(klass, root_dependent, includes, ignores)
  raise ArgumentError, "Invalid class argument: #{klass}" if klass != Dependency && klass != Requirement

  cache_key = "recursive_includes_#{includes}_#{ignores}"

  klass.expand(root_dependent, cache_key:) do |dependent, dep|
    klass.prune if ignores.any? { |ignore| dep.public_send(ignore) }
    klass.prune if includes.none? do |include|
      # Ignore indirect test dependencies
      next if include == :test? && dependent != root_dependent

      dep.public_send(include)
    end

    # If a tap isn't installed, we can't find the dependencies of one of
    # its formulae and an exception will be thrown if we try.
    Dependency.keep_but_prune_recursive_deps if klass == Dependency && dep.tap && !dep.tap.installed?
  end
end

#select_includes(dependables, ignores, includes) ⇒ Object

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



41
42
43
44
45
46
47
# File 'dependencies_helpers.rb', line 41

def select_includes(dependables, ignores, includes)
  dependables.select do |dep|
    next false if ignores.any? { |ignore| dep.public_send(ignore) }

    includes.any? { |include| dep.public_send(include) }
  end
end