Improved error if virt-inspector cannot find OSes in image (RHBZ#591142).
authorRichard Jones <rjones@redhat.com>
Wed, 12 May 2010 17:11:37 +0000 (18:11 +0100)
committerRichard Jones <rjones@redhat.com>
Fri, 14 May 2010 16:24:24 +0000 (17:24 +0100)
(cherry picked from commit 94e310dcfbcd368cbe02dbc1643ed2ff9821cd48
and modified to apply to the stable branch)

perl/lib/Sys/Guestfs/Lib.pm
tools/virt-cat
tools/virt-edit
tools/virt-ls
tools/virt-tar
tools/virt-win-reg

index 8ec487d..4305b19 100644 (file)
@@ -1101,7 +1101,8 @@ like:
    '/dev/VG/Root' => \%os,
  }
 
-(There can be multiple roots for a multi-boot VM).
+There can be multiple roots for a multi-boot VM, but this function
+will throw an error if no roots (ie. OSes) could be found.
 
 The C<\%os> hash contains the following keys (any can be omitted):
 
@@ -1184,6 +1185,11 @@ sub inspect_operating_systems
         }
     }
 
+    # If we didn't find any operating systems then it's an error (RHBZ#591142).
+    if (0 == keys %oses) {
+        die __"No operating system could be detected inside this disk image.\n\nThis may be because the file is not a disk image, or is not a virtual machine\nimage, or because the OS type is not understood by virt-inspector.\n\nIf you feel this is an error, please file a bug report including as much\ninformation about the disk image as possible.\n";
+    }
+
     return \%oses;
 }
 
index c8cdd19..e000e25 100755 (executable)
@@ -150,7 +150,6 @@ my %fses =
 my $oses = inspect_operating_systems ($g, \%fses);
 
 my @roots = keys %$oses;
-die __"no root device found in this operating system image" if @roots == 0;
 die __"multiboot operating systems are not supported by virt-cat" if @roots > 1;
 my $root_dev = $roots[0];
 
index c133e6a..e00e4cf 100755 (executable)
@@ -133,7 +133,6 @@ my %fses =
 my $oses = inspect_operating_systems ($g, \%fses);
 
 my @roots = keys %$oses;
-die __"no root device found in this operating system image" if @roots == 0;
 die __"multiboot operating systems are not supported by virt-edit" if @roots > 1;
 my $root_dev = $roots[0];
 
index 8add52e..8813d2f 100755 (executable)
@@ -183,7 +183,6 @@ my %fses =
 my $oses = inspect_operating_systems ($g, \%fses);
 
 my @roots = keys %$oses;
-die __"no root device found in this operating system image\n" if @roots == 0;
 die __"multiboot operating systems are not supported by virt-ls\n" if @roots > 1;
 my $root_dev = $roots[0];
 
index 612b500..1470ee0 100755 (executable)
@@ -225,7 +225,6 @@ my %fses =
 my $oses = inspect_operating_systems ($g, \%fses);
 
 my @roots = keys %$oses;
-die __"no root device found in this operating system image\n" if @roots == 0;
 die __"multiboot operating systems are not supported by virt-tar\n" if @roots > 1;
 my $root_dev = $roots[0];
 
index 91a1673..c777a0a 100755 (executable)
@@ -280,7 +280,6 @@ my %fses =
 my $oses = inspect_operating_systems ($g, \%fses);
 
 my @roots = keys %$oses;
-die __"no root device found in this operating system image" if @roots == 0;
 die __"multiboot operating systems are not supported by virt-win-reg" if @roots > 1;
 my $root_dev = $roots[0];