My aggregated monorepo of OCaml code, automaintained
1type t = {
2 name : string;
3 version : string;
4 dev_repo : Uri.t;
5 branch : string option;
6 depends : string list;
7 synopsis : string option;
8}
9
10let create ~name ~version ~dev_repo ?branch ?(depends = []) ?synopsis () =
11 { name; version; dev_repo; branch; depends; synopsis }
12
13let name t = t.name
14let version t = t.version
15let dev_repo t = t.dev_repo
16let branch t = t.branch
17let depends t = t.depends
18let synopsis t = t.synopsis
19
20let repo_name t =
21 (* Extract basename from dev-repo URL, stripping .git suffix *)
22 let path = Uri.path t.dev_repo in
23 let basename = Filename.basename path in
24 if Filename.check_suffix basename ".git" then
25 Filename.chop_suffix basename ".git"
26 else basename
27
28let checkout_dir ~checkouts_root t = Fpath.(checkouts_root / repo_name t)
29let subtree_prefix t = repo_name t
30let compare a b = String.compare a.name b.name
31let equal a b = String.equal a.name b.name
32let same_repo a b = Uri.equal a.dev_repo b.dev_repo
33
34let pp ppf t =
35 Fmt.pf ppf
36 "@[<hov 2>{ name = %S;@ version = %S;@ dev_repo = %a;@ branch = %a;@ \
37 depends = [%a];@ synopsis = %a }@]"
38 t.name t.version Uri.pp t.dev_repo
39 Fmt.(option ~none:(any "None") string)
40 t.branch
41 Fmt.(list ~sep:(any ", ") string)
42 t.depends
43 Fmt.(option ~none:(any "None") (quote string))
44 t.synopsis