Don't die during inspection if rpm -qa or dpkg-query fails
authorMatthew Booth <mbooth@redhat.com>
Wed, 21 Apr 2010 14:39:49 +0000 (15:39 +0100)
committerRichard Jones <rjones@redhat.com>
Wed, 21 Apr 2010 15:51:20 +0000 (16:51 +0100)
If a problem in the package database prevented package enumeration from working,
inspection would die. This change makes it emit a warning and continue.

perl/lib/Sys/Guestfs/Lib.pm

index b5b3906..b6c4a31 100644 (file)
@@ -1463,10 +1463,16 @@ sub _check_for_applications
     if ($osn eq "linux") {
         my $package_format = $os->{package_format};
         if (defined $package_format && $package_format eq "rpm") {
     if ($osn eq "linux") {
         my $package_format = $os->{package_format};
         if (defined $package_format && $package_format eq "rpm") {
-            my @lines = $g->command_lines
-                (["rpm",
-                  "-q", "-a",
-                  "--qf", "%{name} %{epoch} %{version} %{release} %{arch}\n"]);
+            my @lines = ();
+            eval {
+                @lines = $g->command_lines
+                    (["rpm",
+                      "-q", "-a", "--qf",
+                      "%{name} %{epoch} %{version} %{release} %{arch}\n"]);
+            };
+
+            warn(__x("Error running rpm -qa: {error}", error => $@)) if ($@);
+
             @lines = sort @lines;
             foreach (@lines) {
                 if (m/^(.*) (.*) (.*) (.*) (.*)$/) {
             @lines = sort @lines;
             foreach (@lines) {
                 if (m/^(.*) (.*) (.*) (.*) (.*)$/) {
@@ -1483,10 +1489,16 @@ sub _check_for_applications
                 }
             }
         } elsif (defined $package_format && $package_format eq "deb") {
                 }
             }
         } elsif (defined $package_format && $package_format eq "deb") {
-            my @lines = $g->command_lines
-                (["dpkg-query",
-                  "-f", '${Package} ${Version} ${Architecture} ${Status}\n',
-                  "-W"]);
+            my @lines = ();
+            eval {
+                @lines = $g->command_lines
+                    (["dpkg-query",
+                      "-f", '${Package} ${Version} ${Architecture} ${Status}\n',
+                      "-W"]);
+            };
+
+            warn(__x("Error running dpkg-query: {error}", error => $@)) if ($@);
+
             @lines = sort @lines;
             foreach (@lines) {
                 if (m/^(.*) (.*) (.*) (.*) (.*) (.*)$/) {
             @lines = sort @lines;
             foreach (@lines) {
                 if (m/^(.*) (.*) (.*) (.*) (.*) (.*)$/) {