From 3b7c70dea311561c4ffe69ceee65a994a5543862 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Sat, 18 Jun 2016 10:22:46 +0100 Subject: [PATCH] virt tools: Add common --colours option. This option (alternately spelled: --color, --colour, --colors, or --colours) enables ANSI colour sequences output even if that would be disabled becaues the output is not a TTY. (cherry picked from commit b000d6bc68543035e3fc14853c8a9f518ed1b0f3) --- builder/virt-builder.pod | 9 +++++++++ customize/virt-customize.pod | 9 +++++++++ dib/virt-dib.pod | 9 +++++++++ get-kernel/virt-get-kernel.pod | 9 +++++++++ mllib/common_utils.ml | 42 +++++++++++++++++++++++++----------------- resize/virt-resize.pod | 9 +++++++++ sparsify/virt-sparsify.pod | 9 +++++++++ sysprep/virt-sysprep.pod | 9 +++++++++ v2v/cmdline.ml | 1 + v2v/virt-v2v.pod | 9 +++++++++ 10 files changed, 98 insertions(+), 17 deletions(-) diff --git a/builder/virt-builder.pod b/builder/virt-builder.pod index 94ba430..5e344de 100644 --- a/builder/virt-builder.pod +++ b/builder/virt-builder.pod @@ -241,6 +241,15 @@ Using I<--no-check-signature> bypasses this check. See also I<--fingerprint>. +=item B<--colors> + +=item B<--colours> + +Use ANSI colour sequences to colourize messages. This is the default +when the output is a tty. If the output of the program is redirected +to a file, ANSI colour sequences are disabled unless you use this +option. + =item B<--curl> CURL Specify an alternate L binary. You can also use this to add diff --git a/customize/virt-customize.pod b/customize/virt-customize.pod index 8fb9931..e8eb148 100644 --- a/customize/virt-customize.pod +++ b/customize/virt-customize.pod @@ -74,6 +74,15 @@ disk format (not just an ISO). Specify the disk format for the next I<--attach> option. The C is usually C or C. Use C for ISOs. +=item B<--colors> + +=item B<--colours> + +Use ANSI colour sequences to colourize messages. This is the default +when the output is a tty. If the output of the program is redirected +to a file, ANSI colour sequences are disabled unless you use this +option. + =item B<-c> URI =item B<--connect> URI diff --git a/dib/virt-dib.pod b/dib/virt-dib.pod index 9baae23..8ccb9f5 100644 --- a/dib/virt-dib.pod +++ b/dib/virt-dib.pod @@ -72,6 +72,15 @@ Right now this option does nothing more than setting the C environment variable for the elements, and it's up to them to produce an image for the requested architecture. +=item B<--colors> + +=item B<--colours> + +Use ANSI colour sequences to colourize messages. This is the default +when the output is a tty. If the output of the program is redirected +to a file, ANSI colour sequences are disabled unless you use this +option. + =item B<--debug> LEVEL Set the debug level to C, which is a non-negative integer diff --git a/get-kernel/virt-get-kernel.pod b/get-kernel/virt-get-kernel.pod index 92d6cb6..97a159c 100644 --- a/get-kernel/virt-get-kernel.pod +++ b/get-kernel/virt-get-kernel.pod @@ -44,6 +44,15 @@ force a particular format use the I<--format> option. Add a remote disk. The URI format is compatible with guestfish. See L. +=item B<--colors> + +=item B<--colours> + +Use ANSI colour sequences to colourize messages. This is the default +when the output is a tty. If the output of the program is redirected +to a file, ANSI colour sequences are disabled unless you use this +option. + =item B<-c> URI =item B<--connect> URI diff --git a/mllib/common_utils.ml b/mllib/common_utils.ml index be8810a..7bd02f8 100644 --- a/mllib/common_utils.ml +++ b/mllib/common_utils.ml @@ -299,27 +299,16 @@ let protect ~f ~finally = finally (); match r with Either ret -> ret | Or exn -> raise exn -let istty chan = - Unix.isatty (Unix.descr_of_out_channel chan) - -(* ANSI terminal colours. *) -let ansi_green ?(chan = stdout) () = - if istty chan then output_string chan "\x1b[0;32m" -let ansi_red ?(chan = stdout) () = - if istty chan then output_string chan "\x1b[1;31m" -let ansi_blue ?(chan = stdout) () = - if istty chan then output_string chan "\x1b[1;34m" -let ansi_magenta ?(chan = stdout) () = - if istty chan then output_string chan "\x1b[1;35m" -let ansi_restore ?(chan = stdout) () = - if istty chan then output_string chan "\x1b[0m" - (* Program name. *) let prog = Filename.basename Sys.executable_name -(* Stores the quiet (--quiet), trace (-x) and verbose (-v) flags in a - * global variable. +(* Stores the colours (--colours), quiet (--quiet), trace (-x) and + * verbose (-v) flags in a global variable. *) +let colours = ref false +let set_colours () = colours := true +let colours () = !colours + let quiet = ref false let set_quiet () = quiet := true let quiet () = !quiet @@ -332,6 +321,21 @@ let verbose = ref false let set_verbose () = verbose := true let verbose () = !verbose +(* ANSI terminal colours. *) +let istty chan = + Unix.isatty (Unix.descr_of_out_channel chan) + +let ansi_green ?(chan = stdout) () = + if colours () || istty chan then output_string chan "\x1b[0;32m" +let ansi_red ?(chan = stdout) () = + if colours () || istty chan then output_string chan "\x1b[1;31m" +let ansi_blue ?(chan = stdout) () = + if colours () || istty chan then output_string chan "\x1b[1;34m" +let ansi_magenta ?(chan = stdout) () = + if colours () || istty chan then output_string chan "\x1b[1;35m" +let ansi_restore ?(chan = stdout) () = + if colours () || istty chan then output_string chan "\x1b[0m" + (* Timestamped progress messages, used for ordinary messages when not * --quiet. *) @@ -596,6 +600,10 @@ let set_standard_options argspec = "--debug-gc", Arg.Unit set_debug_gc, " " ^ s_"Debug GC and memory allocations (internal)"; "-q", Arg.Unit set_quiet, " " ^ s_"Don't print progress messages"; "--quiet", Arg.Unit set_quiet, " " ^ s_"Don't print progress messages"; + "--color", Arg.Unit set_colours, " " ^ s_"Use ANSI colour sequences even if not tty"; + "--colors", Arg.Unit set_colours, " " ^ s_"Use ANSI colour sequences even if not tty"; + "--colour", Arg.Unit set_colours, " " ^ s_"Use ANSI colour sequences even if not tty"; + "--colours", Arg.Unit set_colours, " " ^ s_"Use ANSI colour sequences even if not tty"; ] @ argspec in let argspec = let cmp (arg1, _, _) (arg2, _, _) = compare_command_line_args arg1 arg2 in diff --git a/resize/virt-resize.pod b/resize/virt-resize.pod index a0ab459..2b2a485 100644 --- a/resize/virt-resize.pod +++ b/resize/virt-resize.pod @@ -327,6 +327,15 @@ since around 2008. =back +=item B<--colors> + +=item B<--colours> + +Use ANSI colour sequences to colourize messages. This is the default +when the output is a tty. If the output of the program is redirected +to a file, ANSI colour sequences are disabled unless you use this +option. + =item B<-d> =item B<--debug> diff --git a/sparsify/virt-sparsify.pod b/sparsify/virt-sparsify.pod index b841251..44f7d4e 100644 --- a/sparsify/virt-sparsify.pod +++ b/sparsify/virt-sparsify.pod @@ -155,6 +155,15 @@ B and exit. You cannot use this option and I<--in-place> together. +=item B<--colors> + +=item B<--colours> + +Use ANSI colour sequences to colourize messages. This is the default +when the output is a tty. If the output of the program is redirected +to a file, ANSI colour sequences are disabled unless you use this +option. + =item B<--compress> Compress the output file. This I works if the output format is diff --git a/sysprep/virt-sysprep.pod b/sysprep/virt-sysprep.pod index 44cf7f8..d671443 100644 --- a/sysprep/virt-sysprep.pod +++ b/sysprep/virt-sysprep.pod @@ -59,6 +59,15 @@ force a particular format use the I<--format> option. Add a remote disk. The URI format is compatible with guestfish. See L. +=item B<--colors> + +=item B<--colours> + +Use ANSI colour sequences to colourize messages. This is the default +when the output is a tty. If the output of the program is redirected +to a file, ANSI colour sequences are disabled unless you use this +option. + =item B<-c> URI =item B<--connect> URI diff --git a/v2v/cmdline.ml b/v2v/cmdline.ml index 4623af9..b9992eb 100644 --- a/v2v/cmdline.ml +++ b/v2v/cmdline.ml @@ -296,6 +296,7 @@ read the man page virt-v2v(1). if args = [] && machine_readable then ( printf "virt-v2v\n"; printf "libguestfs-rewrite\n"; + printf "colours-option\n"; List.iter (printf "input:%s\n") (Modules_list.input_modules ()); List.iter (printf "output:%s\n") (Modules_list.output_modules ()); List.iter (printf "convert:%s\n") (Modules_list.convert_modules ()); diff --git a/v2v/virt-v2v.pod b/v2v/virt-v2v.pod index 5800b34..93f0e77 100644 --- a/v2v/virt-v2v.pod +++ b/v2v/virt-v2v.pod @@ -154,6 +154,15 @@ Display help. See I<--network> below. +=item B<--colors> + +=item B<--colours> + +Use ANSI colour sequences to colourize messages. This is the default +when the output is a tty. If the output of the program is redirected +to a file, ANSI colour sequences are disabled unless you use this +option. + =item B<--compressed> Write a compressed output file. This is only allowed if the output -- 1.8.3.1