package b0
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(*--------------------------------------------------------------------------- Copyright (c) 2020 The b0 programmers. All rights reserved. SPDX-License-Identifier: ISC ---------------------------------------------------------------------------*) open B0_std open Result.Syntax let output_dirs ~units conf = Log.if_error ~use:Os.Exit.no_such_name @@ (* XXX Eventually we should use B0_env here. *) 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" (* FIXME *) 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 (* Command line interface *) 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]