mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00

`brew uses foo bar` is supposed to return the intersection of formulae that use foo and bar. However, this was broken by changes made to support requirements that can coerce to regular dependencies.
30 lines
903 B
Ruby
30 lines
903 B
Ruby
require 'formula'
|
|
|
|
# `brew uses foo bar` returns formulae that use both foo and bar
|
|
# If you want the union, run the command twice and concatenate the results.
|
|
# The intersection is harder to achieve with shell tools.
|
|
|
|
module Homebrew extend self
|
|
def uses
|
|
raise FormulaUnspecifiedError if ARGV.named.empty?
|
|
|
|
used_formulae = ARGV.formulae
|
|
formulae = (ARGV.include? "--installed") ? Formula.installed : Formula
|
|
recursive = ARGV.flag? "--recursive"
|
|
|
|
uses = formulae.select do |f|
|
|
used_formulae.all? do |ff|
|
|
if recursive
|
|
f.recursive_dependencies.any? { |dep| dep.name == ff.name } ||
|
|
f.recursive_requirements.any? { |req| req.name == ff.name }
|
|
else
|
|
f.deps.any? { |dep| dep.name == ff.name } ||
|
|
f.requirements.any? { |req| req.name == ff.name }
|
|
end
|
|
end
|
|
end
|
|
|
|
puts_columns uses.map(&:name)
|
|
end
|
|
end
|