Decouple IncompatibleCxxStdlibs from its superclass

This exception is never used outside of the CxxStdlib class, so we don't
need the Homebrew::InstallationError superclass.
This commit is contained in:
Jack Nagel 2014-08-22 22:36:58 -05:00
parent 3d26b75847
commit 262a503b6f
2 changed files with 11 additions and 11 deletions

View File

@ -3,6 +3,15 @@ require "compilers"
class CxxStdlib
include CompilerConstants
class CompatibilityError < StandardError
def initialize(formula, dep, stdlib)
super <<-EOS.undent
#{formula.name} dependency #{dep.name} was built with a different C++ standard
library (#{stdlib.type_string} from #{stdlib.compiler}). This may cause problems at runtime.
EOS
end
end
def self.create(type, compiler)
if type && ![:libstdcxx, :libcxx].include?(type)
raise ArgumentError, "Invalid C++ stdlib type: #{type}"
@ -18,7 +27,7 @@ class CxxStdlib
begin
stdlib.check_dependencies(formula, deps)
rescue IncompatibleCxxStdlibs => e
rescue CompatibilityError => e
opoo e.message
end
end
@ -51,7 +60,7 @@ class CxxStdlib
dep_stdlib = Tab.for_formula(dep.to_formula).cxxstdlib
if !compatible_with? dep_stdlib
raise IncompatibleCxxStdlibs.new(formula, dep, dep_stdlib, self)
raise CompatibilityError.new(formula, dep, dep_stdlib)
end
end
end

View File

@ -112,15 +112,6 @@ class UnsatisfiedRequirements < Homebrew::InstallationError
end
end
class IncompatibleCxxStdlibs < Homebrew::InstallationError
def initialize(f, dep, wrong, right)
super f, <<-EOS.undent
#{f} dependency #{dep} was built with a different C++ standard
library (#{wrong.type_string} from #{wrong.compiler}). This could cause problems at runtime.
EOS
end
end
class FormulaConflictError < Homebrew::InstallationError
attr_reader :f, :conflicts