[Libguestfs] [PATCH 2/2] Don't die during inspection if rpm -qa or dpkg-query fails

Matthew Booth mbooth at redhat.com
Wed Apr 21 14:39:49 UTC 2010


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 |   28 ++++++++++++++++++++--------
 1 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/perl/lib/Sys/Guestfs/Lib.pm b/perl/lib/Sys/Guestfs/Lib.pm
index b5b3906..b6c4a31 100644
--- a/perl/lib/Sys/Guestfs/Lib.pm
+++ b/perl/lib/Sys/Guestfs/Lib.pm
@@ -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") {
-            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/^(.*) (.*) (.*) (.*) (.*)$/) {
@@ -1483,10 +1489,16 @@ sub _check_for_applications
                 }
             }
         } 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/^(.*) (.*) (.*) (.*) (.*) (.*)$/) {
-- 
1.6.6.1




More information about the Libguestfs mailing list