diff options
| author | Adam Vandenberg | 2012-07-23 17:06:38 -0700 | 
|---|---|---|
| committer | Adam Vandenberg | 2012-08-07 10:49:45 -0700 | 
| commit | d42d796653601942dac027159a31161f5ca1c13e (patch) | |
| tree | ec47fd7a048b2cf2b59282aa7ff9081eac4722d7 /Library/Homebrew | |
| parent | b118005384fe0f54de5543bfcf6e6153f2e38193 (diff) | |
| download | homebrew-d42d796653601942dac027159a31161f5ca1c13e.tar.bz2 | |
Allow multiple unsatisfied fatal requirements
Closes #13335.
Diffstat (limited to 'Library/Homebrew')
| -rwxr-xr-x | Library/Homebrew/build.rb | 2 | ||||
| -rw-r--r-- | Library/Homebrew/dependencies.rb | 6 | ||||
| -rw-r--r-- | Library/Homebrew/exceptions.rb | 15 | ||||
| -rw-r--r-- | Library/Homebrew/formula.rb | 4 | ||||
| -rw-r--r-- | Library/Homebrew/formula_installer.rb | 23 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_external_deps.rb | 8 | 
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  | 
