File tree 3 files changed +38
-0
lines changed
3 files changed +38
-0
lines changed Original file line number Diff line number Diff line change 1
1
(* Odoc driver *)
2
2
open Odoc_driver_lib
3
3
4
+ let check_packages packages =
5
+ match packages with
6
+ | [] -> ()
7
+ | _ -> (
8
+ match Opam. check packages with
9
+ | Ok () -> ()
10
+ | Error missing ->
11
+ Logs. err (fun m ->
12
+ m " Error: Unknown/uninstalled packages: %a"
13
+ Fmt.Dump. (list string )
14
+ (Util.StringSet. elements missing));
15
+ exit 1 )
16
+
4
17
let run_inner ~odoc_dir ~odocl_dir ~index_dir ~mld_dir ~compile_grep ~link_grep
5
18
~generate_grep ~index_grep ~remap ~index_mld packages
6
19
{
@@ -20,6 +33,7 @@ let run_inner ~odoc_dir ~odocl_dir ~index_dir ~mld_dir ~compile_grep ~link_grep
20
33
21
34
if verbose then Logs. set_level (Some Logs. Debug );
22
35
Logs. set_reporter (Logs_fmt. reporter () );
36
+ check_packages packages;
23
37
Stats. init_nprocs nb_workers;
24
38
25
39
let index_mld_content =
Original file line number Diff line number Diff line change @@ -281,6 +281,29 @@ let dune_overrides () =
281
281
[] )
282
282
| _ -> [] )
283
283
284
+ let check pkgs =
285
+ let cmd =
286
+ Cmd. (
287
+ opam % " list" % " -i" % " --columns" % " package" % " --color" % " never"
288
+ % " -s" )
289
+ in
290
+ let cmd = List. fold_left (fun cmd pkg -> Cmd. (cmd % pkg)) cmd pkgs in
291
+ let out = Util. lines_of_process cmd in
292
+ let res =
293
+ List. filter_map
294
+ (fun x ->
295
+ match Astring.String. cut ~sep: " ." x with
296
+ | Some (name , _version ) -> Some name
297
+ | None -> None )
298
+ out
299
+ in
300
+ let missing = Util.StringSet. (diff (of_list pkgs) (of_list res)) in
301
+ let dune_pkgnames =
302
+ Util.StringSet. of_list (List. map (fun (p , _ ) -> p.name) (dune_overrides () ))
303
+ in
304
+ let missing = Util.StringSet. (diff missing dune_pkgnames) in
305
+ if Util.StringSet. cardinal missing = 0 then Ok () else Error missing
306
+
284
307
let pkg_to_dir_map () =
285
308
let dune_overrides = dune_overrides () in
286
309
let pkgs = all_opam_packages () in
Original file line number Diff line number Diff line change @@ -20,6 +20,7 @@ val all_opam_packages : unit -> package list
20
20
21
21
val classify_docs : Fpath .t -> string option -> Fpath .t list -> doc_file list
22
22
23
+ val check : string list -> (unit , Util.StringSet .t ) Result .t
23
24
val deps : string list -> package list
24
25
val pkg_to_dir_map : unit -> fpaths_of_package * package_of_fpath
25
26
val pp : Format .formatter -> package -> unit
You can’t perform that action at this time.
0 commit comments