Source file b0_cmd_unit.ml
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
open B0_std
open Result.Syntax
let output_dirs ~units conf =
Log.if_error ~use:Os.Exit.no_such_name @@
let* units = B0_unit.get_list_or_hint ~all_if_empty:true units in
let b0_dir = B0_driver.Conf.b0_dir conf in
let build_dir =
B0_build.B0_dir.build_dir ~b0_dir ~variant:"user"
in
let unit_dir unit =
Fpath.strip_trailing_dir_sep @@
B0_build.B0_dir.unit_build_dir ~build_dir ~name:(B0_unit.name unit)
in
let dirs = List.map unit_dir units in
Fmt.pr "@[<v>%a@]@." (Fmt.list Fpath.pp) dirs;
Ok Os.Exit.ok
let edit ~units conf =
B0_tool.Def.edit (module B0_unit) conf units
let get ~output_details ~key ~units conf =
B0_tool.Def.get_meta_key (module B0_unit) conf output_details key units
let list ~output_details ~units conf =
B0_tool.Def.list (module B0_unit) conf output_details units
let info ~output_details ~units conf =
let output_details =
if output_details = `Normal then `Long else output_details
in
B0_tool.Def.list (module B0_unit) conf output_details units
open Cmdliner
open Cmdliner.Term.Syntax
let build_dir_cmd =
let doc = "Output build directories of units" in
let descr =
`P "$(cmd) outputs build directories of given build units. The paths may \
not exist. See also $(tool) $(b,dir)."
in
B0_tool_cli.cmd_with_b0_file "dir" ~doc ~descr @@
let+ units = B0_cli.act_on_units_pos0 in
output_dirs ~units
let edit_cmd =
let doc = "Edit build units" in
let descr =
`P "$(cmd) opens in your editor the b0 files in which given build units \
are defined."
in
B0_tool_cli.cmd_with_b0_file "edit" ~doc ~descr @@
let+ units = B0_cli.act_on_units_pos0 in
edit ~units
let get_cmd =
let doc = "Get build unit metadata" in
let descr =
`P "$(cmd) outputs the value of metadata $(i,KEY) of given build units."
in
B0_tool_cli.cmd_with_b0_file "get" ~doc ~descr @@
let+ output_details = B0_cli.output_details
and+ key = B0_cli.required_metadata_key_pos0
and+ units = B0_cli.act_on_units_pos1 in
get ~output_details ~key ~units
let list_cmd =
let doc = "List build units" in
let descr = `P "$(cmd) lists given build units." in
B0_tool_cli.cmd_with_b0_file "list" ~doc ~descr @@
let+ output_details = B0_cli.output_details
and+ units = B0_cli.act_on_units_pos0 in
list ~output_details ~units
let info_cmd =
let doc = "Output build unit metadata" in
let descr =
`P "$(cmd) is $(b,list -l), it outputs metadata of given build units."
in
B0_tool_cli.cmd_with_b0_file "info" ~doc ~descr @@
let+ output_details = B0_cli.output_details
and+ units = B0_cli.act_on_units_pos1 in
info ~output_details ~units
let cmd =
let doc = "Operate on build units" in
let descr = `P "$(cmd) operates on build units." in
B0_tool_cli.cmd_group "unit" ~doc ~descr @@
[build_dir_cmd; edit_cmd; get_cmd; list_cmd; info_cmd]