package opam-solver

  1. Overview
  2. Docs
type package = OpamTypes.package
include OpamParallel.GRAPH with type V.t = package OpamTypes.action
include Graph.Sig.I with type E.label = OpamParallel.dependency_label with type V.t = package OpamTypes.action
type t
module V : sig ... end
type vertex = V.t
module E : sig ... end
type edge = E.t
val is_directed : bool
val is_empty : t -> bool
val nb_vertex : t -> int
val nb_edges : t -> int
val out_degree : t -> vertex -> int
val in_degree : t -> vertex -> int
val mem_vertex : t -> vertex -> bool
val mem_edge : t -> vertex -> vertex -> bool
val mem_edge_e : t -> edge -> bool
val find_edge : t -> vertex -> vertex -> edge
val find_all_edges : t -> vertex -> vertex -> edge list
val succ : t -> vertex -> vertex list
val pred : t -> vertex -> vertex list
val succ_e : t -> vertex -> edge list
val pred_e : t -> vertex -> edge list
val iter_vertex : (vertex -> unit) -> t -> unit
val fold_vertex : (vertex -> 'a -> 'a) -> t -> 'a -> 'a
val iter_edges : (vertex -> vertex -> unit) -> t -> unit
val fold_edges : (vertex -> vertex -> 'a -> 'a) -> t -> 'a -> 'a
val iter_edges_e : (edge -> unit) -> t -> unit
val fold_edges_e : (edge -> 'a -> 'a) -> t -> 'a -> 'a
val map_vertex : (vertex -> vertex) -> t -> t
val iter_succ : (vertex -> unit) -> t -> vertex -> unit
val iter_pred : (vertex -> unit) -> t -> vertex -> unit
val fold_succ : (vertex -> 'a -> 'a) -> t -> vertex -> 'a -> 'a
val fold_pred : (vertex -> 'a -> 'a) -> t -> vertex -> 'a -> 'a
val iter_succ_e : (edge -> unit) -> t -> vertex -> unit
val fold_succ_e : (edge -> 'a -> 'a) -> t -> vertex -> 'a -> 'a
val iter_pred_e : (edge -> unit) -> t -> vertex -> unit
val fold_pred_e : (edge -> 'a -> 'a) -> t -> vertex -> 'a -> 'a
val create : ?size:int -> unit -> t
val clear : t -> unit
val copy : t -> t
val add_vertex : t -> vertex -> unit
val remove_vertex : t -> vertex -> unit
val add_edge : t -> vertex -> vertex -> unit
val add_edge_e : t -> edge -> unit
val remove_edge : t -> vertex -> vertex -> unit
val remove_edge_e : t -> edge -> unit
include Graph.Oper.S with type g = t
type g = t
val add_transitive_closure : ?reflexive:bool -> g -> g
val transitive_reduction : ?reflexive:bool -> g -> g
val replace_by_transitive_reduction : ?reflexive:bool -> g -> g
val mirror : g -> g
val complement : g -> g
val intersect : g -> g -> g
val union : g -> g -> g
module Topological : sig ... end
module Parallel : OpamParallel.SIG with type G.t = t and type G.V.t = vertex
module Dot : sig ... end
val transitive_closure : ?reflexive:bool -> t -> unit
val build : V.t list -> E.t list -> t
val compare : t -> t -> int
val to_json : t OpamJson.encoder
val of_json : t OpamJson.decoder
val reduce : t -> t

Reduces a graph of atomic or concrete actions (only removals, installs and builds) by turning removal+install to reinstalls or up/down-grades, best for display. Dependency ordering won't be as accurate though, as there is no proper ordering of (reinstall a, reinstall b) if b depends on a. The resulting graph contains at most one action per package name.

There is no guarantee however that the resulting graph is acyclic.

val explicit : ?noop_remove:(package -> bool) -> sources_needed:(package -> package list) -> t -> t

Expand install actions, adding a build action preceding them. The argument noop_remove is a function that should return `true` for package where the `remove` action is known not to modify the filesystem (such as `conf-*` package). The argument sources_needed p is a function that should return packages list that require fetching same shared source (singleton when no source is shared), and an empty list if no fetching is required for that package (packages that do not require it are typically up-to-date pins or "in-place" builds).

val fold_descendants : (V.t -> 'a -> 'a) -> 'a -> t -> V.t -> 'a

Folds on all recursive successors of the given action, including itself, depth-first.

OCaml

Innovation. Community. Security.