From aa9a8aedfbbca635eb34f168b8e04ba9730584f5 Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Tue, 29 Apr 2014 14:34:31 -0400 Subject: [PATCH] packageutils: Fix install when one package is already installed (bz 1090181) (cherry picked from commit 15449eb12601ec1b88aa6d8ee52986ef5ab41ae2) --- virtManager/packageutils.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/virtManager/packageutils.py b/virtManager/packageutils.py index 34478b7..bb84f45 100644 --- a/virtManager/packageutils.py +++ b/virtManager/packageutils.py @@ -53,7 +53,12 @@ def check_packagekit(parent, errbox, packages): return try: - packagekit_install(parent, packages) + for package in packages[:]: + if packagekit_isinstalled(package): + packages.remove(package) + + if packages: + packagekit_install(parent, packages) except Exception, e: # PackageKit frontend should report an error for us, so just log # the actual error @@ -63,6 +68,16 @@ def check_packagekit(parent, errbox, packages): return True +def packagekit_isinstalled(package): + bus = Gio.bus_get_sync(Gio.BusType.SESSION, None) + pk_control = Gio.DBusProxy.new_sync(bus, 0, None, + "org.freedesktop.PackageKit", + "/org/freedesktop/PackageKit", + "org.freedesktop.PackageKit.Query", None) + + return pk_control.IsInstalled("(ss)", package, "") + + def packagekit_install(parent, package_list): bus = Gio.bus_get_sync(Gio.BusType.SESSION, None) pk_control = Gio.DBusProxy.new_sync(bus, 0, None,