Expand requirements of default deps added by other requirements

Dependencies built from requirements with a default formula may
themselves have requirements, and these requirements may have default
formulae, which may have more requirements, etc., so we have to keep
expanding until this isn't the case.

Fixes Homebrew/homebrew#25025.
Fixes Homebrew/homebrew#25037.
This commit is contained in:
Jack Nagel 2013-12-09 14:36:10 -06:00
parent 08055e1776
commit f579d90458

View File

@ -17,7 +17,6 @@ class FormulaInstaller
attr_reader :f
attr_accessor :tab, :options, :ignore_deps
attr_accessor :show_summary_heading, :show_header
attr_reader :requirement_deps
def initialize ff
@f = ff
@ -25,7 +24,6 @@ class FormulaInstaller
@ignore_deps = ARGV.ignore_deps? || ARGV.interactive?
@options = Options.new
@tab = Tab.dummy_tab(ff)
@requirement_deps = []
@@attempted ||= Set.new
@ -168,17 +166,37 @@ class FormulaInstaller
def compute_and_install_dependencies
perform_readline_hack
check_requirements
deps = [].concat(f.deps).concat(requirement_deps)
req_map, req_deps = expand_requirements
check_requirements(req_map)
deps = [].concat(req_deps).concat(f.deps)
install_dependencies expand_dependencies(deps)
ensure
requirement_deps.clear
end
def check_requirements
unsatisfied = ARGV.filter_for_dependencies do
def check_requirements(req_map)
fatals = []
req_map.each_pair do |dependent, reqs|
reqs.each do |req|
puts "#{dependent}: #{req.message}"
fatals << req if req.fatal?
end
end
raise UnsatisfiedRequirements.new(f, fatals) unless fatals.empty?
end
def expand_requirements
unsatisfied_reqs = Hash.new { |h, k| h[k] = [] }
deps = []
formulae = [f]
while f = formulae.pop
ARGV.filter_for_dependencies do
f.recursive_requirements do |dependent, req|
if (req.optional? || req.recommended?) && dependent.build.without?(req)
Requirement.prune
@ -187,16 +205,18 @@ class FormulaInstaller
elsif req.satisfied?
Requirement.prune
elsif req.default_formula?
requirement_deps << req.to_dependency
dep = req.to_dependency
deps.unshift(dep)
formulae.unshift(dep.to_formula)
Requirement.prune
else
puts "#{dependent}: #{req.message}"
unsatisfied_reqs[dependent] << req
end
end
end
end
fatals = unsatisfied.select(&:fatal?)
raise UnsatisfiedRequirements.new(f, fatals) unless fatals.empty?
return unsatisfied_reqs, deps
end
def expand_dependencies(deps)