[Libguestfs] [PATCH] p2v: tests: Don't fail when test machine has only a single hard disk.

Richard W.M. Jones rjones at redhat.com
Tue Jul 21 09:55:48 UTC 2015


virt-p2v looks in /sys/block to find disks, and ignores the hard disk
containing the root device.  This is correct when virt-p2v runs off
the ISO, but when running the tests on a machine that has a single
hard disk, all_disks would be NULL, resulting in a test failure.

Fix this by allowing all_disks to be NULL, but adding an extra check
later so that we don't perform the conversion with no hard disks (the
gui.c path already has this check, so it is only needed in the
kernel.c path).
---
 p2v/kernel.c |  9 +++++++++
 p2v/main.c   | 14 ++++----------
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/p2v/kernel.c b/p2v/kernel.c
index dce6fbb..b283417 100644
--- a/p2v/kernel.c
+++ b/p2v/kernel.c
@@ -206,6 +206,15 @@ kernel_configuration (struct config *config, char **cmdline, int cmdline_source)
     exit (EXIT_SUCCESS);
   }
 
+  /* Some disks must have been specified for conversion. */
+  if (config->disks == NULL || guestfs_int_count_strings (config->disks) == 0) {
+    fprintf (stderr, "%s: error: no non-removable disks were discovered on this machine.\n",
+             guestfs_int_program_name);
+    fprintf (stderr, "virt-p2v looked in /sys/block and in p2v.disks on the kernel command line.\n");
+    fprintf (stderr, "This is a fatal error and virt-p2v cannot continue.\n");
+    exit (EXIT_FAILURE);
+  }
+
   /* Perform the conversion in text mode. */
   if (start_conversion (config, notify_ui_callback) == -1) {
     const char *err = get_conversion_error ();
diff --git a/p2v/main.c b/p2v/main.c
index be32e4b..12ffd01 100644
--- a/p2v/main.c
+++ b/p2v/main.c
@@ -279,7 +279,8 @@ set_config_defaults (struct config *config)
     config->flags = 0;
 
   find_all_disks ();
-  config->disks = guestfs_int_copy_string_list (all_disks);
+  if (all_disks)
+    config->disks = guestfs_int_copy_string_list (all_disks);
   if (all_removable)
     config->removable = guestfs_int_copy_string_list (all_removable);
   find_all_interfaces ();
@@ -448,15 +449,8 @@ find_all_disks (void)
     exit (EXIT_FAILURE);
   }
 
-  if (all_disks == NULL) {
-    fprintf (stderr, "%s: error: no non-removable disks were discovered on this machine.\n",
-             guestfs_int_program_name);
-    fprintf (stderr, "virt-p2v looked in /sys/block.\n");
-    fprintf (stderr, "This is a fatal error and virt-p2v cannot continue.\n");
-    exit (EXIT_FAILURE);
-  }
-
-  qsort (all_disks, nr_disks, sizeof (char *), compare);
+  if (all_disks)
+    qsort (all_disks, nr_disks, sizeof (char *), compare);
   if (all_removable)
     qsort (all_removable, nr_removable, sizeof (char *), compare);
 }
-- 
2.4.3




More information about the Libguestfs mailing list