1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
open! Import
module type Store = sig
include Irmin_layers.S
include Irmin_pack.Specifics with type repo := repo and type commit := commit
val integrity_check :
?ppf:Format.formatter ->
auto_repair:bool ->
repo ->
(( [> `Fixed of int | `No_error ],
[> `Cannot_fix of string | `Corrupted of int ] )
result
* Irmin_layers.Layer_id.t)
list
end
module type Maker = functor
(M : Irmin.Metadata.S)
(C : Irmin.Contents.S)
(P : Irmin.Path.S)
(B : Irmin.Branch.S)
(H : Irmin.Hash.S)
->
Store
with type key = P.t
and type step = P.step
and type metadata = M.t
and type contents = C.t
and type branch = B.t
and type hash = H.t
module type Layered_general = sig
type 'a t
val close : _ t -> unit Lwt.t
val update_flip : flip:bool -> _ t -> unit
val flip_upper : _ t -> unit
end
module type Layered = sig
type t
include Layered_general with type _ t := t
end
module type Atomic_write = sig
open Irmin_pack.Atomic_write
include S
module U : Persistent
module L : Persistent
val v :
U.t ->
U.t ->
L.t option ->
flip:bool ->
freeze_in_progress:(unit -> bool) ->
t
val copy :
mem_commit_lower:(value -> bool Lwt.t) ->
mem_commit_upper:(value -> bool Lwt.t) ->
t ->
unit Lwt.t
include Layered with type t := t
val flush_next_lower : t -> unit
val clear_previous_upper : ?keep_generation:unit -> t -> unit Lwt.t
val copy_newies_to_next_upper : t -> unit Lwt.t
end
module type Content_addressable = sig
open Irmin_pack.Pack_store
include S
module U : S with type value = value and type index := index
module L : S with type index := index
val v :
read U.t ->
read U.t ->
read L.t option ->
flip:bool ->
freeze_in_progress:(unit -> bool) ->
read t
val layer_id : read t -> key -> Irmin_layers.Layer_id.t Lwt.t
type 'a layer_type =
| Upper : read U.t layer_type
| Lower : read L.t layer_type
val copy : 'l layer_type * 'l -> read t -> string -> key -> unit
val copy_from_lower :
read t ->
dst:'a U.t ->
?aux:(value -> unit Lwt.t) ->
string ->
key ->
unit Lwt.t
val mem_lower : 'a t -> key -> bool Lwt.t
val mem_next : [> read ] t -> key -> bool Lwt.t
val current_upper : 'a t -> read U.t
val next_upper : 'a t -> read U.t
val lower : 'a t -> read L.t
val clear_previous_upper : ?keep_generation:unit -> 'a t -> unit Lwt.t
val sync :
?on_generation_change:(unit -> unit) ->
?on_generation_change_next_upper:(unit -> unit) ->
'a t ->
bool
include Layered_general with type 'a t := 'a t
val clear_caches_next_upper : 'a t -> unit
val unsafe_append :
ensure_unique:bool -> overcommit:bool -> 'a t -> key -> value -> unit
val flush_next_lower : 'a t -> unit
val integrity_check :
offset:int63 ->
length:int ->
layer:Irmin_layers.Layer_id.t ->
key ->
_ t ->
(unit, Irmin_pack.Checks.integrity_error) result
val consume_newies : 'a t -> key list
val check :
'a t ->
?none:(unit -> unit Lwt.t) ->
?some:(value -> unit Lwt.t) ->
key ->
unit Lwt.t
end
module type Content_addressable_maker = sig
type key
type index
module Make (V : Irmin_pack.Pack_value.S with type hash := key) :
Content_addressable
with type key = key
and type value = V.t
and type index = index
and type U.key = key
and type L.key = key
and type U.value = V.t
and type L.value = V.t
end