lib/solve/errors.rb in solve-0.8.2 vs lib/solve/errors.rb in solve-1.0.0.rc1

- old
+ new

@@ -2,36 +2,62 @@ module Errors class SolveError < StandardError alias_method :mesage, :to_s end - class InvalidVersionFormat < SolveError - attr_reader :version + class NoSolutionError < SolveError - # @param [#to_s] version - def initialize(version) - @version = version - end + # Artifacts that don't exist at any version but are required for a valid + # solution + # @return [Array<String>] Missing artifact names + attr_reader :missing_artifacts - def to_s - "'#{version}' did not contain a valid version string: 'x.y.z' or 'x.y'." - end - end + # Constraints that eliminate all versions of an artifact, e.g. you ask + # for mysql >= 2.0.0 but only 1.0.0 exists. + # @return [Array<String>] Invalid constraints as strings + attr_reader :constraints_excluding_all_artifacts - class InvalidConstraintFormat < SolveError - attr_reader :constraint + # A demand that has conflicting dependencies + # @return [String] the unsatisfiable demand + attr_reader :unsatisfiable_demand - # @param [#to_s] constraint - def initialize(constraint) - @constraint = constraint + # The artifact for which there are conflicting dependencies + # @return [Array<String>] The "most constrained" artifacts + attr_reader :artifacts_with_no_satisfactory_version + + # @param [#to_s] message + # @option causes [Array<String>] :missing_artifacts ([]) + # @option causes [Array<String>] :constraints_excluding_all_artifacts ([]) + # @option causes [#to_s] :unsatisfiable_demand (nil) + # @option causes [Array<String>] :artifacts_with_no_satisfactory_version ([]) + def initialize(message = nil, causes = {}) + super(message) + @message = message + @missing_artifacts = causes[:missing_artifacts] || [] + @constraints_excluding_all_artifacts = causes[:constraints_excluding_all_artifacts] || [] + @unsatisfiable_demand = causes[:unsatisfiable_demand] || nil + @artifacts_with_no_satisfactory_version = causes[:artifacts_with_no_satisfactory_version] || [] end def to_s - "'#{constraint}' did not contain a valid operator or a valid version string." + s = "" + s << "#{@message}\n" + s << "Missing artifacts: #{missing_artifacts.join(',')}\n" unless missing_artifacts.empty? + unless constraints_excluding_all_artifacts.empty? + s << "Constraints that match no available version: #{constraints_excluding_all_artifacts.join(',')}\n" + end + s << "Demand that cannot be met: #{unsatisfiable_demand}\n" if unsatisfiable_demand + unless artifacts_with_no_satisfactory_version.empty? + s << "Artifacts for which there are conflicting dependencies: #{artifacts_with_no_satisfactory_version.join(',')}" + end + s end + end - class NoSolutionError < SolveError; end + # Indicates that the solver could not find the conflicting constraints when + # solving the given demands and graph. + class NoSolutionCauseUnknown < NoSolutionError; end class UnsortableSolutionError < SolveError attr_reader :internal_exception attr_reader :unsorted_solution