@@ -42,6 +42,8 @@ module Make (K : Data.Key) (V : Data.Value) (Platform : Platform_args) = struct
4242 @@ pos 0 (some string ) None
4343 @@ info ~doc: " Path to the Index store on disk" ~docv: " PATH" []
4444
45+ type io = Platform.IO .io
46+
4547 module Stat = struct
4648 type io = {
4749 size : size ;
@@ -62,16 +64,17 @@ module Make (K : Data.Key) (V : Data.Value) (Platform : Platform_args) = struct
6264
6365 type t = { entry_size : size ; files : files } [@@ deriving repr ]
6466
65- let with_io : type a. string -> (IO.t -> a) -> a option =
66- fun path f ->
67- match IO. v path with
67+ let with_io : type a . io :Platform.IO. io -> string -> (IO. t -> a ) -> a option
68+ =
69+ fun ~io path f ->
70+ match IO. v ~io path with
6871 | Error `No_file_on_disk -> None
6972 | Ok io ->
7073 let a = f io in
7174 IO. close io;
7275 Some a
7376
74- let io path =
77+ let run_io path =
7578 with_io path @@ fun io ->
7679 let IO.Header. { offset; generation } = IO.Header. get io in
7780 let fanout_size = Bytes (IO. get_fanout_size io) in
@@ -80,12 +83,12 @@ module Make (K : Data.Key) (V : Data.Value) (Platform : Platform_args) = struct
8083 let generation = Int63. to_int64 generation in
8184 { size; offset; generation; fanout_size }
8285
83- let run ~root =
86+ let run ~io ~ root =
8487 Logs. app (fun f -> f " Getting statistics for store: `%s'@," root);
85- let data = io (Layout. data ~root ) in
86- let log = io (Layout. log ~root ) in
87- let log_async = io (Layout. log_async ~root ) in
88- let merge = io (Layout. merge ~root ) in
88+ let data = run_io ~ io (Layout. data ~root ) in
89+ let log = run_io ~ io (Layout. log ~root ) in
90+ let log_async = run_io ~ io (Layout. log_async ~root ) in
91+ let merge = run_io ~ io (Layout. merge ~root ) in
8992 let lock =
9093 IO.Lock. pp_dump (Layout. lock ~root )
9194 |> Option. map (fun f ->
@@ -99,7 +102,7 @@ module Make (K : Data.Key) (V : Data.Value) (Platform : Platform_args) = struct
99102 }
100103 |> Repr. pp_json ~minify: false t Fmt. stdout
101104
102- let term = Cmdliner.Term. (const (fun root () -> run ~root ) $ path)
105+ let term ~ io = Cmdliner.Term. (const (fun root () -> run ~io ~root ) $ path)
103106 end
104107
105108 module Integrity_check = struct
@@ -120,9 +123,9 @@ module Make (K : Data.Key) (V : Data.Value) (Platform : Platform_args) = struct
120123 highlight (fun ppf () -> (Repr. pp Entry. t) ppf entry))
121124 |> Fmt. (concat ~sep: cut)
122125
123- let run ~root =
126+ let run ~io ~ root =
124127 let context = 2 in
125- match IO. v (Layout. data ~root ) with
128+ match IO. v ~io (Layout. data ~root ) with
126129 | Error `No_file_on_disk -> Fmt. failwith " No data file in %s" root
127130 | Ok io ->
128131 let io_offset = IO. offset io in
@@ -151,7 +154,7 @@ module Make (K : Data.Key) (V : Data.Value) (Platform : Platform_args) = struct
151154 () );
152155 previous := e)
153156
154- let term = Cmdliner.Term. (const (fun root () -> run ~root ) $ path)
157+ let term ~ io = Cmdliner.Term. (const (fun root () -> run ~io ~root ) $ path)
155158 end
156159
157160 module Cli = struct
@@ -166,7 +169,7 @@ module Make (K : Data.Key) (V : Data.Value) (Platform : Platform_args) = struct
166169 in
167170 Logs_fmt. reporter ~pp_header ()
168171
169- let main () : empty =
172+ let main ~ io () : empty =
170173 let default = Term. (ret (const (`Help (`Auto , None )))) in
171174 let info =
172175 let doc = " Check and repair Index data-stores." in
@@ -175,12 +178,12 @@ module Make (K : Data.Key) (V : Data.Value) (Platform : Platform_args) = struct
175178 let commands =
176179 [
177180 ( Term. (
178- Stat. term
181+ Stat. term ~io
179182 $ Log. setup_term ~reporter (module Clock ) (module Fmt_tty )),
180183 Cmd. info ~doc: " Print high-level statistics about the store." " stat"
181184 );
182185 ( Term. (
183- Integrity_check. term
186+ Integrity_check. term ~io
184187 $ Log. setup_term ~reporter (module Clock ) (module Fmt_tty )),
185188 Cmd. info
186189 ~doc: " Search the store for integrity faults and corruption."
0 commit comments