uses: Print cask uses

This commit is contained in:
William Ma 2020-07-30 12:59:01 -04:00
parent 8d97029b03
commit 7be2b943cb
3 changed files with 50 additions and 38 deletions

View File

@ -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

View File

@ -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

View File

@ -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