Irmin.ContentsContents specifies how user-defined contents need to be serializable and mergeable.
The user needs to provide:
t to be used as store contents.t (built using the Irmin.Type combinators).merge function, to handle conflicts between multiple versions of the same contents.Default implementations for idempotent string and JSON contents are provided.
Values.
module type S = sig ... endContents of type string, with the default 3-way merge strategy: assume that update operations are idempotent and conflict iff values are modified concurrently.
Similar to String above, but the hash computation is compatible with versions older than irmin.3.0
Json contents are associations from strings to json values stored as JSON encoded strings. If the same JSON key has been modified concurrently with different values then the merge function conflicts.
module Json_value : S with type t = jsonJson_value allows any kind of json value to be stored, not only objects.
module V1 : sig ... endmodule type Store = sig ... endContents store.
module Store
(S : Content_addressable.S)
(H : Hash.S with type t = S.key)
(C : S with type t = S.value) :
Store
with type 'a t = 'a S.t
and type key = H.t
and type hash = H.t
and type value = C.tStore creates a contents store.
module Store_indexable
(S : Indexable.S)
(H : Hash.S with type t = S.hash)
(C : S with type t = S.value) :
Store
with type 'a t = 'a S.t
and type key = S.key
and type value = S.value
and type hash = S.hashStore_indexable is like Store but uses an indexable store as a backend (rather than a content-addressable one).