diff --git a/Library/Homebrew/cmd/deps.rb b/Library/Homebrew/cmd/deps.rb index 1f67439108..1c3b5ed722 100644 --- a/Library/Homebrew/cmd/deps.rb +++ b/Library/Homebrew/cmd/deps.rb @@ -110,16 +110,6 @@ module Homebrew puts all_deps end - 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 - def sorted_dependents(formulae_or_casks) dependents(formulae_or_casks).sort_by(&:name) end diff --git a/Library/Homebrew/cmd/uses.rb b/Library/Homebrew/cmd/uses.rb index db8a89c20d..7b2d47975c 100644 --- a/Library/Homebrew/cmd/uses.rb +++ b/Library/Homebrew/cmd/uses.rb @@ -6,6 +6,7 @@ require "formula" require "cli/parser" +require "cask/caskroom" module Homebrew extend DependenciesHelpers @@ -71,36 +72,16 @@ module Homebrew uses = if use_runtime_dependents && !used_formulae_missing used_formulae.map(&:runtime_installed_formula_dependents) .reduce(&:&) - .select(&:any_version_installed?) + .select(&:any_version_installed?) + + select_used_dependents(dependents(Cask::Caskroom.casks), used_formulae) else - formulae = args.installed? ? Formula.installed : Formula - recursive = args.recursive? - includes, ignores = argv_includes_ignores(ARGV) - - formulae.select do |f| - deps = if recursive - recursive_includes(Dependency, f, includes, ignores) - else - reject_ignores(f.deps, ignores, includes) - end - - used_formulae.all? do |ff| - deps.any? do |dep| - match = begin - dep.to_formula.full_name == ff.full_name if dep.name.include?("/") - rescue - nil - end - next match unless match.nil? - - dep.name == ff.name - end - rescue FormulaUnavailableError - # Silently ignore this case as we don't care about things used in - # taps that aren't currently tapped. - next - end + deps = if args.installed? + dependents(Formula.installed + Cask::Caskroom.casks) + else + dependents(Formula.to_a + Cask::Cask.to_a) end + + select_used_dependents(deps, used_formulae) end return if uses.empty? @@ -108,4 +89,34 @@ module Homebrew puts Formatter.columns(uses.map(&:full_name).sort) odie "Missing formulae should not have dependents!" if used_formulae_missing end + + def select_used_dependents(dependents, used_formulae) + recursive = args.recursive? + includes, ignores = argv_includes_ignores(ARGV) + + dependents.select do |d| + deps = if recursive + recursive_includes(Dependency, d, includes, ignores) + else + reject_ignores(d.deps, ignores, includes) + end + + used_formulae.all? do |ff| + deps.any? do |dep| + match = begin + dep.to_formula.full_name == ff.full_name if dep.name.include?("/") + rescue + nil + end + next match unless match.nil? + + dep.name == ff.name + end + rescue FormulaUnavailableError + # Silently ignore this case as we don't care about things used in + # taps that aren't currently tapped. + next + end + end + end end diff --git a/Library/Homebrew/dependencies.rb b/Library/Homebrew/dependencies.rb index ceac7f54e5..74ffac37fa 100644 --- a/Library/Homebrew/dependencies.rb +++ b/Library/Homebrew/dependencies.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require "delegate" +require "cask_dependent" class Dependencies < DelegateClass(Array) def initialize(*args) @@ -122,4 +123,14 @@ module DependenciesHelpers includes.none? { |include| dep.send(include) } end end + + 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 end