error causation in separate file loaded for debug only
This commit is contained in:
parent
20e9fe3785
commit
7c41bba6f8
@ -806,6 +806,8 @@ def visit(node):
|
|||||||
self.control.load(os.path.join(parent_dir, "concretize.lp"))
|
self.control.load(os.path.join(parent_dir, "concretize.lp"))
|
||||||
self.control.load(os.path.join(parent_dir, "os_compatibility.lp"))
|
self.control.load(os.path.join(parent_dir, "os_compatibility.lp"))
|
||||||
self.control.load(os.path.join(parent_dir, "display.lp"))
|
self.control.load(os.path.join(parent_dir, "display.lp"))
|
||||||
|
if spack.error.debug:
|
||||||
|
self.control.load(os.path.join(parent_dir, "causation.lp"))
|
||||||
timer.stop("load")
|
timer.stop("load")
|
||||||
|
|
||||||
# Grounding is the first step in the solve -- it turns our facts
|
# Grounding is the first step in the solve -- it turns our facts
|
||||||
|
@ -48,6 +48,13 @@ error(100, multiple_values_error, Attribute, Package)
|
|||||||
attr_single_value(Attribute),
|
attr_single_value(Attribute),
|
||||||
2 { attr(Attribute, Package, Version) }.
|
2 { attr(Attribute, Package, Version) }.
|
||||||
|
|
||||||
|
%-----------------------------------------------------------------------------
|
||||||
|
% Define functions for error handling
|
||||||
|
%-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#defined error/9.
|
||||||
|
#defined condition_cause/2.
|
||||||
|
|
||||||
%-----------------------------------------------------------------------------
|
%-----------------------------------------------------------------------------
|
||||||
% Version semantics
|
% Version semantics
|
||||||
%-----------------------------------------------------------------------------
|
%-----------------------------------------------------------------------------
|
||||||
@ -86,17 +93,6 @@ version_satisfies(Package, Constraint, HashVersion) :- version_satisfies(Package
|
|||||||
{ attr("version", Package, Version) : version_declared(Package, Version) }
|
{ attr("version", Package, Version) : version_declared(Package, Version) }
|
||||||
:- attr("node", Package).
|
:- attr("node", Package).
|
||||||
|
|
||||||
% error we expect users to see
|
|
||||||
error(0, "Version '{0}' of {1} does not satisfy '@{2}'", Version, Package, Constraint, startcauses, VersionCause, ConstraintCause)
|
|
||||||
:- attr("node", Package),
|
|
||||||
attr("version", Package, Version),
|
|
||||||
imposed_constraint(VersionCause, "node_version_satisfies", Package, Version),
|
|
||||||
condition_holds(VersionCause),
|
|
||||||
attr("node_version_satisfies", Package, Constraint),
|
|
||||||
imposed_constraint(ConstraintCause, "node_version_satisfies", Package, Constraint),
|
|
||||||
condition_holds(ConstraintCause),
|
|
||||||
not version_satisfies(Package, Constraint, Version).
|
|
||||||
|
|
||||||
% Error to ensure structure of the program is not violated
|
% Error to ensure structure of the program is not violated
|
||||||
error(2, "No version from '{0}' satisfies '@{1}' and '@{2}'", Package, Version1, Version2)
|
error(2, "No version from '{0}' satisfies '@{1}' and '@{2}'", Package, Version1, Version2)
|
||||||
:- attr("node", Package),
|
:- attr("node", Package),
|
||||||
@ -108,17 +104,6 @@ error(2, "No versions available for package '{0}'", Package)
|
|||||||
:- attr("node", Package), not attr("version", Package, _).
|
:- attr("node", Package), not attr("version", Package, _).
|
||||||
|
|
||||||
% A virtual package may or may not have a version, but never has more than one
|
% A virtual package may or may not have a version, but never has more than one
|
||||||
% Error to catch how it happens
|
|
||||||
error(0, "Version '{0}' of {1} does not satisfy '@{2}'", Version, Virtual, Constraint, startcauses, VersionCause, ConstraintCause)
|
|
||||||
:- attr("virtual_node", Virtual),
|
|
||||||
attr("version", Virtual, Version),
|
|
||||||
imposed_constraint(VersionCause, "node_version_satisfies", Virtual, Version),
|
|
||||||
condition_holds(VersionCause),
|
|
||||||
attr("node_version_satisfies", Virtual, Constraint),
|
|
||||||
imposed_constraint(ConstraintCause, "node_version_satisfies", Virtual, Constraint),
|
|
||||||
condition_holds(ConstraintCause),
|
|
||||||
not version_satisfies(Virtual, Constraint, Version).
|
|
||||||
|
|
||||||
% fallback error for structure in case there's another way for it to happen
|
% fallback error for structure in case there's another way for it to happen
|
||||||
error(100, "Cannot select a single version for virtual '{0}'", Virtual)
|
error(100, "Cannot select a single version for virtual '{0}'", Virtual)
|
||||||
:- attr("virtual_node", Virtual),
|
:- attr("virtual_node", Virtual),
|
||||||
@ -173,15 +158,6 @@ possible_version_weight(Package, Weight)
|
|||||||
:- attr("node_version_satisfies", Package, Constraint),
|
:- attr("node_version_satisfies", Package, Constraint),
|
||||||
version_satisfies(Package, Constraint, _).
|
version_satisfies(Package, Constraint, _).
|
||||||
|
|
||||||
% More specific error message if the version cannot satisfy some constraint
|
|
||||||
% Otherwise covered by `no_version_error` and `versions_conflict_error`.
|
|
||||||
error(0, "No valid version for '{0}' satisfies '@{1}'", Package, Constraint, startcauses, ConstraintCause)
|
|
||||||
:- attr("node_version_satisfies", Package, Constraint),
|
|
||||||
imposed_constraint(ConstraintCause, "node_version_satisfies", Package, Constraint),
|
|
||||||
condition_holds(ConstraintCause),
|
|
||||||
C = #count{ Version : attr("version", Package, Version), version_satisfies(Package, Constraint, Version)},
|
|
||||||
C < 1.
|
|
||||||
|
|
||||||
% Error for structure of program
|
% Error for structure of program
|
||||||
error(10, "Cannot satisfy '{0}@{1}'", Package, Constraint)
|
error(10, "Cannot satisfy '{0}@{1}'", Package, Constraint)
|
||||||
:- attr("node_version_satisfies", Package, Constraint),
|
:- attr("node_version_satisfies", Package, Constraint),
|
||||||
@ -234,28 +210,6 @@ attr(Name, A1, A2, A3, A4) :- impose(ID), imposed_constraint(ID, Name, A1, A2, A
|
|||||||
not imposed_constraint(Hash, "node_flag", Package, FlagType, Flag),
|
not imposed_constraint(Hash, "node_flag", Package, FlagType, Flag),
|
||||||
internal_error("imposed hash without imposing all flag values").
|
internal_error("imposed hash without imposing all flag values").
|
||||||
|
|
||||||
% associated conditions by cause -> effect
|
|
||||||
condition_cause(Effect, Cause) :-
|
|
||||||
condition_holds(Effect), condition_holds(Cause),
|
|
||||||
attr(Name, A1),
|
|
||||||
condition_requirement(Effect, Name, A1),
|
|
||||||
imposed_constraint(Cause, Name, A1).
|
|
||||||
condition_cause(Effect, Cause) :-
|
|
||||||
condition_holds(Effect), condition_holds(Cause),
|
|
||||||
attr(Name, A1, A2),
|
|
||||||
condition_requirement(Effect, Name, A1, A2),
|
|
||||||
imposed_constraint(Cause, Name, A1, A2).
|
|
||||||
condition_cause(Effect, Cause) :-
|
|
||||||
condition_holds(Effect), condition_holds(Cause),
|
|
||||||
attr(Name, A1, A2, A3),
|
|
||||||
condition_requirement(Effect, Name, A1, A2, A3),
|
|
||||||
imposed_constraint(Cause, Name, A1, A2, A3).
|
|
||||||
condition_cause(Effect, Cause) :-
|
|
||||||
condition_holds(Effect), condition_holds(Cause),
|
|
||||||
attr(Name, A1, A2, A3, A4),
|
|
||||||
condition_requirement(Effect, Name, A1, A2, A3, A4),
|
|
||||||
imposed_constraint(Cause, Name, A1, A2, A3, A4).
|
|
||||||
|
|
||||||
#defined condition/2.
|
#defined condition/2.
|
||||||
#defined condition_requirement/3.
|
#defined condition_requirement/3.
|
||||||
#defined condition_requirement/4.
|
#defined condition_requirement/4.
|
||||||
@ -613,19 +567,6 @@ attr("variant_value", Package, Variant, Value) :-
|
|||||||
variant(Package, Variant),
|
variant(Package, Variant),
|
||||||
build(Package).
|
build(Package).
|
||||||
|
|
||||||
error(0, "'{0}' required multiple values for single-valued variant '{1}'\n Requested 'Spec({1}={2})' and 'Spec({1}={3})'", Package, Variant, Value1, Value2, startcauses, Cause1, Cause2)
|
|
||||||
:- attr("node", Package),
|
|
||||||
variant(Package, Variant),
|
|
||||||
variant_single_value(Package, Variant),
|
|
||||||
build(Package),
|
|
||||||
attr("variant_value", Package, Variant, Value1),
|
|
||||||
imposed_constraint(Cause1, "variant_set", Package, Variant, Value1),
|
|
||||||
condition_holds(Cause1),
|
|
||||||
attr("variant_value", Package, Variant, Value2),
|
|
||||||
imposed_constraint(Cause2, "variant_set", Package, Variant, Value2),
|
|
||||||
condition_holds(Cause2),
|
|
||||||
Value1 < Value2. % see[1]
|
|
||||||
|
|
||||||
error(100, "'{0}' required multiple values for single-valued variant '{1}'", Package, Variant)
|
error(100, "'{0}' required multiple values for single-valued variant '{1}'", Package, Variant)
|
||||||
:- attr("node", Package),
|
:- attr("node", Package),
|
||||||
variant(Package, Variant),
|
variant(Package, Variant),
|
||||||
|
Loading…
Reference in New Issue
Block a user