package 0install-solver
Module Diagnostics.ComponentSource
Information about a single role in the example (failed) selections produced by the solver.
type rejection_reason = [ | `Model_rejection of Result.Input.rejection(*Rejected before getting to solver.
*)| `FailsRestriction of Result.Input.restriction(*e.g. version too old for another component.
*)| `DepFailsRestriction of Result.Input.dependency * Result.Input.restriction(*Couldn't satisfy its dependencies.
*)| `MachineGroupConflict of Result.Role.t * Result.Input.impl(*A selected impl has a different machine type.
*)| `ClassConflict of Result.Role.t * Result.Input.conflict_class(*A selected impl has the same conflict class.
*)| `ConflictsRole of Result.Role.t(*A selected role conflicts with this (e.g. replaced-by).
*)| `MissingCommand of Result.Input.command_name(*Doesn't have a command we need.
*)| `DiagnosticsFailure of string(*Unknown failure reason (gives raw error from SAT solver).
*)
]Why a particular implementation was rejected. This could be because the input rejected it before it got to the solver, or because it conflicts with something else in the example (partial) solution.
selected_impl t is the implementation selected to fill t's role, or None if no implementation was suitable.
rejects t returns the rejected candidates (call this if selected_impl t = None). `No_candidates means that there were no implementations given at all (e.g. bad role name). `All_unusable means every candidate was rejected before reaching the solver (e.g. they were all binaries for some other platform). `Conflicts is the normal case, where some made it to the solver, but were rejected because they conflicted with other selections.
pp ~verbose formats a message showing the status of this component, including all of its notes and, if there was no selected impl, the rejects.