diff --git a/Library/Homebrew/diagnostic.rb b/Library/Homebrew/diagnostic.rb index a5b1302bdee01..b434c394bddad 100644 --- a/Library/Homebrew/diagnostic.rb +++ b/Library/Homebrew/diagnostic.rb @@ -8,27 +8,13 @@ module Homebrew module Diagnostic def self.missing_deps(ff, hide = nil) - hide ||= [] - missing = {} ff.each do |f| - missing_deps = f.recursive_dependencies do |dependent, dep| - if dep.optional? || dep.recommended? - tab = Tab.for_formula(dependent) - Dependency.prune unless tab.with?(dep) - elsif dep.build? - Dependency.prune - end - end - - missing_deps.map!(&:to_formula) - missing_deps.reject! do |d| - !hide.include?(d.name) && d.installed_prefixes.any? - end + missing_dependencies = f.missing_dependencies(hide: hide) - unless missing_deps.empty? - yield f.full_name, missing_deps if block_given? - missing[f.full_name] = missing_deps + unless missing_dependencies.empty? + yield f.full_name, missing_dependencies if block_given? + missing[f.full_name] = missing_dependencies end end missing diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index c2467b7bce3e2..947313047473f 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -1466,6 +1466,26 @@ def runtime_dependencies recursive_dependencies.reject(&:build?) end + # Returns a list of formulae depended on by this formula that aren't + # installed + def missing_dependencies(hide: nil) + hide ||= [] + missing_dependencies = recursive_dependencies do |dependent, dep| + if dep.optional? || dep.recommended? + tab = Tab.for_formula(dependent) + Dependency.prune unless tab.with?(dep) + elsif dep.build? + Dependency.prune + end + end + + missing_dependencies.map!(&:to_formula) + missing_dependencies.select! do |d| + hide.include?(d.name) || d.installed_prefixes.empty? + end + missing_dependencies + end + # @private def to_hash hsh = {