aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew
diff options
context:
space:
mode:
authorAdam Vandenberg2012-07-23 17:06:38 -0700
committerAdam Vandenberg2012-08-07 10:49:45 -0700
commitd42d796653601942dac027159a31161f5ca1c13e (patch)
treeec47fd7a048b2cf2b59282aa7ff9081eac4722d7 /Library/Homebrew
parentb118005384fe0f54de5543bfcf6e6153f2e38193 (diff)
downloadhomebrew-d42d796653601942dac027159a31161f5ca1c13e.tar.bz2
Allow multiple unsatisfied fatal requirements
Closes #13335.
Diffstat (limited to 'Library/Homebrew')
-rwxr-xr-xLibrary/Homebrew/build.rb2
-rw-r--r--Library/Homebrew/dependencies.rb6
-rw-r--r--Library/Homebrew/exceptions.rb15
-rw-r--r--Library/Homebrew/formula.rb4
-rw-r--r--Library/Homebrew/formula_installer.rb23
-rw-r--r--Library/Homebrew/test/test_external_deps.rb8
6 files changed, 36 insertions, 22 deletions
diff --git a/Library/Homebrew/build.rb b/Library/Homebrew/build.rb
index ef74a1942..5a7fee4fa 100755
--- a/Library/Homebrew/build.rb
+++ b/Library/Homebrew/build.rb
@@ -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
diff --git a/Library/Homebrew/dependencies.rb b/Library/Homebrew/dependencies.rb
index 5af3311d5..38308c087 100644
--- a/Library/Homebrew/dependencies.rb
+++ b/Library/Homebrew/dependencies.rb
@@ -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
diff --git a/Library/Homebrew/exceptions.rb b/Library/Homebrew/exceptions.rb
index 6ebc40e1c..9ed6646f1 100644
--- a/Library/Homebrew/exceptions.rb
+++ b/Library/Homebrew/exceptions.rb
@@ -65,12 +65,15 @@ class FormulaInstallationAlreadyAttemptedError < Homebrew::InstallationError
end
end
-class UnsatisfiedRequirement < Homebrew::InstallationError
- attr :dep
-
- def initialize formula, dep
- @dep = dep
- super formula, "An unsatisfied requirement failed this build."
+class UnsatisfiedRequirements < Homebrew::InstallationError
+ attr :reqs
+
+ 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
diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb
index 061fa5bd4..166e30cb2 100644
--- a/Library/Homebrew/formula.rb
+++ b/Library/Homebrew/formula.rb
@@ -422,8 +422,8 @@ class Formula
HOMEBREW_REPOSITORY+"Library/Formula/#{name.downcase}.rb"
end
- def deps; self.class.dependencies.deps; end
- def external_deps; self.class.dependencies.external_deps; end
+ def deps; self.class.dependencies.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
diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb
index cd32eff9f..a2768f7a1 100644
--- a/Library/Homebrew/formula_installer.rb
+++ b/Library/Homebrew/formula_installer.rb
@@ -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?
diff --git a/Library/Homebrew/test/test_external_deps.rb b/Library/Homebrew/test/test_external_deps.rb
index f36eac9b0..b4ca0f6e6 100644
--- a/Library/Homebrew/test/test_external_deps.rb
+++ b/Library/Homebrew/test/test_external_deps.rb
@@ -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