Similarly to how users can can force ANSI colorization with "--colors" even when stdout / stderr are redirected to a non-tty, allow them to force wrapping with "--wrap".
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1820221 Signed-off-by: Laszlo Ersek <ler...@redhat.com> --- Notes: - This patch will require documentation updates for the following guestfs-tools utilities (those that already document "--colours"): builder/virt-builder-repository.pod builder/virt-builder.pod customize/virt-customize.pod dib/virt-dib.pod get-kernel/virt-get-kernel.pod resize/virt-resize.pod sparsify/virt-sparsify.pod sysprep/virt-sysprep.pod Virt-v2v as well: docs/virt-v2v.pod This is evident e.g. from "test-virt-customize-docs.sh" failing in guestfs-tools, and "test-v2v-docs.sh" failing in virt-v2v. If this patch is accepted, I intend to post such guestfs-tools and virt-v2v patches that atomically bump the submodule reference and update the documentation. - Some utilities in libguestfs already use the short "-w" option (guestfish, guestmount, virt-rescue); however, those utilities do not document "--colours", so they already don't make a TTY-based distinction, and will not see the new short "-w" option. - Easily testable e.g. with virt-resize: $ guestfish -N fs:ext4 exit $ truncate -s 2G test1.resized.img $ virt-resize --expand /dev/sda1 test1.img test1.resized.img $ virt-resize -w --expand /dev/sda1 test1.img test1.resized.img $ virt-resize --expand /dev/sda1 test1.img test1.resized.img > log1 $ virt-resize -w --expand /dev/sda1 test1.img test1.resized.img > log2 $ cat log1 $ cat log2 mlstdutils/std_utils.mli | 6 ++++-- mlstdutils/std_utils.ml | 8 ++++++-- mltools/tools_utils.ml | 3 ++- mltools/test-getopt.sh | 2 ++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/mlstdutils/std_utils.mli b/mlstdutils/std_utils.mli index 534caa80d6a7..87e923e24d29 100644 --- a/mlstdutils/std_utils.mli +++ b/mlstdutils/std_utils.mli @@ -376,8 +376,10 @@ val set_trace : unit -> unit val trace : unit -> bool val set_verbose : unit -> unit val verbose : unit -> bool -(** Stores the colours ([--colours]), quiet ([--quiet]), trace ([-x]) and - verbose ([-v]) flags in global variables. *) +val set_wrap : unit -> unit +val wrap : unit -> bool +(** Stores the colours ([--colours]), quiet ([--quiet]), trace ([-x]), verbose + ([-v]) and wrap ([-w]) flags in global variables. *) val with_open_in : string -> (in_channel -> 'a) -> 'a (** [with_open_in filename f] calls function [f] with [filename] diff --git a/mlstdutils/std_utils.ml b/mlstdutils/std_utils.ml index 58ac058c1b3a..52f44760c490 100644 --- a/mlstdutils/std_utils.ml +++ b/mlstdutils/std_utils.ml @@ -580,8 +580,8 @@ let which executable = (* Program name. *) let prog = Filename.basename Sys.executable_name -(* Stores the colours (--colours), quiet (--quiet), trace (-x) and - * verbose (-v) flags in a global variable. +(* Stores the colours (--colours), quiet (--quiet), trace (-x), verbose (-v) + * and wrap (-w) flags in a global variable. *) let colours = ref false let set_colours () = colours := true @@ -599,6 +599,10 @@ let verbose = ref false let set_verbose () = verbose := true let verbose () = !verbose +let wrap = ref false +let set_wrap () = wrap := true +let wrap () = !wrap + let with_open_in filename f = let chan = open_in filename in protect ~f:(fun () -> f chan) ~finally:(fun () -> close_in chan) diff --git a/mltools/tools_utils.ml b/mltools/tools_utils.ml index 4c5188988e03..eb8da290eec6 100644 --- a/mltools/tools_utils.ml +++ b/mltools/tools_utils.ml @@ -126,7 +126,7 @@ let message fs = type wrap_break_t = WrapEOS | WrapSpace | WrapNL let rec wrap ?(chan = stdout) ?(indent = 0) str = - if istty chan then + if Std_utils.wrap () || istty chan then let len = String.length str in _wrap chan indent 0 0 len str else ( @@ -388,6 +388,7 @@ let create_standard_options argspec ?anon_fun ?(key_opts = false) add_argspec ([ S 'q'; L"quiet" ], Getopt.Unit set_quiet, s_"Don’t print progress messages"); add_argspec ([ L"color"; L"colors"; L"colour"; L"colours" ], Getopt.Unit set_colours, s_"Use ANSI colour sequences even if not tty"); + add_argspec ([ S 'w'; L"wrap" ], Getopt.Unit set_wrap, s_"Wrap log messages even if not tty"); if key_opts then ( let parse_key_selector arg = diff --git a/mltools/test-getopt.sh b/mltools/test-getopt.sh index d9919a9a915a..1d7bb7b1dc4f 100755 --- a/mltools/test-getopt.sh +++ b/mltools/test-getopt.sh @@ -68,6 +68,7 @@ $t --short-options | grep '^-is' $t --short-options | grep '^-t' $t --short-options | grep '^-V' $t --short-options | grep '^-v' +$t --short-options | grep '^-w' $t --short-options | grep '^-x' # --long-options @@ -89,6 +90,7 @@ $t --long-options | grep '^--ii' $t --long-options | grep '^--is' $t --long-options | grep '^--version' $t --long-options | grep '^--verbose' +$t --long-options | grep '^--wrap' # -a/--add parameter. $t | grep '^adds = \[\]' -- 2.19.1.3.g30247aa5d201 _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://listman.redhat.com/mailman/listinfo/libguestfs