Switch from a boolean for the short/long list output to labels for the actual format. Also, split the output of each list format to an own function for easier maintaineance. --- builder/builder.ml | 4 +-- builder/cmdline.ml | 9 +++--- builder/list_entries.ml | 82 +++++++++++++++++++++++++++--------------------- builder/list_entries.mli | 2 +- 4 files changed, 54 insertions(+), 43 deletions(-) diff --git a/builder/builder.ml b/builder/builder.ml index 861e029..bb0b108 100644 --- a/builder/builder.ml +++ b/builder/builder.ml @@ -37,7 +37,7 @@ let main () = (* Command line argument parsing - see cmdline.ml. *) let mode, arg, attach, cache, check_signature, curl, debug, delete, delete_on_failure, - edit, firstboot, run, format, gpg, hostname, install, list_long, links, + edit, firstboot, run, format, gpg, hostname, install, list_format, links, memsize, mkdirs, network, output, password_crypto, quiet, root_password, scrub, scrub_logfile, size, smp, sources, sync, timezone, update, upload, @@ -148,7 +148,7 @@ let main () = let mode = match mode with | `List -> (* --list *) - List_entries.list_entries ~list_long ~sources index; + List_entries.list_entries ~list_format ~sources index; exit 0 | `Print_cache -> (* --print-cache *) diff --git a/builder/cmdline.ml b/builder/cmdline.ml index 67b142a..f199f03 100644 --- a/builder/cmdline.ml +++ b/builder/cmdline.ml @@ -130,7 +130,8 @@ let parse_cmdline () = links := (target, lns) :: !links in - let list_long = ref false in + let list_format = ref `Short in + let list_set_long () = list_format := `Long in let memsize = ref None in let set_memsize arg = memsize := Some arg in @@ -255,7 +256,7 @@ let parse_cmdline () = "--link", Arg.String add_link, "target:link.." ^ " " ^ s_"Create symbolic links"; "-l", Arg.Unit list_mode, " " ^ s_"List available templates"; "--list", Arg.Unit list_mode, ditto; - "--long", Arg.Set list_long, ditto; + "--long", Arg.Unit list_set_long, " " ^ s_"List available templates, in long textual form"; "--no-logfile", Arg.Set scrub_logfile, " " ^ s_"Scrub build log file"; "--long-options", Arg.Unit display_long_options, " " ^ s_"List long options"; "-m", Arg.Int set_memsize, "mb" ^ " " ^ s_"Set memory size"; @@ -329,7 +330,7 @@ read the man page virt-builder(1). let gpg = !gpg in let hostname = !hostname in let install = List.rev !install in - let list_long = !list_long in + let list_format = !list_format in let links = List.rev !links in let memsize = !memsize in let mkdirs = List.rev !mkdirs in @@ -443,7 +444,7 @@ read the man page virt-builder(1). mode, arg, attach, cache, check_signature, curl, debug, delete, delete_on_failure, - edit, firstboot, run, format, gpg, hostname, install, list_long, links, + edit, firstboot, run, format, gpg, hostname, install, list_format, links, memsize, mkdirs, network, output, password_crypto, quiet, root_password, scrub, scrub_logfile, size, smp, sources, sync, timezone, update, upload, diff --git a/builder/list_entries.ml b/builder/list_entries.ml index 87001c0..97ab201 100644 --- a/builder/list_entries.ml +++ b/builder/list_entries.ml @@ -21,15 +21,35 @@ open Common_utils open Printf -let list_entries ?(list_long = false) ~sources index = - if list_long then ( - List.iter ( - fun (source, fingerprint) -> - printf (f_"Source URI: %s\n") source; - printf (f_"Fingerprint: %s\n") fingerprint; +let rec list_entries ~list_format ~sources index = + match list_format with + | `Short -> list_entries_short index + | `Long -> list_entries_long ~sources index + +and list_entries_short index = + List.iter ( + fun (name, { Index_parser.printable_name = printable_name; + size = size; + compressed_size = compressed_size; + notes = notes; + hidden = hidden }) -> + if not hidden then ( + printf "%-24s" name; + (match printable_name with + | None -> () + | Some s -> printf " %s" s + ); printf "\n" - ) sources - ); + ) + ) index + +and list_entries_long ~sources index = + List.iter ( + fun (source, fingerprint) -> + printf (f_"Source URI: %s\n") source; + printf (f_"Fingerprint: %s\n") fingerprint; + printf "\n" + ) sources; List.iter ( fun (name, { Index_parser.printable_name = printable_name; @@ -38,33 +58,23 @@ let list_entries ?(list_long = false) ~sources index = notes = notes; hidden = hidden }) -> if not hidden then ( - if not list_long then ( (* Short *) - printf "%-24s" name; - (match printable_name with - | None -> () - | Some s -> printf " %s" s - ); - printf "\n" - ) - else ( (* Long *) - printf "%-24s %s\n" "os-version:" name; - (match printable_name with - | None -> () - | Some name -> printf "%-24s %s\n" (s_"Full name:") name; - ); - printf "%-24s %s\n" (s_"Minimum/default size:") (human_size size); - (match compressed_size with - | None -> () - | Some size -> - printf "%-24s %s\n" (s_"Download size:") (human_size size); - ); - (match notes with - | None -> () - | Some notes -> - printf "\n"; - printf (f_"Notes:\n\n%s\n") notes - ); - printf "\n" - ) + printf "%-24s %s\n" "os-version:" name; + (match printable_name with + | None -> () + | Some name -> printf "%-24s %s\n" (s_"Full name:") name; + ); + printf "%-24s %s\n" (s_"Minimum/default size:") (human_size size); + (match compressed_size with + | None -> () + | Some size -> + printf "%-24s %s\n" (s_"Download size:") (human_size size); + ); + (match notes with + | None -> () + | Some notes -> + printf "\n"; + printf (f_"Notes:\n\n%s\n") notes + ); + printf "\n" ) ) index diff --git a/builder/list_entries.mli b/builder/list_entries.mli index d9486b0..41d0bff 100644 --- a/builder/list_entries.mli +++ b/builder/list_entries.mli @@ -16,4 +16,4 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *) -val list_entries : ?list_long:bool -> sources:(string * string) list -> Index_parser.index -> unit +val list_entries : list_format:([ `Short | `Long ]) -> sources:(string * string) list -> Index_parser.index -> unit -- 1.8.3.1