Module Cudf


module Cudf: sig .. end
CUDF library


CUDF documents


type package = {
   package : Cudf_types.pkgname;
   version : Cudf_types.version;
   depends : Cudf_types.vpkgformula;
   conflicts : Cudf_types.vpkglist;
   provides : Cudf_types.veqpkglist;
   installed : bool;
   was_installed : bool;
   keep : Cudf_types.enum_keep;
   pkg_extra : Cudf_types.typed_value Cudf_types.stanza;
}
Representation of a parsed package description item.

With this representation, optional properties have already been expanded to their default values (if they have one). It is not possible to know whether they were present or not in the CUDF syntax.

val (=%) : package -> package -> bool
package equality up to <name, version> i.e. 2 packages are equal iff they have the same name and version
val (<%) : package -> package -> int
Package comparison up to <name, version>. Same rules of package equality, but providing a suitable replacement for Pervasives.compare; useful for sorting.

type request = {
   request_id : string;
   install : Cudf_types.vpkglist;
   remove : Cudf_types.vpkglist;
   upgrade : Cudf_types.vpkglist;
   req_extra : Cudf_types.typed_value Cudf_types.stanza;
}
type preamble = {
   preamble_id : string; (*text following the "preamble: " postmark*)
   property : Cudf_types.typedecl; (*extra property declarations*)
   univ_checksum : string; (*universe checksum*)
   status_checksum : string; (*status checksum*)
   req_checksum : string; (*request checksum*)
}
val default_preamble : preamble
implement preamble defaults
val default_package : package
implement package defaults
val default_request : request
implement request defaults

Syntactic CUDF representation

type cudf_doc = preamble option * package list * request 
a CUDF document with its information items
type cudf_item = [ `Package of package
| `Preamble of preamble
| `Request of request ]
a single information item

Semantic CUDF representation

exception Constraint_violation of string
violation of a constraint imposed by CUDF specification
type universe 
package universe (including package status, i.e., installed packages)
type cudf = preamble * universe * request 
type solution = preamble * universe 
CUDF-based encoding of solutions, see CUDF 2.0, appendix B

A universe encoding a solution matters only for its installed packages, which are considered to be the resulting package status

val load_universe : package list -> universe
Raises Constraint_violation when a global CUDF constraint is violated in the given package list

CUDF manipulation

val lookup_package : universe -> Cudf_types.pkgname * Cudf_types.version -> package
Lookup a specific package via a <name, version> key
Raises Not_found if the requested package cannot be found
val mem_package : universe -> Cudf_types.pkgname * Cudf_types.version -> bool
Check existence of a specific package in the universe via a <name, version> key
val mem_installed : ?include_features:bool ->
?ignore:(package -> bool) -> universe -> Cudf_types.vpkg -> bool
check wheather a given package constraint is satisfied in a given package status (i.e., the universe subset of installed packages)
include_features : allow constraint to be satisfied by features (i.e., Provides). Default: true
ignore : make the lookup skip over all packages matching the given package predicate. Default: do not ignore any package
val who_provides : ?installed:bool ->
universe ->
Cudf_types.vpkg -> (package * Cudf_types.version option) list
Ask who provides a given feature (predicate).
Returns a list of packages providing the requested feature. Each package is paired with an optional version; if it is None, the given package provides all possible version of the feature; it if is Some v, the given package only provides version v of the feature.
installed : : consider only installed packages (default)
val lookup_packages : ?filter:Cudf_types.constr ->
universe -> Cudf_types.pkgname -> package list
lookup all available versions of a given package name
filter : filter the found packages according to the given version constraint. Default: None (i.e., no filtering)
val get_installed : universe -> Cudf_types.pkgname -> package list
lookup all installed versions of a given package name. Shorthand for lookup_packages composed with filtering on installed=true
val uid_by_package : universe -> package -> int
return a unique integer identifier for the given package in the universe
Raises Not_found if the given package cannot be found in the universe
val package_by_uid : universe -> int -> package
return the package corresponding to the given unique identifier
Raises Not_found if no package in the universe corresponds to the given unique identifier
val iter_packages : (package -> unit) -> universe -> unit
iter over all packages in the universe
val fold_packages : ('a -> package -> 'a) -> 'a -> universe -> 'a
fold over all packages in the universe
val iteri_packages : (int -> package -> unit) -> universe -> unit
iter on all packages in the universe, passing to the iteration function both the package and its unique identifier
val get_packages : ?filter:(package -> bool) -> universe -> package list
conversion from universe to plain package list
filter : only return packages matching a given predicate. Default is to return all packages
val universe_size : universe -> int
total numer of available packages (no matter whether they are installed or not)
val installed_size : universe -> int
total number of installed packages occurring in the universe
val status : universe -> universe
Projection on packages having "installed: true".

Inefficient (involves Hashtbl.t cloning), use with care.


Low-level stanza manipulation

val lookup_package_property : package -> string -> string
low-level property lookup: given a package, lookup on it a property by name, returning its (pretty-printed, see Cudf_types) value as a string
Raises Not_found if the given property name is not associated to the given package (note that "being associated with" does not necessarily mean that the property appears in the stanza, due to default values)
val lookup_request_property : request -> string -> string
Same as Cudf.lookup_package_property, but acting on request information items.

To lookup the request identifier as a string (which strictly speaking is not a property) you should lookup "request"

val lookup_preamble_property : preamble -> string -> string
Same as Cudf.lookup_package_property, but acting on preamble information items.

To lookup the preamble identifier as a string (which strictly speaking is not a property) you should lookup "preamble"

val version_matches : Cudf_types.version -> Cudf_types.constr -> bool
Check whether a version matches a version constraint, e.g. version_matches 1 (Some(`Eq, 2)) = false
val (|=) : Cudf_types.version -> Cudf_types.constr -> bool
Same as Cudf.version_matches