package conex

  1. Overview
  2. Docs

Module Conex_resourceSource

Persistent data: on wire and record types

Every resource in conex is a piece of data (or metadata), and has its own purpose. Resources stored on disk consists of a common header: a name, a type, a counter, a wraparound counter, and a creation timestamp. There are broadly three kinds of resources: those containing identities (Team and Author), those regulating access to packages (Authorisation), and those with the digests of the opam repository data (Package and Release).

Names and identifiers

Sourcetype name = string

The name of resources, used e.g. for package names.

pp_name name is a pretty printer for name.

Sourceval name_equal : name -> name -> bool

name_equal a b is the result of a case insensitive comparison of a and b.

Sourcetype identifier = string

The type of identifiers.

pp_id id is a pretty printer for identifier.

Sourceval id_equal : identifier -> identifier -> bool

id_equal a b is the result of a case insensitive comparison of a and b.

Wire format

Sourcemodule Wire : sig ... end

The wire encoding is abstract here, one suitable decoding and encoding engine is Conex_opam_encoding. The wire encoding is used for digest computations, and persistent storage on disk.

Resource types

Sourcetype typ = [
  1. | `Signature
  2. | `Key
  3. | `Account
  4. | `Author
  5. | `Wrap
  6. | `Team
  7. | `Authorisation
  8. | `Package
  9. | `Release
]

The sum type of all possible resources.

Sourceval typ_to_string : typ -> string

resource_to_string res is the string representation of res.

Sourceval string_to_typ : string -> typ option

string_to_resource str is either Some resource or None.

pp_resource pp is a pretty printer for resource.

Sourceval typ_equal : typ -> typ -> bool

resource_equal a b is true if they are the same, otherwise false.

Sourceval typ_of_wire : Wire.s -> (typ, string) result
Sourcemodule Header : sig ... end

Common header on disk

Asymmetric key types

Sourcemodule Key : sig ... end

Cryptographic signatures

Sourcemodule Signature : sig ... end

Digests

Sourcemodule Digest : sig ... end

Author

Sourcemodule Author : sig ... end

An author contains a list of approved resources (name, typ, digest). It also contains a list of key and signature pairs, and a list of accounts. Keys have to be approved by a quorum of janitors, but the resource list is modified only by the author themselves.

Team

Sourcemodule Team : sig ... end

A team consists of a group of authors. Team members can dynamically join and leave.

Authorisation

Sourcemodule Authorisation : sig ... end

An authorisation contains the information who is authorised to modify a package. There is always a single authorisation file per package, approved by a quorum of janitors.

Package

Sourcemodule Package : sig ... end

A package lists all releases of a given package. There is one package resource for each package.

Release

Sourcemodule Release : sig ... end

A release contains a map of all files in the repository relevant for this release and their digests.