package opam-state

  1. Overview
  2. Docs

Module OpamSwitchStateSource

Loading and querying a switch state

Loads the switch state and calls the given function on it, releasing the lock afterwards.

The repository state is automatically loaded if not provided.

The switch is selected, if not set, using OpamStateConfig.get_switch -- which can fail if no switch is configured.

Additionally, in case of a write lock, a backup is saved and a message is printed on restoring if f raised an exception and there were changes.

Sourceval load_virtual : ?repos_list:OpamTypes.repository_name list -> 'a OpamStateTypes.global_state -> 'b OpamStateTypes.repos_state -> OpamStateTypes.unlocked OpamStateTypes.switch_state

Creates a virtual state with all package available and nothing installed. Useful for querying and simulating actions when no switch is yet configured, or querying packages directly from the repos

Sourceval load_selections : ?lock_kind:'a OpamStateTypes.lock -> 'b OpamStateTypes.global_state -> OpamTypes.switch -> OpamTypes.switch_selections

Load the switch's state file, without constructing the package maps: much faster than loading the full switch state

Sourceval compute_available_packages : 'a OpamStateTypes.global_state -> OpamTypes.switch -> OpamFile.Switch_config.t -> pinned:OpamTypes.package_set -> opams:OpamFile.OPAM.t OpamTypes.package_map -> OpamTypes.package_set

Raw function to compute the availability of all packages, in opams, given the switch configuration and the set of pinned packages. (The result is precomputed in global_state.available_packages once the state is loaded)

Releases any locks on the given switch_state

Calls the provided function, ensuring a temporary write lock on the given switch state

Helpers to access state data

Sourceval repos_list : 'a OpamStateTypes.switch_state -> OpamTypes.repository_name list

Returns the repositories configured in the current switch or, if none, the globally set default. highest priority first.

Sourceval selections : 'a OpamStateTypes.switch_state -> OpamTypes.switch_selections
Sourceval opam : 'a OpamStateTypes.switch_state -> OpamTypes.package -> OpamFile.OPAM.t

Return the OPAM file for the given package.

Sourceval opam_opt : 'a OpamStateTypes.switch_state -> OpamTypes.package -> OpamFile.OPAM.t option

Return the OPAM file, including URL and descr, for the given package, if any

Sourceval url : 'a OpamStateTypes.switch_state -> OpamTypes.package -> OpamFile.URL.t option

Return the URL file for the given package

Sourceval primary_url : 'a OpamStateTypes.switch_state -> OpamTypes.package -> OpamTypes.url option

Returns the primary URL from the URL file of the given package

Sourceval descr : 'a OpamStateTypes.switch_state -> OpamTypes.package -> OpamFile.Descr.t

Return the Descr file for the given package (or an empty descr if none)

Sourceval descr_opt : 'a OpamStateTypes.switch_state -> OpamTypes.package -> OpamFile.Descr.t option

Return the Descr file for the given package

Sourceval files : 'a OpamStateTypes.switch_state -> OpamTypes.package -> OpamTypes.filename list

Returns the full paths of overlay files under the files/ directory

Sourceval package_config : 'a OpamStateTypes.switch_state -> OpamTypes.name -> OpamFile.Dot_config.t

Return the installed package's local configuration

Sourceval is_name_installed : 'a OpamStateTypes.switch_state -> OpamTypes.name -> bool

Check whether a package name is installed

Sourceval find_installed_package_by_name : 'a OpamStateTypes.switch_state -> OpamTypes.name -> OpamTypes.package

Return the installed package with the right name

Sourceval packages_of_atoms : 'a OpamStateTypes.switch_state -> OpamTypes.atom list -> OpamTypes.package_set

Return all packages satisfying one of the given atoms from a state

Sourceval get_package : 'a OpamStateTypes.switch_state -> OpamTypes.name -> OpamTypes.package

Gets the current version of package name: pinned version, installed version, max available version or max existing version, tried in this order.

  • raises Not_found

    only if there is no package by this name

Sourceval is_dev_package : 'a OpamStateTypes.switch_state -> OpamTypes.package -> bool

"dev packages" are any package with an upstream that isn't the usual HTTP, and without an archive checksum. These need to be updated from upstream independently when installed. It's generally only the case of source-pinned packages, but no rule enforces it in opam itself.

Sourceval is_pinned : 'a OpamStateTypes.switch_state -> OpamTypes.name -> bool

Checks if the given package name is pinned

Sourceval is_version_pinned : 'a OpamStateTypes.switch_state -> OpamTypes.name -> bool

Checks if the given package is version-pinned, i.e. pinned without overlay metadata, and relying on the repo's data

Sourceval dev_packages : 'a OpamStateTypes.switch_state -> OpamTypes.package_set

The set of all "dev packages" (see is_dev_package for a definition)

Sourceval source_dir : 'a OpamStateTypes.switch_state -> OpamTypes.package -> OpamTypes.dirname

Returns the local source mirror for the given package (OpamPath.Switch.sources or OpamPath.Switch.pinned_package, depending on wether it's pinned).

Sourceval depexts : 'a OpamStateTypes.switch_state -> OpamTypes.package -> OpamStd.String.Set.t

Returns the set of active external dependencies for the package, computed from the values of the system-specific variables

Sourceval conflicts_with : 'a OpamStateTypes.switch_state -> OpamTypes.package_set -> OpamTypes.package_set -> OpamTypes.package_set

conflicts_with st subset pkgs returns all packages declared in conflict with at least one element of subset within pkgs, through forward or backward conflict definition or common conflict-class. Packages in subset (all their versions) are excluded from the result.

Sourceval universe : 'a OpamStateTypes.switch_state -> ?test:bool -> ?doc:bool -> ?force_dev_deps:bool -> ?reinstall:OpamTypes.package_set -> requested:OpamTypes.name_set -> OpamTypes.user_action -> OpamTypes.universe

Put the package data in a form suitable for the solver, pre-computing some maps and sets. Packages in the requested set are the ones that will get affected by the global build_test and build_doc flags. test and doc, if unspecified, are taken from OpamStateConfig.r. reinstall marks package not considered current in the universe, and that should therefore be reinstalled. If unspecified, it is the packages marked in switch_state.reinstall that are present in requested.

Sourceval dump_pef_state : 'a OpamStateTypes.switch_state -> out_channel -> unit

Dumps the current switch state in PEF format, for interaction with Dose tools

Updating

Sourceval update_package_metadata : OpamTypes.package -> OpamFile.OPAM.t -> 'a OpamStateTypes.switch_state -> 'a OpamStateTypes.switch_state

Sets the given opam file for the given package, updating the other related fields along the way

Sourceval remove_package_metadata : OpamTypes.package -> 'a OpamStateTypes.switch_state -> 'a OpamStateTypes.switch_state

Removes the metadata associated to the given package, also updating the packages and available sets.

Sourceval update_pin : OpamTypes.package -> OpamFile.OPAM.t -> 'a OpamStateTypes.switch_state -> 'a OpamStateTypes.switch_state

Like update_package_metadata, but also ensures the package is pinned to the given version. The version specified in the opam file, if any, takes precedence over the version of package. Also marks it for reinstall if changed.

Sourceval update_repositories : 'a OpamStateTypes.global_state -> (OpamTypes.repository_name list -> OpamTypes.repository_name list) -> OpamTypes.switch -> unit

Updates the selected repositories in the given switch (does not load the full switch state, but takes a transient write lock on the switch, so make sure not to hold other locks to avoid deadlocks). Sets the switch repositories in any case, even if unchanged from the defaults.

User interaction and reporting

Sourceval is_switch_globally_set : 'a OpamStateTypes.switch_state -> bool

Returns true if the switch of the state is the one set in $OPAMROOT/config, false otherwise. This doesn't imply that the switch is current w.r.t. either the process or the shell, for that you need to check OpamStateConfig.(!r.switch_from)

Sourceval not_found_message : 'a OpamStateTypes.switch_state -> OpamTypes.atom -> string

Returns a message about a package or version that couldn't be found

Sourceval unavailable_reason : 'a OpamStateTypes.switch_state -> ?default:string -> (OpamTypes.name * OpamFormula.version_formula) -> string

Returns a printable explanation why a package is not currently available (pinned to an incompatible version, unmet available: constraints...). default is returned if no reason why it wouldn't be available was found (empty string if unspecified).

OCaml

Innovation. Community. Security.