mrc0mmand / rpms / libguestfs

Forked from rpms/libguestfs 3 years ago
Clone

Blame SOURCES/0144-p2v-Colourize-kernel-conversion-status-messages-from.patch

e76f14
From b7dd708d309d86625e3d6cb2f479bed5e5b55ee1 Mon Sep 17 00:00:00 2001
e76f14
From: "Richard W.M. Jones" <rjones@redhat.com>
e76f14
Date: Wed, 29 Jun 2016 12:51:39 +0100
e76f14
Subject: [PATCH] p2v: Colourize kernel-conversion status messages from
e76f14
 virt-p2v.
e76f14
e76f14
The messages that come "through" from virt-v2v are already colourized.
e76f14
However the other messages are not.  This colourizes the ones
e76f14
generated during kernel-mode conversions.
e76f14
e76f14
Note that because of the way journal/syslog works we have to write the
e76f14
ansi_restore before the end of line, thus code like this:
e76f14
e76f14
 ansi_magenta (stdout);
e76f14
 printf ("%s: %s", guestfs_int_program_name, data);
e76f14
 ansi_restore (stdout);
e76f14
 putchar ('\n');
e76f14
e76f14
This also adds a "Conversion finished successfully" message (in green).
e76f14
e76f14
Thanks: Ming Xie
e76f14
(cherry picked from commit b15b6e69e37cb3b6520d301442a67b9971ae8d51)
e76f14
---
e76f14
 p2v/kernel.c           | 23 +++++++++++++++++++----
e76f14
 p2v/launch-virt-p2v.in |  4 ++--
e76f14
 p2v/main.c             | 12 ++++++++++++
e76f14
 p2v/p2v.h              |  3 +++
e76f14
 p2v/virt-p2v.pod       |  9 +++++++++
e76f14
 5 files changed, 45 insertions(+), 6 deletions(-)
e76f14
e76f14
diff --git a/p2v/kernel.c b/p2v/kernel.c
e76f14
index 6d9388b..6914ab5 100644
e76f14
--- a/p2v/kernel.c
e76f14
+++ b/p2v/kernel.c
e76f14
@@ -250,6 +250,11 @@ kernel_conversion (struct config *config, char **cmdline, int cmdline_source)
e76f14
     exit (EXIT_FAILURE);
e76f14
   }
e76f14
 
e76f14
+  ansi_green (stdout);
e76f14
+  printf ("Conversion finished successfully.");
e76f14
+  ansi_restore (stdout);
e76f14
+  putchar ('\n');
e76f14
+
e76f14
   p = get_cmdline_key (cmdline, "p2v.post");
e76f14
   if (!p) {
e76f14
     if (geteuid () == 0 && cmdline_source == CMDLINE_SOURCE_PROC_CMDLINE)
e76f14
@@ -264,8 +269,12 @@ notify_ui_callback (int type, const char *data)
e76f14
 {
e76f14
   switch (type) {
e76f14
   case NOTIFY_LOG_DIR:
e76f14
-    printf ("%s: remote log directory location: %s\n",
e76f14
-            guestfs_int_program_name, data);
e76f14
+    ansi_magenta (stdout);
e76f14
+    printf ("%s: remote log directory location: ", guestfs_int_program_name);
e76f14
+    ansi_red (stdout);
e76f14
+    fputs (data, stdout);
e76f14
+    ansi_restore (stdout);
e76f14
+    putchar ('\n');
e76f14
     break;
e76f14
 
e76f14
   case NOTIFY_REMOTE_MESSAGE:
e76f14
@@ -273,12 +282,18 @@ notify_ui_callback (int type, const char *data)
e76f14
     break;
e76f14
 
e76f14
   case NOTIFY_STATUS:
e76f14
-    printf ("%s: %s\n", guestfs_int_program_name, data);
e76f14
+    ansi_magenta (stdout);
e76f14
+    printf ("%s: %s", guestfs_int_program_name, data);
e76f14
+    ansi_restore (stdout);
e76f14
+    putchar ('\n');
e76f14
     break;
e76f14
 
e76f14
   default:
e76f14
-    printf ("%s: unknown message during conversion: type=%d data=%s\n",
e76f14
+    ansi_red (stdout);
e76f14
+    printf ("%s: unknown message during conversion: type=%d data=%s",
e76f14
             guestfs_int_program_name, type, data);
e76f14
+    ansi_restore (stdout);
e76f14
+    putchar ('\n');
e76f14
   }
e76f14
 
e76f14
   fflush (stdout);
e76f14
diff --git a/p2v/launch-virt-p2v.in b/p2v/launch-virt-p2v.in
e76f14
index 3e4f1f9..ca971a0 100755
e76f14
--- a/p2v/launch-virt-p2v.in
e76f14
+++ b/p2v/launch-virt-p2v.in
e76f14
@@ -23,7 +23,7 @@
e76f14
 cmdline=$(
e76f14
 if [[ $cmdline == *p2v.server=* ]]; then
e76f14
     # Non-GUI mode, don't run X.  Just run virt-p2v directly.
e76f14
-    exec @libexecdir@/virt-p2v --iso
e76f14
+    exec @libexecdir@/virt-p2v --iso --colours
e76f14
 
e76f14
 else
e76f14
     # GUI mode.  Run xinit to start X.  To save one script, we invoke
e76f14
@@ -32,7 +32,7 @@ else
e76f14
         cd /
e76f14
         metacity &
e76f14
         nm-applet &
e76f14
-        exec @libexecdir@/virt-p2v --iso
e76f14
+        exec @libexecdir@/virt-p2v --iso --colours
e76f14
     else
e76f14
         xinit "$0" run
e76f14
     fi
e76f14
diff --git a/p2v/main.c b/p2v/main.c
e76f14
index 99d0011..c5ab233 100644
e76f14
--- a/p2v/main.c
e76f14
+++ b/p2v/main.c
e76f14
@@ -43,6 +43,7 @@ char **all_removable;
e76f14
 char **all_interfaces;
e76f14
 int is_iso_environment = 0;
e76f14
 int feature_colours_option = 0;
e76f14
+int force_colour = 0;
e76f14
 
e76f14
 static void udevadm_settle (void);
e76f14
 static void set_config_defaults (struct config *config);
e76f14
@@ -55,6 +56,10 @@ static const char options[] = "Vv";
e76f14
 static const struct option long_options[] = {
e76f14
   { "help", 0, 0, HELP_OPTION },
e76f14
   { "cmdline", 1, 0, 0 },
e76f14
+  { "color", 0, 0, 0 },
e76f14
+  { "colors", 0, 0, 0 },
e76f14
+  { "colour", 0, 0, 0 },
e76f14
+  { "colours", 0, 0, 0 },
e76f14
   { "iso", 0, 0, 0 },
e76f14
   { "long-options", 0, 0, 0 },
e76f14
   { "short-options", 0, 0, 0 },
e76f14
@@ -77,6 +82,7 @@ usage (int status)
e76f14
               "Options:\n"
e76f14
               "  --help                 Display brief help\n"
e76f14
               " --cmdline=CMDLINE       Used to debug command line parsing\n"
e76f14
+              " --colours               Use ANSI colour sequences even if not tty\n"
e76f14
               " --iso                   Running in the ISO environment\n"
e76f14
               "  -v|--verbose           Verbose messages\n"
e76f14
               "  -V|--version           Display version and exit\n"
e76f14
@@ -158,6 +164,12 @@ main (int argc, char *argv[])
e76f14
         cmdline = parse_cmdline_string (optarg);
e76f14
         cmdline_source = CMDLINE_SOURCE_COMMAND_LINE;
e76f14
       }
e76f14
+      else if (STREQ (long_options[option_index].name, "color") ||
e76f14
+               STREQ (long_options[option_index].name, "colour") ||
e76f14
+               STREQ (long_options[option_index].name, "colors") ||
e76f14
+               STREQ (long_options[option_index].name, "colours")) {
e76f14
+        force_colour = 1;
e76f14
+      }
e76f14
       else if (STREQ (long_options[option_index].name, "iso")) {
e76f14
         is_iso_environment = 1;
e76f14
       }
e76f14
diff --git a/p2v/p2v.h b/p2v/p2v.h
e76f14
index 3e75690..52d5ccb 100644
e76f14
--- a/p2v/p2v.h
e76f14
+++ b/p2v/p2v.h
e76f14
@@ -61,6 +61,9 @@ extern int is_iso_environment;
e76f14
 /* True if virt-v2v supports the --colours option. */
e76f14
 extern int feature_colours_option;
e76f14
 
e76f14
+/* virt-p2v --colours option (used by ansi_* macros). */
e76f14
+extern int force_colour;
e76f14
+
e76f14
 /* config.c */
e76f14
 struct config {
e76f14
   int verbose;
e76f14
diff --git a/p2v/virt-p2v.pod b/p2v/virt-p2v.pod
e76f14
index 421925f..247acce 100644
e76f14
--- a/p2v/virt-p2v.pod
e76f14
+++ b/p2v/virt-p2v.pod
e76f14
@@ -591,6 +591,15 @@ Display help.
e76f14
 This is used for debugging. Instead of parsing the kernel command line
e76f14
 from F</proc/cmdline>, parse the string parameter C<CMDLINE>.
e76f14
 
e76f14
+=item B<--colors>
e76f14
+
e76f14
+=item B<--colours>
e76f14
+
e76f14
+Use ANSI colour sequences to colourize messages.  This is the default
e76f14
+when the output is a tty.  If the output of the program is redirected
e76f14
+to a file, ANSI colour sequences are disabled unless you use this
e76f14
+option.
e76f14
+
e76f14
 =item B<--iso>
e76f14
 
e76f14
 This flag is passed to virt-p2v when it is launched inside the
e76f14
-- 
e76f14
1.8.3.1
e76f14