Allow multiple unsatisfied fatal requirements
Closes Homebrew/homebrew#13335.
This commit is contained in:
parent
bcde6432f3
commit
8c8701f268
@ -56,7 +56,7 @@ at_exit do
|
||||
end
|
||||
|
||||
def install f
|
||||
f.external_deps.each { |dep| dep.modify_build_environment }
|
||||
f.requirements.each { |dep| dep.modify_build_environment }
|
||||
|
||||
f.recursive_deps.uniq.each do |dep|
|
||||
dep = Formula.factory dep
|
||||
|
@ -19,11 +19,11 @@ class DependencyCollector
|
||||
:chicken, :jruby, :lua, :node, :perl, :python, :rbx, :ruby
|
||||
].freeze
|
||||
|
||||
attr_reader :deps, :external_deps
|
||||
attr_reader :deps, :requirements
|
||||
|
||||
def initialize
|
||||
@deps = Dependencies.new
|
||||
@external_deps = Set.new
|
||||
@requirements = Set.new
|
||||
end
|
||||
|
||||
def add spec
|
||||
@ -35,7 +35,7 @@ class DependencyCollector
|
||||
# dependency needed for the current platform.
|
||||
return if dep.nil?
|
||||
# Add dep to the correct bucket
|
||||
(dep.is_a?(Requirement) ? @external_deps : @deps) << dep
|
||||
(dep.is_a?(Requirement) ? @requirements : @deps) << dep
|
||||
end
|
||||
|
||||
private
|
||||
|
@ -65,12 +65,15 @@ class FormulaInstallationAlreadyAttemptedError < Homebrew::InstallationError
|
||||
end
|
||||
end
|
||||
|
||||
class UnsatisfiedRequirement < Homebrew::InstallationError
|
||||
attr :dep
|
||||
class UnsatisfiedRequirements < Homebrew::InstallationError
|
||||
attr :reqs
|
||||
|
||||
def initialize formula, dep
|
||||
@dep = dep
|
||||
super formula, "An unsatisfied requirement failed this build."
|
||||
def initialize formula, reqs
|
||||
@reqs = reqs
|
||||
message = (reqs.length == 1) \
|
||||
? "An unsatisfied requirement failed this build." \
|
||||
: "Unsatisifed requirements failed this build."
|
||||
super formula, message
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -423,7 +423,7 @@ class Formula
|
||||
end
|
||||
|
||||
def deps; self.class.dependencies.deps; end
|
||||
def external_deps; self.class.dependencies.external_deps; end
|
||||
def requirements; self.class.dependencies.requirements; end
|
||||
|
||||
# deps are in an installable order
|
||||
# which means if a depends on b then b will be ordered before a in this list
|
||||
|
@ -43,7 +43,8 @@ class FormulaInstaller
|
||||
|
||||
f.recursive_deps.each do |dep|
|
||||
if dep.installed? and not dep.keg_only? and not dep.linked_keg.directory?
|
||||
raise CannotInstallFormulaError, "You must `brew link #{dep}' before #{f} can be installed"
|
||||
raise CannotInstallFormulaError,
|
||||
"You must `brew link #{dep}' before #{f} can be installed"
|
||||
end
|
||||
end unless ignore_deps
|
||||
|
||||
@ -66,15 +67,25 @@ class FormulaInstaller
|
||||
EOS
|
||||
end
|
||||
|
||||
f.external_deps.each do |dep|
|
||||
unless dep.satisfied?
|
||||
puts dep.message
|
||||
if dep.fatal? and not ignore_deps
|
||||
raise UnsatisfiedRequirement.new(f, dep)
|
||||
# Build up a list of unsatisifed fatal requirements
|
||||
first_message = true
|
||||
unsatisfied_fatals = []
|
||||
f.requirements.each do |req|
|
||||
unless req.satisfied?
|
||||
# Newline between multiple messages
|
||||
puts unless first_message
|
||||
puts req.message
|
||||
first_message = false
|
||||
if req.fatal? and not ignore_deps
|
||||
unsatisfied_fatals << req
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
unless unsatisfied_fatals.empty?
|
||||
raise UnsatisfiedRequirements.new(f, unsatisfied_fatals)
|
||||
end
|
||||
|
||||
unless ignore_deps
|
||||
needed_deps = f.recursive_deps.reject{ |d| d.installed? }
|
||||
unless needed_deps.empty?
|
||||
|
@ -12,9 +12,9 @@ class ExternalDepsTests < Test::Unit::TestCase
|
||||
end
|
||||
|
||||
# Should have found a dep
|
||||
assert d.external_deps.size == 1
|
||||
assert d.requirements.size == 1
|
||||
|
||||
d.external_deps do |dep|
|
||||
d.requirements do |req|
|
||||
assert !d.satisfied?
|
||||
end
|
||||
end
|
||||
@ -26,9 +26,9 @@ class ExternalDepsTests < Test::Unit::TestCase
|
||||
end
|
||||
|
||||
# Should have found a dep
|
||||
assert d.external_deps.size == 1
|
||||
assert d.requirements.size == 1
|
||||
|
||||
d.external_deps do |dep|
|
||||
d.requirements do |req|
|
||||
assert d.satisfied?
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user