[PackageKit-commit] packagekit: Branch 'master' - 39 commits

Richard Hughes hughsient at kemper.freedesktop.org
Fri Dec 12 09:22:42 PST 2008


 backends/alpm/pk-backend-alpm.c        |  244 ++++---------
 backends/apt/Packages.test             |   71 ++++
 backends/apt/aptDBUSBackend.py         |   53 +-
 backends/apt/status.test               |   38 ++
 backends/apt/test.py                   |  156 --------
 backends/apt/test.sh                   |    2 
 backends/apt/tests.py                  |  155 ++++++++
 backends/apt/xterm.list.test           |   49 ++
 backends/yum/pk-backend-yum.c          |   15 
 backends/yum/yumBackend.py             |    7 
 client/pk-console.c                    |    5 
 configure.ac                           |    3 
 contrib/PackageKit.spec.in             |    1 
 docs/html/img/gpk-prefs.png            |binary
 etc/PackageKit.conf.in                 |    8 
 lib/packagekit-glib/pk-common.c        |   13 
 lib/packagekit-glib/pk-package-id.c    |   56 +++
 lib/packagekit-glib/pk-package-id.h    |    4 
 lib/python/packagekit/daemonBackend.py |    1 
 po/de.po                               |  382 ++++++++++-----------
 po/es.po                               |  585 ++++++++++++++-------------------
 src/pk-network-nm.c                    |  215 ++++++++++++
 22 files changed, 1196 insertions(+), 867 deletions(-)

New commits:
commit 779d271733c24efd005256158ff96e0826c79490
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Dec 12 17:07:01 2008 +0000

    trivial: update gpk-prefs screenshot

diff --git a/docs/html/img/gpk-prefs.png b/docs/html/img/gpk-prefs.png
index 4c1ed82..ba64279 100644
Binary files a/docs/html/img/gpk-prefs.png and b/docs/html/img/gpk-prefs.png differ
commit 8b6274d2f16ba45d7ab342866b85413b813a0e1c
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Dec 12 16:04:10 2008 +0000

    yum: clear the package sack before we get the updates list to ensure it's correct

diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 177af47..3aeec02 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -1950,7 +1950,10 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
         self.status(STATUS_INFO)
 
         # yum 'helpfully' keeps an array of updates available
-        self.yumbase._up = None
+        self.yumbase.up = None
+
+        # clear the package sack so we can get new updates
+        self.yumbase.pkgSack = None
 
         fltlist = filters.split(';')
         package_list = []
commit be68163d97756256f555537568e6c3a8e9d5de35
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Dec 12 16:02:37 2008 +0000

    feature: use NetworkManager to get the device type so we can return SLOW (GSM or CDMA) or FAST (ethernet) for session policy decisions

diff --git a/src/pk-network-nm.c b/src/pk-network-nm.c
index 18c42c0..84062af 100644
--- a/src/pk-network-nm.c
+++ b/src/pk-network-nm.c
@@ -37,6 +37,8 @@
 #include <fcntl.h>
 
 #include <glib/gi18n.h>
+#include <dbus/dbus-glib.h>
+#include <NetworkManager.h>
 #include <libnm_glib.h>
 
 #include "egg-debug.h"
@@ -45,10 +47,13 @@
 
 static void     pk_network_nm_class_init	(PkNetworkNmClass *klass);
 static void     pk_network_nm_init		(PkNetworkNm      *network_nm);
-static void     pk_network_nm_finalize		(GObject        *object);
+static void     pk_network_nm_finalize		(GObject          *object);
 
 #define PK_NETWORK_NM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PK_TYPE_NETWORK_NM, PkNetworkNmPrivate))
 
+/* experimental code */
+#define PK_NETWORK_NM_GET_CONNECTION_TYPE	1
+
 /**
  * PkNetworkNmPrivate:
  *
@@ -58,6 +63,7 @@ struct _PkNetworkNmPrivate
 {
 	libnm_glib_ctx		*ctx;
 	guint			 callback_id;
+	DBusGConnection		*bus;
 };
 
 enum {
@@ -70,6 +76,176 @@ static guint signals [PK_NETWORK_NM_LAST_SIGNAL] = { 0 };
 G_DEFINE_TYPE (PkNetworkNm, pk_network_nm, G_TYPE_OBJECT)
 
 /**
+ * pk_network_nm_prioritise_connection_type:
+ *
+ * GSM is more important than ethernet, so if we are using an
+ * important connection even bridged we should prioritise it
+ **/
+static NMDeviceType
+pk_network_nm_prioritise_connection_type (NMDeviceType type_old, NMDeviceType type_new)
+{
+	NMDeviceType type = type_old;
+	/* by sheer fluke we can use the enum ordering */
+	if (type_new > type_old)
+		type = type_new;
+	return type;
+}
+
+/**
+ * pk_network_nm_get_active_connection_type_for_device:
+ **/
+static NMDeviceType
+pk_network_nm_get_active_connection_type_for_device (PkNetworkNm *network_nm, const gchar *device)
+{
+	gboolean ret;
+	GError *error = NULL;
+	DBusGProxy *proxy;
+	GValue value = { 0 };
+	NMDeviceType type = NM_DEVICE_TYPE_UNKNOWN;
+
+	/* get if the device is default */
+	proxy = dbus_g_proxy_new_for_name (network_nm->priv->bus, "org.freedesktop.NetworkManager",
+					   device, "org.freedesktop.DBus.Properties");
+	ret = dbus_g_proxy_call (proxy, "Get", &error,
+				 G_TYPE_STRING, "org.freedesktop.NetworkManager.Device",
+				 G_TYPE_STRING, "DeviceType",
+				 G_TYPE_INVALID,
+				 G_TYPE_VALUE, &value,
+				 G_TYPE_INVALID);
+	if (!ret) {
+		g_warning ("Error getting DeviceType: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+	type = g_value_get_uint (&value);
+	egg_debug ("type: %i", type);
+out:
+	g_object_unref (proxy);
+	return type;
+}
+
+/**
+ * pk_network_nm_get_active_connection_type_for_connection:
+ **/
+static NMDeviceType
+pk_network_nm_get_active_connection_type_for_connection (PkNetworkNm *network_nm, const gchar *active_connection)
+{
+	guint i;
+	gboolean ret;
+	GError *error = NULL;
+	DBusGProxy *proxy;
+	const gchar *device;
+	GValue value_default = { 0 };
+	GValue value_devices = { 0 };
+	gboolean is_default;
+	GPtrArray *devices;
+	NMDeviceType type_tmp;
+	NMDeviceType type = NM_DEVICE_TYPE_UNKNOWN;
+
+
+	/* get if the device is default */
+	proxy = dbus_g_proxy_new_for_name (network_nm->priv->bus, "org.freedesktop.NetworkManager",
+					   active_connection, "org.freedesktop.DBus.Properties");
+	ret = dbus_g_proxy_call (proxy, "Get", &error,
+				 G_TYPE_STRING, "org.freedesktop.NetworkManager.Connection.Active",
+				 G_TYPE_STRING, "Default",
+				 G_TYPE_INVALID,
+				 G_TYPE_VALUE, &value_default,
+				 G_TYPE_INVALID);
+	if (!ret) {
+		g_warning ("Error getting Default: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+	is_default = g_value_get_boolean (&value_default);
+	egg_debug ("is_default: %i", is_default);
+	if (!is_default) {
+		egg_debug ("not default, skipping");
+		goto out;
+	}
+
+	/* get the physical devices for the connection */
+	ret = dbus_g_proxy_call (proxy, "Get", &error,
+				 G_TYPE_STRING, "org.freedesktop.NetworkManager.Connection.Active",
+				 G_TYPE_STRING, "Devices",
+				 G_TYPE_INVALID,
+				 G_TYPE_VALUE, &value_devices,
+				 G_TYPE_INVALID);
+	if (!ret) {
+		g_warning ("Error getting Devices: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	devices = g_value_get_boxed (&value_devices);
+	egg_debug ("number of devices: %i", devices->len);
+	if (devices->len == 0)
+		goto out;
+
+	/* find the types of the active connection */
+	for (i=0; i<devices->len; i++) {
+		device = g_ptr_array_index (devices, i);
+		type_tmp = pk_network_nm_get_active_connection_type_for_device (network_nm, device);
+		type = pk_network_nm_prioritise_connection_type (type, type_tmp);
+	}
+
+out:
+	g_object_unref (proxy);
+	return type;
+}
+
+/**
+ * pk_network_nm_get_active_connection_type:
+ **/
+static NMDeviceType
+pk_network_nm_get_active_connection_type (PkNetworkNm *network_nm)
+{
+	guint i;
+	gboolean ret;
+	DBusGProxy *proxy;
+	GError *error = NULL;
+	GPtrArray *active_connections = NULL;
+	const gchar *active_connection;
+	GValue value = { 0 };
+	NMDeviceType type_tmp;
+	NMDeviceType type = NM_DEVICE_TYPE_UNKNOWN;
+
+	/* get proxy */
+	proxy = dbus_g_proxy_new_for_name (network_nm->priv->bus, "org.freedesktop.NetworkManager",
+					   "/org/freedesktop/NetworkManager",
+					   "org.freedesktop.DBus.Properties");
+	ret = dbus_g_proxy_call (proxy, "Get", &error,
+				 G_TYPE_STRING, "org.freedesktop.NetworkManager",
+				 G_TYPE_STRING, "ActiveConnections",
+				 G_TYPE_INVALID,
+				 G_TYPE_VALUE, &value,
+				 G_TYPE_INVALID);
+	if (!ret) {
+		g_warning ("Error getting ActiveConnections: %s", error->message);
+		g_error_free (error);
+		goto out;
+	}
+
+	active_connections = g_value_get_boxed (&value);
+	egg_debug ("active connections: %i", active_connections->len);
+	if (active_connections->len == 0)
+		goto out;
+
+	/* find the active connection */
+	for (i=0; i<active_connections->len; i++) {
+		active_connection = g_ptr_array_index (active_connections, i);
+		type_tmp = pk_network_nm_get_active_connection_type_for_connection (network_nm, active_connection);
+		type = pk_network_nm_prioritise_connection_type (type, type_tmp);
+	}
+
+out:
+	g_object_unref (proxy);
+	g_ptr_array_foreach (active_connections, (GFunc) g_free, NULL);
+	g_ptr_array_free (active_connections, TRUE);
+	return type;
+}
+
+/**
  * pk_network_nm_get_network_state:
  * @network_nm: a valid #PkNetworkNm instance
  *
@@ -78,11 +254,36 @@ G_DEFINE_TYPE (PkNetworkNm, pk_network_nm, G_TYPE_OBJECT)
 PkNetworkEnum
 pk_network_nm_get_network_state (PkNetworkNm *network_nm)
 {
-	libnm_glib_state state;
 	PkNetworkEnum ret;
+#ifdef PK_NETWORK_NM_GET_CONNECTION_TYPE
+	NMDeviceType type;
+#else
+	libnm_glib_state state;
+#endif
 
 	g_return_val_if_fail (PK_IS_NETWORK_NM (network_nm), PK_NETWORK_ENUM_UNKNOWN);
 
+#ifdef PK_NETWORK_NM_GET_CONNECTION_TYPE
+	/* get connection type */
+	type = pk_network_nm_get_active_connection_type (network_nm);
+	switch (type) {
+	case NM_DEVICE_TYPE_UNKNOWN:
+		ret = PK_NETWORK_ENUM_OFFLINE;
+		break;
+	case NM_DEVICE_TYPE_ETHERNET:
+		ret = PK_NETWORK_ENUM_FAST;
+		break;
+	case NM_DEVICE_TYPE_WIFI:
+		ret = PK_NETWORK_ENUM_ONLINE;
+		break;
+	case NM_DEVICE_TYPE_GSM:
+	case NM_DEVICE_TYPE_CDMA:
+		ret = PK_NETWORK_ENUM_SLOW;
+		break;
+	default:
+		ret = PK_NETWORK_ENUM_ONLINE;
+	}
+#else
 	state = libnm_glib_get_network_state (network_nm->priv->ctx);
 	switch (state) {
 	case LIBNM_NO_NETWORK_CONNECTION:
@@ -91,6 +292,8 @@ pk_network_nm_get_network_state (PkNetworkNm *network_nm)
 	default:
 		ret = PK_NETWORK_ENUM_ONLINE;
 	}
+#endif
+	egg_debug ("network state is %s", pk_network_enum_to_text (ret));
 	return ret;
 }
 
@@ -133,6 +336,7 @@ pk_network_nm_class_init (PkNetworkNmClass *klass)
 static void
 pk_network_nm_init (PkNetworkNm *network_nm)
 {
+	GError *error = NULL;
 	GMainContext *context;
 
 	network_nm->priv = PK_NETWORK_NM_GET_PRIVATE (network_nm);
@@ -142,6 +346,13 @@ pk_network_nm_init (PkNetworkNm *network_nm)
 		libnm_glib_register_callback (network_nm->priv->ctx,
 					      pk_network_nm_nm_changed_cb,
 					      network_nm, context);
+
+	/* get system connection */
+	network_nm->priv->bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
+	if (network_nm->priv->bus == NULL) {
+		egg_warning ("Couldn't connect to system bus: %s", error->message);
+		g_error_free (error);
+	}
 }
 
 /**
commit d4e7a90fab5cd686f3f6add1340db7144915f8a2
Merge: d02cb8b... 4e391ea...
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Dec 12 12:31:27 2008 +0000

    Merge branch 'master' of git+ssh://hughsie@git.packagekit.org/srv/git/PackageKit

commit d02cb8bb75f0d8fdc3311e66d174e92edfa8fd19
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Dec 12 11:56:54 2008 +0000

    trivial: add preupgrade to the fedora spec file

diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index 5c394d6..ae4116e 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -26,6 +26,7 @@ Requires: PackageKit-yum = %{version}-%{release}
 Requires: shared-mime-info
 Requires: python-sqlite2
 Requires: comps-extras
+Requires: preupgrade
 
 BuildRequires: glib2-devel >= %{glib2_version}
 BuildRequires: dbus-devel  >= %{dbus_version}
commit 4e391eaf043615d7eb99d8e2c915de221b228075
Author: Domingo Becker <domingobecker at gmail.com>
Date:   Fri Dec 12 11:44:48 2008 +0000

    updated Spanish translation
    
    Transmitted-via: Transifex (translate.fedoraproject.org)

diff --git a/po/es.po b/po/es.po
index 860ebaf..6ff6bcb 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: packagekit\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-19 16:26+0000\n"
-"PO-Revision-Date: 2008-10-27 09:04-0300\n"
+"POT-Creation-Date: 2008-11-24 01:31+0000\n"
+"PO-Revision-Date: 2008-12-12 09:37-0300\n"
 "Last-Translator: Domingo Becker <domingobecker at gmail.com>\n"
 "Language-Team: Spanish <fedora-trans-es at redhat.com>\n"
 "MIME-Version: 1.0\n"
@@ -17,516 +17,515 @@ msgstr ""
 "X-Poedit-Language: Spanish\n"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:286
+#: ../client/pk-console.c:287
 msgid "Details about the update:"
 msgstr "Detalles acerca de la actualización:"
 
-#: ../client/pk-console.c:479
+#: ../client/pk-console.c:480
 msgid "Please restart the computer to complete the update."
 msgstr "Por favor, reinicie la computadora para completar la actualización"
 
-#: ../client/pk-console.c:481
+#: ../client/pk-console.c:482
 msgid "Please logout and login to complete the update."
 msgstr "Por favor, salga y vuelva a entrar para completar la actualización."
 
-#: ../client/pk-console.c:483
+#: ../client/pk-console.c:484
 msgid "Please restart the application as it is being used."
 msgstr "Por favor, reinicie la aplicación que está usando."
 
 #. TRANSLATORS: The package is already installed on the system
-#: ../client/pk-console.c:595
+#: ../client/pk-console.c:596
 #, c-format
-msgid "The package '%s' is already installed"
-msgstr "El paquete '%s' ya está instalado"
+msgid "The package %s is already installed"
+msgstr "El paquete %s ya está instalado"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:603
+#: ../client/pk-console.c:604
 #, c-format
-msgid "The package '%s' could not be installed: %s"
-msgstr "El paquete '%s' no se pudo instalar: %s"
+msgid "The package %s could not be installed: %s"
+msgstr "El paquete %s no se pudo instalar: %s"
 
 #. TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows
-#: ../client/pk-console.c:628 ../client/pk-console.c:655
-#: ../client/pk-console.c:751 ../client/pk-console.c:868
-#: ../client/pk-tools-common.c:61 ../client/pk-tools-common.c:79
+#: ../client/pk-console.c:629
+#: ../client/pk-console.c:656
+#: ../client/pk-console.c:752
+#: ../client/pk-console.c:869
+#: ../client/pk-tools-common.c:61
+#: ../client/pk-tools-common.c:79
 #: ../client/pk-tools-common.c:86
 #, c-format
 msgid "Internal error: %s"
 msgstr "Error interno: %s"
 
 #. TRANSLATORS: There was an error installing the packages. The detailed error follows
-#: ../client/pk-console.c:636 ../client/pk-console.c:1263
+#: ../client/pk-console.c:637
+#: ../client/pk-console.c:1264
 #, c-format
 msgid "This tool could not install the packages: %s"
 msgstr "Esta herramienta no pudo instalar los paquetes: %s"
 
 #. TRANSLATORS: There was an error installing the files. The detailed error follows
-#: ../client/pk-console.c:663
+#: ../client/pk-console.c:664
 #, c-format
 msgid "This tool could not install the files: %s"
 msgstr "Esta herramienta no pudo instalar los archivos: %s"
 
 #. TRANSLATORS: The package name was not found in the installed list. The detailed error follows
-#: ../client/pk-console.c:719
+#: ../client/pk-console.c:720
 #, c-format
-msgid "This tool could not remove '%s': %s"
-msgstr "Esta herramienta no pudo eliminar '%s': %s"
+msgid "This tool could not remove %s: %s"
+msgstr "Esta herramienta no pudo eliminar %s: %s"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:742 ../client/pk-console.c:813
+#: ../client/pk-console.c:743
+#: ../client/pk-console.c:781
+#: ../client/pk-console.c:814
 #, c-format
 msgid "This tool could not remove the packages: %s"
 msgstr "Esta herramienta no pudo eliminar los paquetes: %s"
 
-#. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:780
-#, c-format
-msgid "This tool could not remove the packages: '%s'"
-msgstr "Esta herramienta no pudo eliminar los paquetes: '%s'"
-
 #. TRANSLATORS: When removing, we might have to remove other dependencies
-#: ../client/pk-console.c:792
+#: ../client/pk-console.c:793
 msgid "The following packages have to be removed:"
 msgstr "Los siguientes paquetes se eliminarán:"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:799
+#: ../client/pk-console.c:800
 msgid "Proceed removing additional packages?"
 msgstr "¿De acuerdo con eliminar los paquetes adicionales?"
 
 #. TRANSLATORS: We did not remove any packages
-#: ../client/pk-console.c:804
+#: ../client/pk-console.c:805
 msgid "The package removal was canceled!"
 msgstr "¡La eliminación de paquetes fue cancelada!"
 
 #. TRANSLATORS: The package name was not found in any software sources
-#: ../client/pk-console.c:845
+#: ../client/pk-console.c:846
 #, c-format
-msgid "This tool could not download the package '%s' as it could not be found"
-msgstr ""
-"Esta herramienta no pudo descargar el paquete '%s' debido a que no fue "
-"encontrado"
+msgid "This tool could not download the package %s as it could not be found"
+msgstr "Esta herramienta no pudo descargar el paquete %s debido a que no fue encontrado"
 
 #. TRANSLATORS: Could not download the packages for some reason. The detailed error follows
-#: ../client/pk-console.c:876
+#: ../client/pk-console.c:877
 #, c-format
 msgid "This tool could not download the packages: %s"
 msgstr "Esta herramienta no pudo descargar los paquetes: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:903 ../client/pk-console.c:912
+#: ../client/pk-console.c:904
+#: ../client/pk-console.c:913
 #, c-format
-msgid "This tool could not update '%s': %s"
-msgstr "Esta herramienta no pudo actualizar '%s': %s"
+msgid "This tool could not update %s: %s"
+msgstr "Esta herramienta no pudo actualizar %s: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:934 ../client/pk-console.c:942
+#: ../client/pk-console.c:935
+#: ../client/pk-console.c:943
 #, c-format
-msgid "This tool could not get the requirements for '%s': %s"
-msgstr "Esta herramienta no pudo obtener los requerimientos de '%s': %s"
+msgid "This tool could not get the requirements for %s: %s"
+msgstr "Esta herramienta no pudo obtener los requerimientos de %s: %s"
 
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
-#: ../client/pk-console.c:964 ../client/pk-console.c:972
+#: ../client/pk-console.c:965
+#: ../client/pk-console.c:973
 #, c-format
-msgid "This tool could not get the dependencies for '%s': %s"
-msgstr "Esta herramienta no pudo obtener las dependencias de '%s': %s"
+msgid "This tool could not get the dependencies for %s: %s"
+msgstr "Esta herramienta no pudo obtener las dependencias de %s: %s"
 
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
-#: ../client/pk-console.c:994 ../client/pk-console.c:1002
+#: ../client/pk-console.c:995
+#: ../client/pk-console.c:1003
 #, c-format
-msgid "This tool could not get package details for '%s': %s"
-msgstr "Esta herramienta no pudo obtener los detalles del paquete '%s': %s"
+msgid "This tool could not get package details for %s: %s"
+msgstr "Esta herramienta no pudo obtener los detalles del paquete %s: %s"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1024
+#: ../client/pk-console.c:1025
 #, c-format
-msgid "This tool could not find the files for '%s': %s"
-msgstr "Esta herramienta no pudo encontrar los archivos de '%s': %s"
+msgid "This tool could not find the files for %s: %s"
+msgstr "Esta herramienta no pudo encontrar los archivos de %s: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1032
+#: ../client/pk-console.c:1033
 #, c-format
-msgid "This tool could not get the file list for '%s': %s"
-msgstr "Esta herramienta no pudo obtener la lista de archivos de '%s': %s"
+msgid "This tool could not get the file list for %s: %s"
+msgstr "Esta herramienta no pudo obtener la lista de archivos de %s: %s"
 
 #. TRANSLATORS: There was an error getting the list of packages. The filename follows
-#: ../client/pk-console.c:1054
+#: ../client/pk-console.c:1055
 #, c-format
 msgid "File already exists: %s"
-msgstr ""
+msgstr "El archivo ya existe: %s"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1059 ../client/pk-console.c:1115
-#: ../client/pk-console.c:1190
-#, fuzzy
+#: ../client/pk-console.c:1060
+#: ../client/pk-console.c:1116
+#: ../client/pk-console.c:1191
 msgid "Getting package list"
-msgstr "Extrayendo información de paquetes..."
+msgstr "Obteniendo la lista de paquetes"
 
 #. TRANSLATORS: There was an error getting the list of packages. The detailed error follows
-#: ../client/pk-console.c:1065 ../client/pk-console.c:1121
-#: ../client/pk-console.c:1196
-#, fuzzy, c-format
+#: ../client/pk-console.c:1066
+#: ../client/pk-console.c:1122
+#: ../client/pk-console.c:1197
+#, c-format
 msgid "This tool could not get package list: %s"
-msgstr "Esta herramienta no pudo eliminar los paquetes: %s"
+msgstr "Esta herramienta no pudo obtener la lista de paquetes: %s"
 
 #. TRANSLATORS: There was an error saving the list
-#: ../client/pk-console.c:1076
-#, fuzzy, c-format
+#: ../client/pk-console.c:1077
 msgid "Failed to save to disk"
-msgstr "Fállo al obtener última hora"
+msgstr "Falló al guardar en el disco"
 
 #. TRANSLATORS: There was an error getting the list. The filename follows
-#: ../client/pk-console.c:1110 ../client/pk-console.c:1185
+#: ../client/pk-console.c:1111
+#: ../client/pk-console.c:1186
 #, c-format
 msgid "File does not exist: %s"
-msgstr ""
+msgstr "El archivo no existe: %s"
 
 #. TRANSLATORS: header to a list of packages newly added
-#: ../client/pk-console.c:1142
-#, fuzzy
+#: ../client/pk-console.c:1143
 msgid "Packages to add"
-msgstr "Monitor de PackageKit"
+msgstr "Paquetes a agregar"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1150
-#, fuzzy
+#: ../client/pk-console.c:1151
 msgid "Packages to remove"
-msgstr "Servicio PackageKit"
+msgstr "Paquetes a eliminar"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1218
-#, fuzzy, c-format
+#: ../client/pk-console.c:1219
 msgid "No new packages need to be installed"
-msgstr "El paquete '%s' no se pudo instalar: %s"
+msgstr "No hay paquetes nuevos para instalar"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1224
+#: ../client/pk-console.c:1225
 msgid "To install"
-msgstr ""
+msgstr "A instalar"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1235
+#: ../client/pk-console.c:1236
 msgid "Searching for package: "
-msgstr ""
+msgstr "Buscando el paquete:"
 
 #. TRANSLATORS: package was not found -- this is the end of a string ended in ...
-#: ../client/pk-console.c:1239
-#, fuzzy
+#: ../client/pk-console.c:1240
 msgid "not found."
-msgstr "Directorio no encontrado"
+msgstr "no encontrado."
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1250
-#, fuzzy, c-format
+#: ../client/pk-console.c:1251
 msgid "No packages can be found to install"
-msgstr "No se encontró ningún paquete para su sistema"
+msgstr "No se encontró ningún paquete para instalar"
 
 #. TRANSLATORS: installing new packages from package list
-#: ../client/pk-console.c:1256
-#, fuzzy
+#: ../client/pk-console.c:1257
 msgid "Installing packages"
-msgstr "Instalar paquete"
+msgstr "Instalando paquetes"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1292
+#: ../client/pk-console.c:1293
 #, c-format
-msgid "This tool could not find the update details for '%s': %s"
-msgstr "Esta herramienta no pudo encontrar los detalles de '%s': %s"
+msgid "This tool could not find the update details for %s: %s"
+msgstr "Esta herramienta no pudo encontrar los detalles de actualización de %s: %s"
 
 #. TRANSLATORS: There was an error getting the details about the update for the package. The detailed error follows
-#: ../client/pk-console.c:1300
+#: ../client/pk-console.c:1301
 #, c-format
-msgid "This tool could not get the update details for '%s': %s"
-msgstr ""
-"Esta herramienta no pudo obtener los detalles de actualización de '%s': %s"
+msgid "This tool could not get the update details for %s: %s"
+msgstr "Esta herramienta no pudo obtener los detalles de actualización de %s: %s"
 
 #. TRANSLATORS: This was an unhandled error, and we don't have _any_ context
-#: ../client/pk-console.c:1346
+#: ../client/pk-console.c:1347
 msgid "Error:"
 msgstr "Error:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1360
+#: ../client/pk-console.c:1361
 msgid "Package description"
 msgstr "Descripción del paquete"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1393
+#: ../client/pk-console.c:1394
 msgid "Package files"
 msgstr "Archivos del paquete"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1402
+#: ../client/pk-console.c:1403
 msgid "No files"
 msgstr "No hay archivos"
 
 #. TRANSLATORS: This a request for a GPG key signature from the backend, which the client will prompt for later
-#: ../client/pk-console.c:1425
+#: ../client/pk-console.c:1426
 msgid "Repository signature required"
 msgstr "Se requiere la firma del repositorio"
 
 #. TRANSLATORS: This a prompt asking the user to import the security key
-#: ../client/pk-console.c:1435
+#: ../client/pk-console.c:1436
 msgid "Do you accept this signature?"
 msgstr "¿Acepta esta firma?"
 
 #. TRANSLATORS: This is where the user declined the security key
-#: ../client/pk-console.c:1439
+#: ../client/pk-console.c:1440
 msgid "The signature was not accepted."
 msgstr "La firma no fue aceptada."
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1473
+#: ../client/pk-console.c:1474
 msgid "End user license agreement required"
 msgstr "Se requiere un acuerdo de licencia de usuario final"
 
 #. TRANSLATORS: This a prompt asking the user to agree to the license
-#: ../client/pk-console.c:1480
+#: ../client/pk-console.c:1481
 msgid "Do you agree to this license?"
 msgstr "¿Está de acuerdo con esta licencia?"
 
 #. TRANSLATORS: This is where the user declined the license
-#: ../client/pk-console.c:1484
+#: ../client/pk-console.c:1485
 msgid "The license was refused."
 msgstr "La licencia fue rechazada."
 
 #. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1513
+#: ../client/pk-console.c:1514
 msgid "The daemon crashed mid-transaction!"
 msgstr "El servicio terminó en medio de una transacción!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1566
+#: ../client/pk-console.c:1567
 msgid "PackageKit Console Interface"
 msgstr "Interfaz de Consola de PackageKit"
 
-#: ../client/pk-console.c:1566
+#: ../client/pk-console.c:1567
 msgid "Subcommands:"
 msgstr "Subcomandos:"
 
-#: ../client/pk-console.c:1657 ../client/pk-generate-pack.c:183
-#: ../client/pk-monitor.c:114 ../src/pk-main.c:196
+#: ../client/pk-console.c:1658
+#: ../client/pk-generate-pack.c:184
+#: ../client/pk-monitor.c:115
+#: ../src/pk-main.c:191
 msgid "Show extra debugging information"
 msgstr "Mostrar información extra de depuración"
 
-#: ../client/pk-console.c:1659 ../client/pk-monitor.c:116
+#: ../client/pk-console.c:1660
+#: ../client/pk-monitor.c:117
 msgid "Show the program version and exit"
 msgstr "Mostrar la versión del programa y salir"
 
-#: ../client/pk-console.c:1661
+#: ../client/pk-console.c:1662
 msgid "Set the filter, e.g. installed"
 msgstr "Defina el filtro, ej. installado"
 
-#: ../client/pk-console.c:1663
+#: ../client/pk-console.c:1664
 msgid "Exit without waiting for actions to complete"
 msgstr "Salir sin esperar que las acciones se completen"
 
 #. TRANSLATORS: This is when we could not connect to the system bus, and is fatal
-#: ../client/pk-console.c:1685
+#: ../client/pk-console.c:1691
 msgid "This tool could not connect to system DBUS."
 msgstr "Esta herramienta no se pudo conectar al DBUS del sistema."
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1770
+#: ../client/pk-console.c:1776
 msgid "The filter specified was invalid"
-msgstr ""
+msgstr "El filtro especificado fue inválido"
 
-#: ../client/pk-console.c:1787
+#: ../client/pk-console.c:1793
 msgid "You need to specify a search type, e.g. name"
 msgstr "Debe especificar el tipo de búsqueda, por ejemplo, nombre"
 
-#: ../client/pk-console.c:1792 ../client/pk-console.c:1799
-#: ../client/pk-console.c:1806 ../client/pk-console.c:1813
-#: ../client/pk-console.c:1924 ../client/pk-console.c:1934
-#: ../client/pk-console.c:1941 ../client/pk-console.c:1948
+#: ../client/pk-console.c:1798
+#: ../client/pk-console.c:1805
+#: ../client/pk-console.c:1812
+#: ../client/pk-console.c:1819
+#: ../client/pk-console.c:1930
+#: ../client/pk-console.c:1940
+#: ../client/pk-console.c:1947
+#: ../client/pk-console.c:1954
 msgid "You need to specify a search term"
 msgstr "Debe especificar un término de búsqueda"
 
-#: ../client/pk-console.c:1818
+#: ../client/pk-console.c:1824
 msgid "Invalid search type"
 msgstr "Tipo de búsqueda inválido"
 
-#: ../client/pk-console.c:1823
+#: ../client/pk-console.c:1829
 msgid "You need to specify a package or file to install"
 msgstr "Debe especificar un paquete o archivo a instalar"
 
-#: ../client/pk-console.c:1830
+#: ../client/pk-console.c:1836
 msgid "You need to specify a type, key_id and package_id"
 msgstr "Debe especificar un tipo, key_id y package_id"
 
-#: ../client/pk-console.c:1837
+#: ../client/pk-console.c:1843
 msgid "You need to specify a package to remove"
 msgstr "Debe especificar un paquete a eliminar"
 
-#: ../client/pk-console.c:1843
-msgid ""
-"You need to specify the destination directory and then the packages to "
-"download"
-msgstr ""
-"Debe especificar el directorio destino y luego los paquetes a descargar"
+#: ../client/pk-console.c:1849
+msgid "You need to specify the destination directory and then the packages to download"
+msgstr "Debe especificar el directorio destino y luego los paquetes a descargar"
 
-#: ../client/pk-console.c:1848
+#: ../client/pk-console.c:1854
 msgid "Directory not found"
 msgstr "Directorio no encontrado"
 
-#: ../client/pk-console.c:1854
+#: ../client/pk-console.c:1860
 msgid "You need to specify a licence identifier (eula-id)"
 msgstr "Debe especificar un identificador de licencia (eula-id)"
 
-#: ../client/pk-console.c:1870
+#: ../client/pk-console.c:1876
 msgid "You need to specify a package name to resolve"
 msgstr "Debe especificar un nombre de paquete a resolver"
 
-#: ../client/pk-console.c:1879 ../client/pk-console.c:1886
+#: ../client/pk-console.c:1885
+#: ../client/pk-console.c:1892
 msgid "You need to specify a repository name"
 msgstr "Debe especificar un nombre de repositorio"
 
-#: ../client/pk-console.c:1893
+#: ../client/pk-console.c:1899
 msgid "You need to specify a repo name/parameter and value"
 msgstr "Debe especificar un nombre/parametro de repositorio y valor"
 
-#: ../client/pk-console.c:1906
+#: ../client/pk-console.c:1912
 msgid "You need to specify an action, e.g. 'update-system'"
 msgstr "Debe especificar una acción, por ejemplo, 'update-system'"
 
-#: ../client/pk-console.c:1911
+#: ../client/pk-console.c:1917
 msgid "You need to specify a correct role"
 msgstr "Debe especificar un rol correcto"
 
-#: ../client/pk-console.c:1916
+#: ../client/pk-console.c:1922
 msgid "Failed to get last time"
 msgstr "Fállo al obtener última hora"
 
-#: ../client/pk-console.c:1955
+#: ../client/pk-console.c:1961
 msgid "You need to specify a package to find the details for"
 msgstr "Debe especificar un paquete para el que buscar la descripción"
 
-#: ../client/pk-console.c:1962
+#: ../client/pk-console.c:1968
 msgid "You need to specify a package to find the files for"
 msgstr "Debe especificar un paquete para el que buscar los archivos"
 
-#: ../client/pk-console.c:1969
-#, fuzzy
+#: ../client/pk-console.c:1975
 msgid "You need to specify a list file to create"
-msgstr "Debe especificar un término de tiempo"
+msgstr "Debe especificar un archivo de lista a crear"
 
-#: ../client/pk-console.c:1977 ../client/pk-console.c:1985
-#, fuzzy
+#: ../client/pk-console.c:1983
+#: ../client/pk-console.c:1991
 msgid "You need to specify a list file to open"
-msgstr "Debe especificar un término de tiempo"
+msgstr "Debe especificar un archivo de lista a abrir"
 
 #. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:2038
+#: ../client/pk-console.c:2044
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "La opción '%s' no está soportada"
 
 #. TRANSLATORS: User does not have permission to do this
-#: ../client/pk-console.c:2051
+#: ../client/pk-console.c:2057
 msgid "You don't have the necessary privileges for this operation"
 msgstr "No tiene los privilegios necesarios para esta operación"
 
 #. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:2054
+#: ../client/pk-console.c:2060
 msgid "Command failed"
 msgstr "Commando falló"
 
 #. TRANSLATORS: This is the state of the transaction
-#: ../client/pk-generate-pack.c:99
+#: ../client/pk-generate-pack.c:100
 msgid "Downloading"
 msgstr "Descargando"
 
 #. TRANSLATORS: This is when the main packages are being downloaded
-#: ../client/pk-generate-pack.c:119
+#: ../client/pk-generate-pack.c:120
 msgid "Downloading packages"
 msgstr "Descargando paquetes"
 
 #. TRANSLATORS: This is when the dependency packages are being downloaded
-#: ../client/pk-generate-pack.c:124
+#: ../client/pk-generate-pack.c:125
 msgid "Downloading dependencies"
 msgstr "Descargando dependencias"
 
-#: ../client/pk-generate-pack.c:185
+#: ../client/pk-generate-pack.c:186
 msgid "Set the file name of dependencies to be excluded"
 msgstr "Ponga el nombre del archivo de dependencias a excluir"
 
-#: ../client/pk-generate-pack.c:187
+#: ../client/pk-generate-pack.c:188
 msgid "The output directory (the current directory is used if ommitted)"
 msgstr "El directorio de salida (el directorio actual se usará si se omite)"
 
-#: ../client/pk-generate-pack.c:189
+#: ../client/pk-generate-pack.c:190
 msgid "The package to be put into the service pack"
 msgstr "El paquete será puesto en el paquete de servicio"
 
-#: ../client/pk-generate-pack.c:191
+#: ../client/pk-generate-pack.c:192
 msgid "Put all updates available in the service pack"
 msgstr "Poner todas las actualizaciones disponibles en el paquete de servicio"
 
 #. TRANSLATORS: This is when the user fails to supply the correct arguments
-#: ../client/pk-generate-pack.c:214
+#: ../client/pk-generate-pack.c:220
 msgid "Neither --package or --updates option selected."
 msgstr "No se seleccionó ni la opción --package o --updates."
 
 #. TRANSLATORS: This is when the user fails to supply just one argument
-#: ../client/pk-generate-pack.c:222
+#: ../client/pk-generate-pack.c:228
 msgid "Both options selected."
 msgstr "Se seleccionaron ambas opciones."
 
 #. TRANSLATORS: This is when file already exists
-#: ../client/pk-generate-pack.c:255
+#: ../client/pk-generate-pack.c:261
 msgid "A pack with the same name already exists, do you want to overwrite it?"
 msgstr "Ya existe un paquete con ese nombre, ¿desea sobreescribirlo ?"
 
 #. TRANSLATORS: This is when the pack was not overwritten
-#: ../client/pk-generate-pack.c:258
+#: ../client/pk-generate-pack.c:264
 msgid "The pack was not overwritten."
 msgstr "El paquete no fue sobrescrito."
 
 #. TRANSLATORS: This is when the temporary directory cannot be created, the directory name follows
-#: ../client/pk-generate-pack.c:270
+#: ../client/pk-generate-pack.c:276
 msgid "Failed to create directory:"
 msgstr "No se pudo crear el directorio:"
 
 #. TRANSLATORS: This is when the list of packages from the remote computer cannot be opened
-#: ../client/pk-generate-pack.c:279
+#: ../client/pk-generate-pack.c:285
 msgid "Failed to open package list."
 msgstr "Falló al abrir la lista de paquetes."
 
 #. TRANSLATORS: The package name is being matched up to available packages
-#: ../client/pk-generate-pack.c:289
+#: ../client/pk-generate-pack.c:295
 msgid "Finding package name."
 msgstr "Buscando el nombre de paquete."
 
 #. TRANSLATORS: This is when the package cannot be found in any software source. The detailed error follows
-#: ../client/pk-generate-pack.c:293
+#: ../client/pk-generate-pack.c:299
 #, c-format
 msgid "Failed to find package '%s': %s"
 msgstr "Falló al buscar el paquete '%s': %s"
 
 #. TRANSLATORS: This is telling the user we are in the process of making the pack
-#: ../client/pk-generate-pack.c:309
+#: ../client/pk-generate-pack.c:315
 msgid "Creating service pack..."
 msgstr "Creando el paquete de servicios..."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:316
+#: ../client/pk-generate-pack.c:322
 #, c-format
 msgid "Service pack created '%s'"
 msgstr "El paqute de servicio '%s' fue creado"
 
 #. TRANSLATORS: we failed to make te file
-#: ../client/pk-generate-pack.c:320
+#: ../client/pk-generate-pack.c:326
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "Falló al crear '%s': %s"
 
-#: ../client/pk-monitor.c:126
+#: ../client/pk-monitor.c:132
 msgid "PackageKit Monitor"
 msgstr "Monitor de PackageKit"
 
 #. TRANSLATORS: The package was not found in any software sources
 #: ../client/pk-tools-common.c:114
-#, c-format
 msgid "The package could not be found"
 msgstr "No se pudo encontrar el paquete"
 
@@ -546,55 +545,55 @@ msgid "Please enter a number from 1 to %i: "
 msgstr "Por favor ingrese un número de 1 a %i:"
 
 #. TRANSLATORS: when we are getting data from the daemon
-#: ../contrib/packagekit-plugin/src/contents.cpp:291
+#: ../contrib/packagekit-plugin/src/contents.cpp:294
 msgid "Getting package information..."
 msgstr "Extrayendo información de paquetes..."
 
 #. TRANSLATORS: run an applicaiton
-#: ../contrib/packagekit-plugin/src/contents.cpp:297
+#: ../contrib/packagekit-plugin/src/contents.cpp:300
 #, c-format
 msgid "Run %s"
 msgstr "Ejecutar %s"
 
 #. TRANSLATORS: show the installed version of a package
-#: ../contrib/packagekit-plugin/src/contents.cpp:303
+#: ../contrib/packagekit-plugin/src/contents.cpp:306
 msgid "Installed version"
 msgstr "Versión instalada"
 
 #. TRANSLATORS: run the application now
-#: ../contrib/packagekit-plugin/src/contents.cpp:311
+#: ../contrib/packagekit-plugin/src/contents.cpp:314
 #, c-format
 msgid "Run version %s now"
 msgstr "Correr la versión %s ahora"
 
-#: ../contrib/packagekit-plugin/src/contents.cpp:317
+#: ../contrib/packagekit-plugin/src/contents.cpp:320
 msgid "Run now"
 msgstr "Correr ahora"
 
 #. TRANSLATORS: update to a new version of the package
-#: ../contrib/packagekit-plugin/src/contents.cpp:323
+#: ../contrib/packagekit-plugin/src/contents.cpp:326
 #, c-format
 msgid "Update to version %s"
 msgstr "Actualizar a la versión %s"
 
 #. TRANSLATORS: To install a package
-#: ../contrib/packagekit-plugin/src/contents.cpp:329
+#: ../contrib/packagekit-plugin/src/contents.cpp:332
 #, c-format
 msgid "Install %s now"
 msgstr "Instalar %s ahora"
 
 #. TRANSLATORS: the version of the package
-#: ../contrib/packagekit-plugin/src/contents.cpp:332
+#: ../contrib/packagekit-plugin/src/contents.cpp:335
 msgid "Version"
 msgstr "Versión"
 
 #. TRANSLATORS: noting found, so can't install
-#: ../contrib/packagekit-plugin/src/contents.cpp:337
+#: ../contrib/packagekit-plugin/src/contents.cpp:340
 msgid "No packages found for your system"
 msgstr "No se encontró ningún paquete para su sistema"
 
 #. TRANSLATORS: package is being installed
-#: ../contrib/packagekit-plugin/src/contents.cpp:342
+#: ../contrib/packagekit-plugin/src/contents.cpp:345
 msgid "Installing..."
 msgstr "Instalando..."
 
@@ -610,194 +609,141 @@ msgstr "Grupo de Servicio de PackageKit"
 msgid "PackageKit Package List"
 msgstr "Lista de Paquetes de PackageKit"
 
-#: ../policy/org.freedesktop.packagekit.policy.in.h:1
-msgid "Accept EULA"
-msgstr "Aceptar EULA"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:2
-msgid "Authentication is required to accept a EULA"
-msgstr "Se requiere autenticación para aceptar una EULA"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:3
-msgid "Authentication is required to change software source parameters"
-msgstr ""
-"Se requiere autenticación para cambiar los parametros de fuente de software"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:4
-#, fuzzy
-msgid ""
-"Authentication is required to consider a key used for signing packages as "
-"trusted"
-msgstr "Se requiere autenticación para refrescar la lista de paquetes"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:5
-#, fuzzy
-msgid "Authentication is required to install a signed package"
-msgstr "Se requiere autenticación para instalar un paquete"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:6
-#, fuzzy
-msgid "Authentication is required to install an untrusted package"
-msgstr "Se requiere autenticación para instalar un paquete"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:7
-#, fuzzy
-msgid "Authentication is required to refresh the system sources"
-msgstr "Se requiere autenticación para refrescar la lista de paquetes"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:8
-msgid "Authentication is required to remove packages"
-msgstr "Se requiere autenticación para eliminar paquetes"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:9
-msgid "Authentication is required to rollback a transaction"
-msgstr "Se requiere autenticación para deshacer una transaccion"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:10
-#, fuzzy
-msgid ""
-"Authentication is required to set the network proxy used for downloading "
-"packages"
-msgstr "Se requiere autenticación para eliminar paquetes"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:11
-msgid "Authentication is required to update packages"
-msgstr "Se requiere autenticación para actualizar paquetes"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:12
-msgid "Change software source parameters"
-msgstr "Cambiar los parametros de fuente de software"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:13
-msgid "Install local file"
-msgstr "Instalar archivo local"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:14
-#, fuzzy
-msgid "Install untrusted local file"
-msgstr "Instalar archivo local"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:15
-msgid "Refresh system sources"
-msgstr ""
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:16
-msgid "Remove package"
-msgstr "Eliminar paquete"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:17
-msgid "Rollback to a previous transaction"
-msgstr "Deshacer hasta una transaccion previa"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:18
-msgid "Set network proxy"
-msgstr ""
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:19
-msgid "Trust a key used for signing packages"
-msgstr ""
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:20
-#, fuzzy
-msgid "Update packages"
-msgstr "Actualizar paquete"
-
-#: ../src/pk-main.c:85
+#: ../src/pk-main.c:86
 msgid "Startup failed due to security policies on this machine."
 msgstr "El arranque falló debito a políticas de seguridad en esta máquina."
 
-#: ../src/pk-main.c:86
+#: ../src/pk-main.c:87
 msgid "This can happen for two reasons:"
 msgstr "Esto puede pasar por dos razones:"
 
-#: ../src/pk-main.c:87
+#: ../src/pk-main.c:88
 msgid "The correct user is not launching the executable (usually root)"
 msgstr "El usuario correcto no esta lanzando el ejecutable (usualmente root)"
 
-#: ../src/pk-main.c:88
-msgid ""
-"The org.freedesktop.PackageKit.conf file is not installed in the system "
-"directory:"
-msgstr ""
-"El archivo org.freedesktop.PackageKit.conf no está instalado en el "
-"directorio del sistema:"
+#: ../src/pk-main.c:89
+msgid "The org.freedesktop.PackageKit.conf file is not installed in the system directory:"
+msgstr "El archivo org.freedesktop.PackageKit.conf no está instalado en el directorio del sistema:"
 
-#: ../src/pk-main.c:192
+#: ../src/pk-main.c:187
 msgid "Packaging backend to use, e.g. dummy"
 msgstr "Administrador de paquetes a usar, ej. dummy"
 
-#: ../src/pk-main.c:194
+#: ../src/pk-main.c:189
 msgid "Daemonize and detach from the terminal"
 msgstr "Demonizar y desadjuntar de la terminal"
 
-#: ../src/pk-main.c:198
+#: ../src/pk-main.c:193
 msgid "Disable the idle timer"
 msgstr "Deshabilitar el idle timer"
 
-#: ../src/pk-main.c:200
+#: ../src/pk-main.c:195
 msgid "Show version and exit"
 msgstr "Mostrar version y salir"
 
-#: ../src/pk-main.c:202
+#: ../src/pk-main.c:197
 msgid "Exit after a small delay"
 msgstr "Salir luego de una pequeña pausa"
 
-#: ../src/pk-main.c:204
+#: ../src/pk-main.c:199
 msgid "Exit after the engine has loaded"
 msgstr "Salir luego de que el motor este cargado"
 
-#: ../src/pk-main.c:214
+#: ../src/pk-main.c:213
 msgid "PackageKit service"
 msgstr "Servicio PackageKit"
 
-#: ../src/pk-main.c:250
+#: ../src/pk-main.c:249
 msgid "Cannot connect to the system bus"
 msgstr "No se pudo conectar al bus del sistema"
 
-#: ../src/pk-main.c:296
+#: ../src/pk-main.c:298
 #, c-format
 msgid "Error trying to start: %s\n"
 msgstr "Error intentando arrancar: %s\n"
 
+#~ msgid "This tool could not remove the packages: '%s'"
+#~ msgstr "Esta herramienta no pudo eliminar los paquetes: '%s'"
+#~ msgid "Accept EULA"
+#~ msgstr "Aceptar EULA"
+#~ msgid "Authentication is required to accept a EULA"
+#~ msgstr "Se requiere autenticación para aceptar una EULA"
+#~ msgid "Authentication is required to change software source parameters"
+#~ msgstr ""
+#~ "Se requiere autenticación para cambiar los parametros de fuente de "
+#~ "software"
+
+#, fuzzy
+#~ msgid ""
+#~ "Authentication is required to consider a key used for signing packages as "
+#~ "trusted"
+#~ msgstr "Se requiere autenticación para refrescar la lista de paquetes"
+
+#, fuzzy
+#~ msgid "Authentication is required to install a signed package"
+#~ msgstr "Se requiere autenticación para instalar un paquete"
+
+#, fuzzy
+#~ msgid "Authentication is required to install an untrusted package"
+#~ msgstr "Se requiere autenticación para instalar un paquete"
+
+#, fuzzy
+#~ msgid "Authentication is required to refresh the system sources"
+#~ msgstr "Se requiere autenticación para refrescar la lista de paquetes"
+#~ msgid "Authentication is required to remove packages"
+#~ msgstr "Se requiere autenticación para eliminar paquetes"
+#~ msgid "Authentication is required to rollback a transaction"
+#~ msgstr "Se requiere autenticación para deshacer una transaccion"
+
+#, fuzzy
+#~ msgid ""
+#~ "Authentication is required to set the network proxy used for downloading "
+#~ "packages"
+#~ msgstr "Se requiere autenticación para eliminar paquetes"
+#~ msgid "Authentication is required to update packages"
+#~ msgstr "Se requiere autenticación para actualizar paquetes"
+#~ msgid "Change software source parameters"
+#~ msgstr "Cambiar los parametros de fuente de software"
+#~ msgid "Install local file"
+#~ msgstr "Instalar archivo local"
+
+#, fuzzy
+#~ msgid "Install untrusted local file"
+#~ msgstr "Instalar archivo local"
+#~ msgid "Remove package"
+#~ msgstr "Eliminar paquete"
+#~ msgid "Rollback to a previous transaction"
+#~ msgstr "Deshacer hasta una transaccion previa"
+
+#, fuzzy
+#~ msgid "Update packages"
+#~ msgstr "Actualizar paquete"
 #~ msgid "Okay to import key?"
 #~ msgstr "¿De acuerto con importer la clave?"
-
 #~ msgid "Did not import key"
 #~ msgstr "No se importó la clave"
-
 #~ msgid "Do you agree?"
 #~ msgstr "¿Está de acuerdo?"
-
 #~ msgid "Update detail"
 #~ msgstr "Actualizar detalle"
-
 #~ msgid "A system restart is required"
 #~ msgstr "Se requiere reiniciar el sistema"
-
 #~ msgid "A logout and login is required"
 #~ msgstr "Se requiere reiniciar la sesión"
-
 #~ msgid "An application restart is required"
 #~ msgstr "Se requiere reiniciar una aplicación"
-
 #~ msgid "Could not find package to install"
 #~ msgstr "No se pudo encontrar un paquete para instalar"
-
 #~ msgid "Could not find package to remove"
 #~ msgstr "No se pudo encontrar el paquete a eliminar"
-
 #~ msgid "Cancelled!"
 #~ msgstr "Cancelado!"
-
 #~ msgid "Could not find package to update"
 #~ msgstr "No se pudo encontrar el paquete a actualizar"
-
 #~ msgid "Could not find what packages require"
 #~ msgstr "No se pudo encontrar cuales paquetes requiere este paquete"
-
 #~ msgid "Could not find details for"
 #~ msgstr "No se pudieron obtener los detalles de "
-
 #~ msgid "Could not find a package match"
 #~ msgstr "No se pudo encontrar un paquete coincidente"
 
@@ -808,103 +754,80 @@ msgstr "Error intentando arrancar: %s\n"
 #, fuzzy
 #~ msgid "Could not set database readonly"
 #~ msgstr "No se pudo abrir la base de datos: %s"
-
 #~ msgid "Could not open database: %s"
 #~ msgstr "No se pudo abrir la base de datos: %s"
-
 #~ msgid "You probably need to run this program as the root user"
 #~ msgstr "Probablemente necesita ejecutar este programa como el usuario root"
-
 #~ msgid "<span color='#%06x' underline='single' size='larger'>Run %s</span>"
 #~ msgstr ""
 #~ "<span color='#%06x' underline='single' size='larger'>Ejecutar %s</span>"
-
 #~ msgid "<big>%s</big>"
 #~ msgstr "<big>%s</big>"
-
 #~ msgid ""
 #~ "\n"
 #~ "<span color='#%06x' underline='single'>Run version %s now</span>"
 #~ msgstr ""
 #~ "\n"
 #~ "<span color='#%06x' underline='single'>Ejecutar versión %s ahora</span>"
-
 #~ msgid ""
 #~ "\n"
 #~ "<span color='#%06x' underline='single'>Run now</span>"
 #~ msgstr ""
 #~ "\n"
 #~ "<span color='#%06x' underline='single'>Ejecutar ahora</span>"
-
 #~ msgid ""
 #~ "\n"
 #~ "<span color='#%06x' underline='single'>Upgrade to version %s</span>"
 #~ msgstr ""
 #~ "\n"
 #~ "<span color='#%06x' underline='single'>Actualizar a la versión %s</span>"
-
 #~ msgid ""
 #~ "<span color='#%06x' underline='single' size='larger'>Install %s Now</span>"
 #~ msgstr ""
 #~ "<span color='#%06x' underline='single' size='larger'>Instalar %s Ahora</"
 #~ "span>"
-
 #~ msgid ""
 #~ "\n"
 #~ "<small>Version: %s</small>"
 #~ msgstr ""
 #~ "\n"
 #~ "<small>Versión: %s</small>"
-
 #~ msgid "failed to download: invalid package_id and/or directory"
 #~ msgstr "falló la descarga: id de paquete inválido y/o directorio"
-
 #~ msgid "Could not find a valid metadata file"
 #~ msgstr "No se pudo encontrar un archivo de metadatos válido"
-
 #~ msgid "Okay to download the additional packages"
 #~ msgstr "Listo para descargar los paquetes adicionales"
-
 #~ msgid "You need to specify the pack name and packages to be packed\n"
 #~ msgstr "Debe especificar el nombre de grupo y los paquetes a agrupar\n"
-
 #~ msgid ""
 #~ "Invalid name for the service pack, Specify a name with .servicepack "
 #~ "extension\n"
 #~ msgstr ""
 #~ "Nombre inválido para el paquete de servicio. Especifique un nombre con la "
 #~ "extensión .servicepack\n"
-
 #~ msgid "Authentication is required to install a local file"
 #~ msgstr "Se requiere autenticación para instalar un archivo local"
-
 #~ msgid "Authentication is required to install a security signature"
 #~ msgstr "Se requiere autenticación para instalar una firma de seguridad"
-
 #~ msgid "Authentication is required to update all packages"
 #~ msgstr "Se requiere autenticación para actualizar todos los paquetes"
-
 #~ msgid "Install security signature"
 #~ msgstr "Instalar firma de seguridad"
-
 #~ msgid "Refresh package lists"
 #~ msgstr "Refrescar lista de paquetes"
-
 #~ msgid "Update all packages"
 #~ msgstr "Actualizar todos los paquetes"
-
 #~ msgid ""
 #~ "Could not find a package with that name to install, or package already "
 #~ "installed"
 #~ msgstr ""
 #~ "No se pudo encontrar un paquete con ese nombre para instalar, o el "
 #~ "paquete ya está instalado"
-
 #~ msgid "Could not find a package with that name to update"
 #~ msgstr "No se pudo encontrar un paquete con ese nombre para actualizar"
-
 #~ msgid "Could not find a description for this package"
 #~ msgstr "No se pudo encontrar una descripcion para este paquete"
-
 #~ msgid "You need to specify a package to find the description for"
 #~ msgstr "Debe especificar un paquete para el que buscar la descripción"
+
commit 4dad099a0391a6b031883a280150cf0f0d235693
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Dec 12 10:57:00 2008 +0000

    trivial: formatting fix

diff --git a/client/pk-console.c b/client/pk-console.c
index db42eac..b226c2d 100644
--- a/client/pk-console.c
+++ b/client/pk-console.c
@@ -265,7 +265,7 @@ pk_console_transaction_cb (PkClient *client, const PkTransactionObj *obj, gpoint
 	if (lines_len > 0)
 		g_print (" %s\n", _("Affected packages:"));
 	else
-		g_print (" %s\n", _("No affected packages"));
+		g_print (" %s\n", _("Affected packages: None"));
 	for (i=0; i<lines_len; i++) {
 		parts = g_strsplit (lines[i], "\t", 3);
 		id = pk_package_id_new_from_string (parts[1]);
commit 27b43644a940530062f86cc86af7c609c05f38df
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Dec 12 10:42:08 2008 +0000

    trivial: don't print an empty list if nothing was done in pkcon get-transactions

diff --git a/client/pk-console.c b/client/pk-console.c
index 9768e83..db42eac 100644
--- a/client/pk-console.c
+++ b/client/pk-console.c
@@ -260,9 +260,12 @@ pk_console_transaction_cb (PkClient *client, const PkTransactionObj *obj, gpoint
 	}
 
 	/* TRANSLATORS: these are packages touched by the transaction */
-	g_print (" %s:\n", _("Affected packages"));
 	lines = g_strsplit (obj->data, "\n", -1);
 	lines_len = g_strv_length (lines);
+	if (lines_len > 0)
+		g_print (" %s\n", _("Affected packages:"));
+	else
+		g_print (" %s\n", _("No affected packages"));
 	for (i=0; i<lines_len; i++) {
 		parts = g_strsplit (lines[i], "\t", 3);
 		id = pk_package_id_new_from_string (parts[1]);
commit f08b884164846806d27999b9a2585d5eb83c17a9
Merge: 92b83e4... 653022c...
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Dec 11 17:54:45 2008 +0000

    Merge branch 'master' of git+ssh://hughsie@git.packagekit.org/srv/git/PackageKit

commit 653022ce960662d239152e1e96ac25915ed17b8e
Author: Valeriy Lyasotskiy <onestep at ukr.net>
Date:   Thu Dec 11 19:07:45 2008 +0200

    alpm: code modified to use PkPackageId accessors; alpm: download_packages stuff moved to its own thread

diff --git a/backends/alpm/pk-backend-alpm.c b/backends/alpm/pk-backend-alpm.c
index a48e894..f2e57e0 100644
--- a/backends/alpm/pk-backend-alpm.c
+++ b/backends/alpm/pk-backend-alpm.c
@@ -107,6 +107,27 @@ pkg_from_package_id_str (const gchar *package_id_str)
 	return pkg;
 }
 
+gboolean
+pkg_equal (pmpkg_t *p1, pmpkg_t *p2)
+{
+	if (g_strcmp0 (alpm_pkg_get_name (p1), alpm_pkg_get_name (p2)) != 0)
+		return FALSE;
+	if (g_strcmp0 (alpm_pkg_get_version (p1), alpm_pkg_get_version (p2)) != 0)
+		return FALSE;
+	return TRUE;
+}
+
+gboolean
+pkg_equals_to (pmpkg_t *pkg, const gchar *name, const gchar *version)
+{
+	if (g_strcmp0 (alpm_pkg_get_name (pkg), name) != 0)
+		return FALSE;
+	if (version != NULL)
+		if (g_strcmp0 (alpm_pkg_get_version (pkg), version) != 0)
+			return FALSE;
+	return TRUE;
+}
+
 void
 cb_trans_evt (pmtransevt_t event, void *data1, void *data2)
 {
@@ -163,7 +184,7 @@ cb_trans_evt (pmtransevt_t event, void *data1, void *data2)
 void
 cb_trans_conv (pmtransconv_t conv, void *data1, void *data2, void *data3, int *response)
 {
-	// TODO: Add code here
+	// TODO: check if some code needs to be placed there
 }
 
 void
@@ -189,11 +210,12 @@ cb_dl_progress (const char *filename, off_t xfered, off_t total)
 			gchar *package_id = NULL;
 			gchar **package_ids = pk_backend_get_strv (backend_instance, "package_ids");
 			for (iterator = 0; package_id == NULL && iterator < g_strv_length (package_ids); ++iterator) {
-				PkPackageId *pk_package_id = pk_package_id_new_from_string (package_ids[iterator]);
-				gchar *pkginfo = g_strjoin ("-", pk_package_id->name, pk_package_id->version, NULL);
-				if (strstr (filename, pkginfo) != NULL)
+				PkPackageId *id = pk_package_id_new_from_string (package_ids[iterator]);
+				gchar *pkginfo = g_strjoin ("-", pk_package_id_get_name (id), pk_package_id_get_version (id), NULL);
+				if (g_str_has_prefix (filename, pkginfo))
 					package_id = package_ids[iterator];
 				g_free (pkginfo);
+				pk_package_id_free (id);
 			}
 
 			/* emit package */
@@ -209,60 +231,6 @@ cb_dl_progress (const char *filename, off_t xfered, off_t total)
 	// pk_backend_set_percentage ((PkBackend *) backend_instance, percent);
 }
 
-gboolean
-update_subprogress (void *data)
-{
-	if (subprogress_percentage == -1)
-		return FALSE;
-
-	egg_debug ("alpm: subprogress is %i", subprogress_percentage);
-
-	pk_backend_set_percentage ((PkBackend *) data, subprogress_percentage);
-	return TRUE;
-}
-
-gboolean
-update_progress (void *data)
-{
-	if (progress_percentage == -1)
-		return FALSE;
-
-	pk_backend_set_percentage ((PkBackend *) data, progress_percentage);
-	return TRUE;
-}
-
-gpointer
-state_notify (void *backend)
-{
-	g_timeout_add (300, update_subprogress, backend);
-	return backend;
-}
-
-gboolean
-pkg_equal (pmpkg_t *p1, pmpkg_t *p2)
-{
-/*
-	egg_debug (alpm_pkg_get_name (p1));
-	egg_debug (alpm_pkg_get_name (p2));
-*/
-	if (strcmp (alpm_pkg_get_name (p1), alpm_pkg_get_name (p2)) != 0)
-		return FALSE;
-	if (strcmp (alpm_pkg_get_version (p1), alpm_pkg_get_version (p2)) != 0)
-		return FALSE;
-	return TRUE;
-}
-
-gboolean
-pkg_equals_to (pmpkg_t *pkg, const gchar *name, const gchar *version)
-{
-	if (strcmp (alpm_pkg_get_name (pkg), name) != 0)
-		return FALSE;
-	if (version != NULL)
-		if (strcmp (alpm_pkg_get_version (pkg), version) != 0)
-			return FALSE;
-	return TRUE;
-}
-
 void
 emit_package (PkBackend *backend, pmpkg_t *pkg, const gchar *repo, PkInfoEnum info)
 {
@@ -685,12 +653,13 @@ backend_cancel (PkBackend *backend)
 /**
  * backend_download_packages:
  */
-static void
-backend_download_packages (PkBackend *backend, gchar **package_ids, const gchar *directory)
+static gboolean
+backend_download_packages_thread (PkBackend *backend)
 {
-	pk_backend_set_status (backend, PK_STATUS_ENUM_DOWNLOAD);
+	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
+	const gchar *directory = pk_backend_get_string (backend, "directory");
 
-	egg_debug ("alpm: downloading package to %s", directory);
+	egg_debug ("alpm: downloading packages to %s", directory);
 
 	/* old cachedirs list automatically gets freed in alpm, so make a copy */
 	alpm_list_t *cachedirs = NULL;
@@ -702,42 +671,36 @@ backend_download_packages (PkBackend *backend, gchar **package_ids, const gchar
 	alpm_option_add_cachedir (directory);
 
 	/* create a new transaction */
-	if (alpm_trans_init (PM_TRANS_TYPE_SYNC, PM_TRANS_FLAG_NODEPS | PM_TRANS_FLAG_DOWNLOADONLY, cb_trans_evt, cb_trans_conv, cb_trans_progress) == -1) {
-		egg_warning ("alpm: %s", alpm_strerrorlast ());
+	if (alpm_trans_init (PM_TRANS_TYPE_SYNC, PM_TRANS_FLAG_NODEPS | PM_TRANS_FLAG_DOWNLOADONLY, cb_trans_evt, cb_trans_conv, cb_trans_progress) != 0) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
 		pk_backend_finished (backend);
-		return;
+		return FALSE;
 	}
-	egg_debug ("alpm: transaction initialized");
 
 	/* add targets to the transaction */
 	int iterator;
 	for (iterator = 0; iterator < g_strv_length (package_ids); ++iterator) {
-		PkPackageId *package_id = pk_package_id_new_from_string (package_ids[iterator]);
-		if (alpm_trans_addtarget (package_id->name) == -1) {
-			egg_warning ("alpm: %s", alpm_strerrorlast ());
+		PkPackageId *id = pk_package_id_new_from_string (package_ids[iterator]);
+		if (alpm_trans_addtarget ((char *) pk_package_id_get_name (id)) != 0) {
 			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
 			alpm_trans_release ();
 			pk_backend_finished (backend);
-			return;
+			return FALSE;
 		}
-		egg_debug ("alpm: %s added to transaction queue", package_id->name);
-		pk_package_id_free (package_id);
+		pk_package_id_free (id);
 	}
 
 	alpm_list_t *data = NULL;
 
 	/* prepare and commit transaction */
-	if (alpm_trans_prepare (&data) == -1 || alpm_trans_commit (&data) == -1) {
-		egg_warning ("alpm: %s", alpm_strerrorlast ());
+	if (alpm_trans_prepare (&data) != 0 || alpm_trans_commit (&data) != 0) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
 		alpm_trans_release ();
 		pk_backend_finished (backend);
-		return;
+		return FALSE;
 	}
 
 	alpm_trans_release ();
-	egg_debug ("alpm: transaction released");
 
 	/* emit/cleanup downloaded files list */
 	for (list_iterator = downloaded_files; list_iterator; list_iterator = alpm_list_next (list_iterator)) {
@@ -752,6 +715,19 @@ backend_download_packages (PkBackend *backend, gchar **package_ids, const gchar
 	alpm_option_set_cachedirs (cachedirs);
 
 	pk_backend_finished (backend);
+	return TRUE;
+}
+
+/**
+ * backend_download_packages:
+ */
+static void
+backend_download_packages (PkBackend *backend, gchar **package_ids, const gchar *directory)
+{
+	pk_backend_set_status (backend, PK_STATUS_ENUM_DOWNLOAD);
+	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
+
+	pk_backend_thread_create (backend, backend_download_packages_thread);
 }
 
 int
@@ -1071,15 +1047,17 @@ backend_get_update_detail (PkBackend *backend, gchar **package_ids)
 	int iterator;
 	for (iterator = 0; iterator < g_strv_length (package_ids); ++iterator) {
 		// TODO: add changelog code here
-		PkPackageId *pk_package_id = pk_package_id_new_from_string (package_ids[iterator]);
+		PkPackageId *id = pk_package_id_new_from_string (package_ids[iterator]);
 
-		pmpkg_t *installed_pkg = alpm_db_get_pkg (alpm_option_get_localdb (), pk_package_id->name);
+		pmpkg_t *installed_pkg = alpm_db_get_pkg (alpm_option_get_localdb (), pk_package_id_get_name (id));
 
 		gchar *installed_package_id = installed_pkg ? pkg_to_package_id_str (installed_pkg, ALPM_LOCAL_DB_ALIAS) : NULL;
 		pk_backend_update_detail (backend, package_ids[iterator], installed_package_id, "", "", "", "", PK_RESTART_ENUM_NONE,
 			installed_pkg ? "Update to latest available version" : "Install as a dependency for another update",
 			NULL, PK_UPDATE_STATE_ENUM_UNKNOWN, NULL, NULL);
 		g_free (installed_package_id);
+
+		pk_package_id_free (id);
 	}
 
 	pk_backend_finished (backend);
@@ -1123,23 +1101,19 @@ backend_get_updates (PkBackend *backend, PkBitfield filters)
 static gboolean
 backend_install_files_thread (PkBackend *backend)
 {
-	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
-
 	gchar **full_paths = pk_backend_get_strv (backend, "full_paths");
 
 	/* create a new transaction */
-	if (alpm_trans_init (PM_TRANS_TYPE_UPGRADE, 0, cb_trans_evt, cb_trans_conv, cb_trans_progress) == -1) {
+	if (alpm_trans_init (PM_TRANS_TYPE_UPGRADE, 0, cb_trans_evt, cb_trans_conv, cb_trans_progress) != 0) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
 		pk_backend_finished (backend);
 		return FALSE;
 	}
-	egg_debug ("alpm: transaction initialized");
 
 	/* add targets to the transaction */
 	int iterator;
 	for (iterator = 0; iterator < g_strv_length (full_paths); ++iterator) {
-		if (alpm_trans_addtarget (full_paths[iterator]) == -1) {
-			egg_warning ("alpm: %s", alpm_strerrorlast ());
+		if (alpm_trans_addtarget (full_paths[iterator]) != 0) {
 			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
 			alpm_trans_release ();
 			pk_backend_finished (backend);
@@ -1150,19 +1124,8 @@ backend_install_files_thread (PkBackend *backend)
 
 	alpm_list_t *data = NULL;
 
-	/* prepare transaction */
-	if (alpm_trans_prepare (&data) == -1) {
-		egg_warning ("alpm: %s", alpm_strerrorlast ());
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-		alpm_trans_release ();
-		pk_backend_finished (backend);
-		return FALSE;
-	}
-	egg_debug ("alpm: transaction prepared");
-
-	/* commit transaction */
-	if (alpm_trans_commit (&data) == -1) {
-		egg_warning ("alpm: %s", alpm_strerrorlast ());
+	/* prepare and commit transaction */
+	if (alpm_trans_prepare (&data) != 0 || alpm_trans_commit (&data) != 0) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
 		alpm_trans_release ();
 		pk_backend_finished (backend);
@@ -1170,7 +1133,6 @@ backend_install_files_thread (PkBackend *backend)
 	}
 
 	alpm_trans_release ();
-	egg_debug ("alpm: transaction released");
 
 	pk_backend_finished (backend);
 	return TRUE;
@@ -1183,6 +1145,7 @@ static void
 backend_install_files (PkBackend *backend, gboolean trusted, gchar **full_paths)
 {
 	pk_backend_set_status (backend, PK_STATUS_ENUM_INSTALL);
+	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
 
 	pk_backend_thread_create (backend, backend_install_files_thread);
 }
@@ -1193,48 +1156,32 @@ backend_install_files (PkBackend *backend, gboolean trusted, gchar **full_paths)
 static gboolean
 backend_install_packages_thread (PkBackend *backend)
 {
-	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
-
 	gchar **package_ids = pk_backend_get_strv (backend, "package_ids");
 
 	/* create a new transaction */
-	if (alpm_trans_init (PM_TRANS_TYPE_SYNC, PM_TRANS_FLAG_NODEPS, cb_trans_evt, cb_trans_conv, cb_trans_progress) == -1) {
+	if (alpm_trans_init (PM_TRANS_TYPE_SYNC, PM_TRANS_FLAG_NODEPS, cb_trans_evt, cb_trans_conv, cb_trans_progress) != 0) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
 		pk_backend_finished (backend);
 		return FALSE;
 	}
-	egg_debug ("alpm: %s", "transaction initialized");
 
 	/* add targets to the transaction */
 	int iterator;
 	for (iterator = 0; iterator < g_strv_length (package_ids); ++iterator) {
-		PkPackageId *package_id = pk_package_id_new_from_string (package_ids[iterator]);
-		if (alpm_trans_addtarget (package_id->name) == -1) {
-			egg_warning ("alpm: %s", alpm_strerrorlast ());
+		PkPackageId *id = pk_package_id_new_from_string (package_ids[iterator]);
+		if (alpm_trans_addtarget ((char *) pk_package_id_get_name (id)) != 0) {
 			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
 			alpm_trans_release ();
 			pk_backend_finished (backend);
 			return FALSE;
-		} else
-			egg_debug ("alpm: %s added to transaction queue", package_id->name);
-		pk_package_id_free (package_id);
+		}
+		pk_package_id_free (id);
 	}
 
 	alpm_list_t *data = NULL;
 
-	/* prepare transaction */
-	if (alpm_trans_prepare (&data) == -1) {
-		egg_warning ("alpm: %s", alpm_strerrorlast ());
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-		alpm_trans_release ();
-		pk_backend_finished (backend);
-		return FALSE;
-	}
-	egg_debug ("alpm: %s", "transaction prepared");
-
-	/* commit transaction */
-	if (alpm_trans_commit (&data) == -1) {
-		egg_warning ("alpm: %s", alpm_strerrorlast ());
+	/* prepare and commit transaction */
+	if (alpm_trans_prepare (&data) != 0 || alpm_trans_commit (&data) != 0) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
 		alpm_trans_release ();
 		pk_backend_finished (backend);
@@ -1242,7 +1189,6 @@ backend_install_packages_thread (PkBackend *backend)
 	}
 
 	alpm_trans_release ();
-	egg_debug ("alpm: %s", "transaction released");
 
 	pk_backend_finished (backend);
 	return TRUE;
@@ -1254,6 +1200,8 @@ backend_install_packages_thread (PkBackend *backend)
 static void
 backend_install_packages (PkBackend *backend, gchar **package_ids)
 {
+	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
+
 	pk_backend_thread_create (backend, backend_install_packages_thread);
 }
 
@@ -1263,29 +1211,23 @@ backend_install_packages (PkBackend *backend, gchar **package_ids)
 static gboolean
 backend_refresh_cache_thread (PkBackend *backend)
 {
-	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
-
 	if (alpm_trans_init (PM_TRANS_TYPE_SYNC, PM_TRANS_FLAG_NOSCRIPTLET, cb_trans_evt, cb_trans_conv, cb_trans_progress) != 0) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerror (pm_errno));
+		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
 		pk_backend_finished (backend);
 		return FALSE;
 	}
-	egg_debug ("alpm: %s", "transaction initialized");
 
-	alpm_list_t *dbs = alpm_option_get_syncdbs ();
 	alpm_list_t *iterator;
-	for (iterator = dbs; iterator; iterator = alpm_list_next (iterator)) {
-		int update_result = alpm_db_update (FALSE, (pmdb_t *) alpm_list_getdata (iterator));
-		egg_debug ("alpm: update_result is %i", update_result);
-		if (update_result == -1) {
-			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerror (pm_errno));
+	for (iterator = alpm_option_get_syncdbs (); iterator; iterator = alpm_list_next (iterator)) {
+		pmdb_t *db = (pmdb_t *) alpm_list_getdata (iterator);
+		if (alpm_db_update (FALSE, db) == -1) {
+			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
 			pk_backend_finished (backend);
 			return FALSE;
 		}
 	}
 
 	alpm_trans_release ();
-	egg_debug ("alpm: %s", "transaction released");
 
 	pk_backend_finished (backend);
 	return TRUE;
@@ -1298,12 +1240,13 @@ static void
 backend_refresh_cache (PkBackend *backend, gboolean force)
 {
 	if (!pk_backend_is_online (backend)) {
-		pk_backend_error_code (backend, PK_ERROR_ENUM_NO_NETWORK, "Cannot refresh cache whilst offline");
+		pk_backend_error_code (backend, PK_ERROR_ENUM_NO_NETWORK, "Can not refresh cache in offline mode");
 		pk_backend_finished (backend);
 		return;
 	}
 
 	pk_backend_set_status (backend, PK_STATUS_ENUM_REFRESH_CACHE);
+	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
 
 	pk_backend_thread_create (backend, backend_refresh_cache_thread);
 }
@@ -1324,43 +1267,29 @@ backend_remove_packages_thread (PkBackend *backend)
 		flags |= PM_TRANS_FLAG_CASCADE;
 
 	/* create a new transaction */
-	if (alpm_trans_init (PM_TRANS_TYPE_REMOVE, flags, cb_trans_evt, cb_trans_conv, cb_trans_progress) == -1) {
+	if (alpm_trans_init (PM_TRANS_TYPE_REMOVE, flags, cb_trans_evt, cb_trans_conv, cb_trans_progress) != 0) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
 		pk_backend_finished (backend);
 		return FALSE;
 	}
-	egg_debug ("alpm: %s", "transaction initialized");
 
 	/* add targets to the transaction */
 	int iterator;
 	for (iterator = 0; iterator < g_strv_length (package_ids); ++iterator) {
-		PkPackageId *package_id = pk_package_id_new_from_string (package_ids[iterator]);
-		if (alpm_trans_addtarget (package_id->name) == -1) {
-			egg_warning ("alpm: %s", alpm_strerrorlast ());
+		PkPackageId *id = pk_package_id_new_from_string (package_ids[iterator]);
+		if (alpm_trans_addtarget ((char *) pk_package_id_get_name (id)) != 0) {
 			pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
 			alpm_trans_release ();
 			pk_backend_finished (backend);
 			return FALSE;
-		} else
-			egg_debug ("alpm: %s added to transaction queue", package_id->name);
-		pk_package_id_free (package_id);
+		}
+		pk_package_id_free (id);
 	}
 
 	alpm_list_t *data = NULL;
 
-	/* prepare transaction */
-	if (alpm_trans_prepare (&data) == -1) {
-		egg_warning ("alpm: %s", alpm_strerrorlast ());
-		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
-		alpm_trans_release ();
-		pk_backend_finished (backend);
-		return FALSE;
-	}
-	egg_debug ("alpm: %s", "transaction prepared");
-
-	/* commit transaction */
-	if (alpm_trans_commit (&data) == -1) {
-		egg_warning ("alpm: %s", alpm_strerrorlast ());
+	/* prepare and commit transaction */
+	if (alpm_trans_prepare (&data) != 0 || alpm_trans_commit (&data) != 0) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, alpm_strerrorlast ());
 		alpm_trans_release ();
 		pk_backend_finished (backend);
@@ -1368,7 +1297,6 @@ backend_remove_packages_thread (PkBackend *backend)
 	}
 
 	alpm_trans_release ();
-	egg_debug ("alpm: %s", "transaction released");
 
 	pk_backend_finished (backend);
 	return TRUE;
@@ -1504,7 +1432,9 @@ backend_search_name (PkBackend *backend, PkBitfield filters, const gchar *search
 static void
 backend_update_packages (PkBackend *backend, gchar **package_ids)
 {
-	backend_install_packages (backend, package_ids);
+	pk_backend_set_percentage (backend, PK_BACKEND_PERCENTAGE_INVALID);
+
+	pk_backend_thread_create (backend, backend_install_packages_thread);
 }
 
 /**
commit 92b83e40f1e4c2d08dff72dd23c328a96e995c5c
Merge: 1b848c6... ab1b294...
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Dec 11 17:01:41 2008 +0000

    Merge branch 'master' of git+ssh://hughsie@git.packagekit.org/srv/git/PackageKit

commit 1b848c6482ecdb45c6b0a46bacbac736447deddc
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Dec 11 16:55:54 2008 +0000

    trivial: filter out Presto stdout from the yum spawned backend

diff --git a/backends/yum/pk-backend-yum.c b/backends/yum/pk-backend-yum.c
index b9ac83e..7631ab8 100644
--- a/backends/yum/pk-backend-yum.c
+++ b/backends/yum/pk-backend-yum.c
@@ -43,6 +43,18 @@ backend_stderr_cb (PkBackend *backend, const gchar *output)
 }
 
 /**
+ * backend_stdout_cb:
+ */
+static gboolean
+backend_stdout_cb (PkBackend *backend, const gchar *output)
+{
+	/* unsigned rpm, this will be picked up by yum and and exception will be thrown */
+	if (strstr (output, "Presto") != NULL)
+		return FALSE;
+	return TRUE;
+}
+
+/**
  * backend_initialize:
  * This should only be run once per backend load, i.e. not every transaction
  */
@@ -52,6 +64,7 @@ backend_initialize (PkBackend *backend)
 	egg_debug ("backend: initialize");
 	spawn = pk_backend_spawn_new ();
 	pk_backend_spawn_set_filter_stderr (spawn, backend_stderr_cb);
+	pk_backend_spawn_set_filter_stdout (spawn, backend_stdout_cb);
 	pk_backend_spawn_set_name (spawn, "yum");
 }
 
commit ab1b29472ef36dbf9ad2fe8368598cae2c1f19ab
Merge: 6bbb187... 23ed7d9...
Author: Valeriy Lyasotskiy <onestep at ukr.net>
Date:   Thu Dec 11 18:46:34 2008 +0200

    Merge branch 'master' of git+ssh://onestep_ua@git.packagekit.org/srv/git/PackageKit

commit 6bbb1871d2d6a06bf92e544f7eca51c8ee10c6f7
Author: Valeriy Lyasotskiy <onestep at ukr.net>
Date:   Thu Dec 11 18:36:09 2008 +0200

    glib: Added accessors for PkPackageId

diff --git a/lib/packagekit-glib/pk-package-id.c b/lib/packagekit-glib/pk-package-id.c
index 6938b1a..f1259d8 100644
--- a/lib/packagekit-glib/pk-package-id.c
+++ b/lib/packagekit-glib/pk-package-id.c
@@ -60,6 +60,62 @@ pk_package_id_new (void)
 }
 
 /**
+ * pk_package_id_get_name:
+ *
+ * Gets name property from given #PkPackageId object
+ *
+ * Return value: name property of given #PkPackageId object
+ **/
+const gchar *
+pk_package_id_get_name (const PkPackageId *id)
+{
+	g_return_val_if_fail (id != NULL, NULL);
+	return id->name;
+}
+
+/**
+ * pk_package_id_get_version:
+ *
+ * Gets version property from given #PkPackageId object
+ *
+ * Return value: version property of given #PkPackageId object
+ **/
+const gchar *
+pk_package_id_get_version (const PkPackageId *id)
+{
+	g_return_val_if_fail (id != NULL, NULL);
+	return id->version;
+}
+
+/**
+ * pk_package_id_get_arch:
+ *
+ * Gets arch property from given #PkPackageId object
+ *
+ * Return value: arch property of given #PkPackageId object
+ **/
+const gchar *
+pk_package_id_get_arch (const PkPackageId *id)
+{
+	g_return_val_if_fail (id != NULL, NULL);
+	return id->arch;
+}
+
+/**
+ * pk_package_id_get_data:
+ *
+ * Gets data property from given #PkPackageId object
+ *
+ * Return value: data property of given #PkPackageId object
+ **/
+const gchar *
+pk_package_id_get_data (const PkPackageId *id)
+{
+	g_return_val_if_fail (id != NULL, NULL);
+	return id->data;
+}
+
+/**
  * pk_strsplit:
  * @id: the ; delimited string to split
  * @parts: how many parts the delimted string should be split into
diff --git a/lib/packagekit-glib/pk-package-id.h b/lib/packagekit-glib/pk-package-id.h
index 875e96b..b7278ad 100644
--- a/lib/packagekit-glib/pk-package-id.h
+++ b/lib/packagekit-glib/pk-package-id.h
@@ -44,6 +44,10 @@ typedef struct {
 
 /* objects */
 PkPackageId	*pk_package_id_new			(void);
+const gchar	*pk_package_id_get_name			(const PkPackageId	*id);
+const gchar	*pk_package_id_get_version		(const PkPackageId	*id);
+const gchar	*pk_package_id_get_arch			(const PkPackageId	*id);
+const gchar	*pk_package_id_get_data			(const PkPackageId	*id);
 PkPackageId	*pk_package_id_new_from_string		(const gchar		*package_id)
 							 G_GNUC_WARN_UNUSED_RESULT;
 PkPackageId	*pk_package_id_new_from_list		(const gchar		*name,
commit b1c96db1302b3443be6d8c7fedf8ea8bad64c86c
Author: Richard Hughes <richard at hughsie.com>
Date:   Thu Dec 11 12:20:57 2008 +0000

    trivial: add another option to the config file so we can play with testing updates

diff --git a/etc/PackageKit.conf.in b/etc/PackageKit.conf.in
index e63484f..d94ce75 100644
--- a/etc/PackageKit.conf.in
+++ b/etc/PackageKit.conf.in
@@ -82,3 +82,11 @@ UpdatePackageList=true
 # default=true
 UpdateCheckProcesses=true
 
+# Check for updates in testing repositories when we chack for updates
+#
+# NOTE: Don't enable this if you do not want testing updates to be checked
+# as this will increase the network bandwidth used.
+#
+# default=true
+CheckTestingRepos=true
+
commit e7d4c227c74b7ff7d7eb8d89a319579f2225bbaf
Merge: cdfb790... 57b216b...
Author: Valeriy Lyasotskiy <onestep at ukr.net>
Date:   Wed Dec 10 19:42:16 2008 +0200

    Merge branch 'master' of git+ssh://onestep_ua@git.packagekit.org/srv/git/PackageKit

commit 23ed7d93ea6b078b04f830459f80ce92092b24da
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Dec 10 16:28:42 2008 +0000

    yum: catch another exception from yum when doing self.yumbase.comps.return_group, possibly triggered by deselecting all sources

diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py
index 8504639..177af47 100755
--- a/backends/yum/yumBackend.py
+++ b/backends/yum/yumBackend.py
@@ -446,6 +446,8 @@ class PackageKitYumBackend(PackageKitBaseBackend, PackagekitPackage):
             grp = self.yumbase.comps.return_group(grpid)
         except yum.Errors.RepoError, e:
             self.error(ERROR_NO_CACHE, _to_unicode(e))
+        except yum.Errors.GroupsError, e:
+            self.error(ERROR_GROUP_NOT_FOUND, _to_unicode(e))
         except Exception, e:
             self.error(ERROR_INTERNAL_ERROR, _to_unicode(e))
         else:
commit 57b216b991421cef5f83847234500e3f02474366
Author: Richard Hughes <richard at hughsie.com>
Date:   Wed Dec 10 15:17:02 2008 +0000

    trivial: post release version bump

diff --git a/configure.ac b/configure.ac
index aedd0bf..84eb7fa 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,6 @@
 AC_PREREQ(2.52)
 
-AC_INIT(PackageKit, 0.4.0)
+AC_INIT(PackageKit, 0.4.1)
 AC_CONFIG_SRCDIR(src)
 AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
 AM_CONFIG_HEADER(config.h)
commit 56bbfb692c7c2ff9d4158d30aaead0947da9bb76
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Dec 10 11:38:45 2008 +0100

    APT: Add check for updates, add numbers to the test name to make them sortable, use variables where possible for internal strings

diff --git a/backends/apt/tests.py b/backends/apt/tests.py
index bf8bb89..09531bd 100755
--- a/backends/apt/tests.py
+++ b/backends/apt/tests.py
@@ -54,7 +54,7 @@ class AptBackendTestCase(mox.MoxTestBase):
             self.mox.StubOutWithMock(self.backend, cb)
 
     @nose.tools.timed(10)
-    def testInit(self):
+    def test_00_Init(self):
         """Test the initialization"""
         self.mox.ReplayAll()
         self.backend.Init()
@@ -72,7 +72,7 @@ class AptBackendTestCase(mox.MoxTestBase):
         self.assertEqual(pkg.candidateVersion, "235-1")
 
     @nose.tools.timed(10)
-    def testRefresh(self):
+    def test_01_Refresh(self):
         """Test the Refresh of the cache method"""
         self.backend.Finished(EXIT_SUCCESS)
         self.mox.ReplayAll()
@@ -83,27 +83,39 @@ class AptBackendTestCase(mox.MoxTestBase):
         self.assertTrue(self.backend._cache.has_key("synaptic"))
 
     @nose.tools.timed(10)
-    def testSearchName(self):
+    def test_20_SearchName(self):
         """Test the doSearchName method"""
-        self.backend.Package('installed', 'xterm;235-1;i386;',
-                             'X terminal emulator')
+        self.backend.Package(INFO_INSTALLED, "xterm;235-1;i386;",
+                             "X terminal emulator")
         self.backend.Finished(EXIT_SUCCESS)
         self.mox.ReplayAll()
-        self.backend.doSearchName("none", "xterm")
+        self.backend.doSearchName(FILTER_NONE, "xterm")
         while threading.activeCount() > 1:
             time.sleep(0.1)
 
     @nose.tools.timed(10)
-    def testSearchFile(self):
+    def test_20_SearchFile(self):
         """Test the doSearchFile method"""
-        self.backend.Package('installed', 'xterm;235-1;i386;',
-                             'X terminal emulator')
+        self.backend.Package(INFO_INSTALLED, "xterm;235-1;i386;",
+                             "X terminal emulator")
         self.backend.Finished(EXIT_SUCCESS)
         self.mox.ReplayAll()
-        self.backend.doSearchFile("none", "xterm")
+        self.backend.doSearchFile(FILTER_NONE, "bin/xterm")
         while threading.activeCount() > 1:
             time.sleep(0.1)
 
+    @nose.tools.timed(10)
+    def test_20_GetUpdates(self):
+        """Test the doGetUpdates method"""
+        self.backend.Package(INFO_NORMAL, "xterm;237-1;i386;",
+                             "X terminal emulator")
+        self.backend.Finished(EXIT_SUCCESS)
+        self.mox.ReplayAll()
+        self.backend.doGetUpdates(FILTER_NONE)
+        while threading.activeCount() > 1:
+            time.sleep(0.1)
+
+
 def setup():
     """Create a temporary and very simple chroot for apt"""
     apt_pkg.InitConfig()
commit fed8c107bd19ec5fb7e81d3019f9bda67132f9e4
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Dec 10 11:28:22 2008 +0100

    APT: Register callbacks centrally for the test

diff --git a/backends/apt/tests.py b/backends/apt/tests.py
index 0ec6f43..bf8bb89 100755
--- a/backends/apt/tests.py
+++ b/backends/apt/tests.py
@@ -50,6 +50,8 @@ class AptBackendTestCase(mox.MoxTestBase):
         """Create a mox factory and a backend instance"""
         mox.MoxTestBase.setUp(self)
         self.backend = PackageKitAptBackend(None, None)
+        for cb in ["Package", "Finished"]:
+            self.mox.StubOutWithMock(self.backend, cb)
 
     @nose.tools.timed(10)
     def testInit(self):
@@ -72,7 +74,6 @@ class AptBackendTestCase(mox.MoxTestBase):
     @nose.tools.timed(10)
     def testRefresh(self):
         """Test the Refresh of the cache method"""
-        self.mox.StubOutWithMock(self.backend, "Finished")
         self.backend.Finished(EXIT_SUCCESS)
         self.mox.ReplayAll()
         self.backend.doRefreshCache(False)
@@ -84,9 +85,9 @@ class AptBackendTestCase(mox.MoxTestBase):
     @nose.tools.timed(10)
     def testSearchName(self):
         """Test the doSearchName method"""
-        self.mox.StubOutWithMock(self.backend, "Package")
         self.backend.Package('installed', 'xterm;235-1;i386;',
                              'X terminal emulator')
+        self.backend.Finished(EXIT_SUCCESS)
         self.mox.ReplayAll()
         self.backend.doSearchName("none", "xterm")
         while threading.activeCount() > 1:
@@ -95,9 +96,9 @@ class AptBackendTestCase(mox.MoxTestBase):
     @nose.tools.timed(10)
     def testSearchFile(self):
         """Test the doSearchFile method"""
-        self.mox.StubOutWithMock(self.backend, "Package")
         self.backend.Package('installed', 'xterm;235-1;i386;',
                              'X terminal emulator')
+        self.backend.Finished(EXIT_SUCCESS)
         self.mox.ReplayAll()
         self.backend.doSearchFile("none", "xterm")
         while threading.activeCount() > 1:
commit 56a80151586a1b1a0964d954dd75f625ae84b155
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Dec 10 11:21:25 2008 +0100

    APT: Fix refresh: After calling refresh the cache has to be reopened

diff --git a/backends/apt/aptDBUSBackend.py b/backends/apt/aptDBUSBackend.py
index 9281850..df1173e 100755
--- a/backends/apt/aptDBUSBackend.py
+++ b/backends/apt/aptDBUSBackend.py
@@ -1331,6 +1331,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             self.ErrorCode(ERROR_UNKNOWN, "Refreshing cache failed: %s" % e)
             self.Finished(EXIT_FAILED)
             return
+        self._open_cache(prange=(95,100))
         self.PercentageChanged(100)
         self.Finished(EXIT_SUCCESS)
 
commit 2716c79a251913beed2a72dad396cc2cc582f75c
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Dec 10 11:21:04 2008 +0100

    APT: Add a test repository Packages file

diff --git a/backends/apt/Packages.test b/backends/apt/Packages.test
new file mode 100644
index 0000000..b696056
--- /dev/null
+++ b/backends/apt/Packages.test
@@ -0,0 +1,71 @@
+Package: xterm
+Priority: optional
+Section: x11
+Installed-Size: 1112
+Maintainer: Debian X Strike Force <debian-x at lists.debian.org>
+Architecture: i386
+Version: 237-1
+Provides: x-terminal-emulator
+Suggests: xfonts-cyrillic
+Filename: pool/main/x/xterm/xterm_235-1_i386.deb
+Size: 466530
+MD5sum: ec97de9afffcbc5932dddfa9090f6fbe
+SHA1: 7aedb7fc5dd906ad35246cf7442e250311aa2130
+SHA256: 517f01858734b253584c28bb9951acbb6a082d1274c6ec6c079f7567bf067d71
+Description: X terminal emulator
+ xterm is a terminal emulator for the X Window System.  It provides DEC VT102
+ and Tektronix 4014 compatible terminals for programs that cannot use the
+ window system directly.  This version implements ISO/ANSI colors and most of
+ the control sequences used by DEC VT220 terminals.
+ .
+ This package provides four commands: xterm, which is the traditional
+ terminal emulator; uxterm, which is a wrapper around xterm that is
+ intelligent about locale settings (especially those which use the UTF-8
+ character encoding), but which requires the luit program from the x11-utils
+ package; koi8rxterm, a wrapper similar to uxterm for locales that use the
+ KOI8-R character set; and lxterm, a simple wrapper that chooses which of the
+ previous commands to execute based on the user's locale settings.
+ .
+ A complete list of control sequences supported by the X terminal emulator
+ is provided in /usr/share/doc/xterm.
+ .
+ The xterm program uses bitmap images provided by the xbitmaps package.
+ .
+ Those interested in using koi8rxterm will likely want to install the
+ xfonts-cyrillic package as well.
+Homepage: http://invisible-island.net/xterm/xterm.html
+Tag: implemented-in::c, interface::x11, role::program, scope::utility, uitoolkit::athena, x11::application, x11::terminal
+Task: desktop
+
+Package: synaptic
+Priority: optional
+Section: admin
+Installed-Size: 5812
+Maintainer: Michael Vogt <mvo at debian.org>
+Architecture: i386
+Version: 0.62.1
+Replaces: gsynaptic
+Provides: gsynaptic
+Depends: xterm
+Suggests: dwww
+Conflicts: gsynaptic, menu (<< 2.1.11)
+Filename: pool/main/s/synaptic/synaptic_0.62.1_i386.deb
+Size: 2094122
+MD5sum: 91b86003eea53002e0c2a0ea50596e37
+SHA1: e533c3345911d5c8471b54a8a7b51ae52e59982b
+SHA256: a399168d801efa1616d7b1178b4c3eda70c612716374411708d05956f3c99874
+Description: Graphical package manager
+ Synaptic is a graphical package management tool based on GTK+ and APT.
+ Synaptic enables you to install, upgrade and remove software packages in
+ a user friendly way.
+ .
+ Besides these basic functions the following features are provided:
+  * Search and filter the list of available packages
+  * Perform smart system upgrades
+  * Fix broken package dependencies
+  * Edit the list of used repositories (sources.list)
+  * Download the latest changelog of a package
+  * Configure packages through the debconf system
+  * Browse all available documentation related to a package (dwww is required)
+Tag: admin::package-management, implemented-in::c++, interface::x11, role::program, scope::application, suite::debian, uitoolkit::gtk, works-with::software:package, x11::application
+
commit b107014b81e08c2879d2362c299d20c68d53ab1b
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Dec 10 11:20:39 2008 +0100

    APT: Fix status test file by removing all dependencies of xterm

diff --git a/backends/apt/status.test b/backends/apt/status.test
index 3617e09..2bba0ae 100644
--- a/backends/apt/status.test
+++ b/backends/apt/status.test
@@ -7,8 +7,6 @@ Maintainer: Debian X Strike Force <debian-x at lists.debian.org>
 Architecture: i386
 Version: 235-1
 Provides: x-terminal-emulator
-Depends: xbitmaps, libc6 (>= 2.7-1), libfontconfig1 (>= 2.4.0), libice6 (>= 1:1.0.0), libncurses5 (>= 5.6+20071006-3), libsm6, libx11-6, libxaw7, libxext6, libxft2 (>> 2.1.1), libxmu6, libxt6
-Recommends: x11-utils | xutils
 Suggests: xfonts-cyrillic
 Conffiles:
  /etc/X11/app-defaults/KOI8RXTerm dd942bff017ee9cfc2bb97bbdd7378b6
commit 05aa4adecffd183fdf087feccaf02f7e2fd53d4e
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Dec 10 11:19:57 2008 +0100

    APT: Add test for doInit and doRefresh

diff --git a/backends/apt/tests.py b/backends/apt/tests.py
index 4792fa9..0ec6f43 100755
--- a/backends/apt/tests.py
+++ b/backends/apt/tests.py
@@ -52,6 +52,36 @@ class AptBackendTestCase(mox.MoxTestBase):
         self.backend = PackageKitAptBackend(None, None)
 
     @nose.tools.timed(10)
+    def testInit(self):
+        """Test the initialization"""
+        self.mox.ReplayAll()
+        self.backend.Init()
+        while threading.activeCount() > 1:
+            time.sleep(0.1)
+        binary = os.path.join(TEMPDIR,
+                              apt_pkg.Config["Dir::Cache"],
+                              apt_pkg.Config["Dir::Cache::pkgcache"])
+        source = os.path.join(TEMPDIR,
+                              apt_pkg.Config["Dir::Cache"],
+                              apt_pkg.Config["Dir::Cache::srcpkgcache"])
+        self.assertTrue(os.path.exists(source))
+        self.assertTrue(os.path.exists(binary))
+        pkg = self.backend._cache["xterm"]
+        self.assertEqual(pkg.candidateVersion, "235-1")
+
+    @nose.tools.timed(10)
+    def testRefresh(self):
+        """Test the Refresh of the cache method"""
+        self.mox.StubOutWithMock(self.backend, "Finished")
+        self.backend.Finished(EXIT_SUCCESS)
+        self.mox.ReplayAll()
+        self.backend.doRefreshCache(False)
+        while threading.activeCount() > 1:
+            time.sleep(0.1)
+        self.assertEqual(self.backend._cache["xterm"].candidateVersion, "237-1")
+        self.assertTrue(self.backend._cache.has_key("synaptic"))
+
+    @nose.tools.timed(10)
     def testSearchName(self):
         """Test the doSearchName method"""
         self.mox.StubOutWithMock(self.backend, "Package")
@@ -77,15 +107,24 @@ def setup():
     """Create a temporary and very simple chroot for apt"""
     apt_pkg.InitConfig()
     config = apt_pkg.Config
+    config.Set("Dir::Etc::sourcelist", 
+               os.path.join(TEMPDIR, "etc/apt/sources.list"))
+    config.Set("Dir::Etc::sourceparts", "")
     config.Set("Dir", TEMPDIR)
     config.Set("Dir::State::status",
                os.path.join(TEMPDIR, "var/lib/dpkg/status"))
-    os.makedirs(os.path.join(TEMPDIR, "var/lib/apt/lists"))
-    os.makedirs(os.path.join(TEMPDIR, "var/cache/apt/partial"))
+    os.makedirs(os.path.join(TEMPDIR, "var/lib/apt/lists/partial"))
+    os.makedirs(os.path.join(TEMPDIR, "var/cache/apt/archives/partial"))
     os.makedirs(os.path.join(TEMPDIR, "var/lib/dpkg/info"))
+    os.makedirs(os.path.join(TEMPDIR, "etc/apt"))
+    os.makedirs(os.path.join(TEMPDIR, "repo"))
+    shutil.copy("Packages.test", os.path.join(TEMPDIR, "repo/Packages"))
     shutil.copy("status.test", os.path.join(TEMPDIR, "var/lib/dpkg/status"))
     shutil.copy("xterm.list.test", os.path.join(TEMPDIR,
                                                 "var/lib/dpkg/info/xterm.list"))
+    sources = open(os.path.join(TEMPDIR, "etc/apt/sources.list"), "w")
+    sources.write("deb file://%s/repo/ ./\n" % TEMPDIR)
+    sources.close()
 
 
 def teardown():
commit 2507c9f2fff0e190ff0c5da06d81b3644b1bf46d
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Dec 10 08:48:18 2008 +0100

    APT: Shorten wait for join of test threads

diff --git a/backends/apt/tests.py b/backends/apt/tests.py
index 1aa1bfe..4792fa9 100755
--- a/backends/apt/tests.py
+++ b/backends/apt/tests.py
@@ -60,7 +60,7 @@ class AptBackendTestCase(mox.MoxTestBase):
         self.mox.ReplayAll()
         self.backend.doSearchName("none", "xterm")
         while threading.activeCount() > 1:
-            time.sleep(1)
+            time.sleep(0.1)
 
     @nose.tools.timed(10)
     def testSearchFile(self):
@@ -71,7 +71,7 @@ class AptBackendTestCase(mox.MoxTestBase):
         self.mox.ReplayAll()
         self.backend.doSearchFile("none", "xterm")
         while threading.activeCount() > 1:
-            time.sleep(1)
+            time.sleep(0.1)
 
 def setup():
     """Create a temporary and very simple chroot for apt"""
commit 842472a2391f0a53b5a3461e42bf26467eb24811
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Dec 10 08:44:02 2008 +0100

    APT: Do not register the test backend on the dbus

diff --git a/backends/apt/tests.py b/backends/apt/tests.py
index 0cfe4c2..1aa1bfe 100755
--- a/backends/apt/tests.py
+++ b/backends/apt/tests.py
@@ -35,15 +35,11 @@ import unittest
 
 import apt
 import apt_pkg
-import dbus
-import dbus.mainloop.glib
-import gobject
 import mox
 import nose.tools
 
-from aptDBUSBackend import PackageKitAptBackend, PACKAGEKIT_DBUS_SERVICE
+from aptDBUSBackend import PackageKitAptBackend
 from packagekit.enums import *
-from packagekit.daemonBackend import PACKAGEKIT_DBUS_INTERFACE, PACKAGEKIT_DBUS_PATH
 
 TEMPDIR = tempfile.mkdtemp(prefix="apt-backend-test")
 
@@ -53,17 +49,7 @@ class AptBackendTestCase(mox.MoxTestBase):
     def setUp(self):
         """Create a mox factory and a backend instance"""
         mox.MoxTestBase.setUp(self)
-        dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
-        bus = dbus.SessionBus()
-        bus_name = dbus.service.BusName(PACKAGEKIT_DBUS_SERVICE, bus=bus)
-        self.backend = PackageKitAptBackend(bus_name, PACKAGEKIT_DBUS_PATH)
-        self.loop = gobject.MainLoop()
-
-    def tearDown(self):
-        mox.MoxTestBase.tearDown(self)
-        context = self.loop.get_context()
-        while context.pending():
-            context.iteration()
+        self.backend = PackageKitAptBackend(None, None)
 
     @nose.tools.timed(10)
     def testSearchName(self):
@@ -87,7 +73,6 @@ class AptBackendTestCase(mox.MoxTestBase):
         while threading.activeCount() > 1:
             time.sleep(1)
 
-
 def setup():
     """Create a temporary and very simple chroot for apt"""
     apt_pkg.InitConfig()
@@ -102,6 +87,7 @@ def setup():
     shutil.copy("xterm.list.test", os.path.join(TEMPDIR,
                                                 "var/lib/dpkg/info/xterm.list"))
 
+
 def teardown():
     """Clear up temporary files"""
     if os.path.exists(TEMPDIR):
commit f3f05a2f99a6edbdc0d9f0dbaba6d5bb39e177eb
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Dec 10 08:27:31 2008 +0100

    APT: Add a test for file search

diff --git a/backends/apt/tests.py b/backends/apt/tests.py
index b98486e..0cfe4c2 100755
--- a/backends/apt/tests.py
+++ b/backends/apt/tests.py
@@ -76,6 +76,18 @@ class AptBackendTestCase(mox.MoxTestBase):
         while threading.activeCount() > 1:
             time.sleep(1)
 
+    @nose.tools.timed(10)
+    def testSearchFile(self):
+        """Test the doSearchFile method"""
+        self.mox.StubOutWithMock(self.backend, "Package")
+        self.backend.Package('installed', 'xterm;235-1;i386;',
+                             'X terminal emulator')
+        self.mox.ReplayAll()
+        self.backend.doSearchFile("none", "xterm")
+        while threading.activeCount() > 1:
+            time.sleep(1)
+
+
 def setup():
     """Create a temporary and very simple chroot for apt"""
     apt_pkg.InitConfig()
@@ -85,8 +97,10 @@ def setup():
                os.path.join(TEMPDIR, "var/lib/dpkg/status"))
     os.makedirs(os.path.join(TEMPDIR, "var/lib/apt/lists"))
     os.makedirs(os.path.join(TEMPDIR, "var/cache/apt/partial"))
-    os.makedirs(os.path.join(TEMPDIR, "var/lib/dpkg"))
+    os.makedirs(os.path.join(TEMPDIR, "var/lib/dpkg/info"))
     shutil.copy("status.test", os.path.join(TEMPDIR, "var/lib/dpkg/status"))
+    shutil.copy("xterm.list.test", os.path.join(TEMPDIR,
+                                                "var/lib/dpkg/info/xterm.list"))
 
 def teardown():
     """Clear up temporary files"""
diff --git a/backends/apt/xterm.list.test b/backends/apt/xterm.list.test
new file mode 100644
index 0000000..4afffb9
--- /dev/null
+++ b/backends/apt/xterm.list.test
@@ -0,0 +1,49 @@
+/.
+/usr
+/usr/bin
+/usr/bin/koi8rxterm
+/usr/bin/lxterm
+/usr/bin/resize
+/usr/bin/uxterm
+/usr/bin/xterm
+/usr/share
+/usr/share/man
+/usr/share/man/man1
+/usr/share/man/man1/lxterm.1.gz
+/usr/share/man/man1/uxterm.1.gz
+/usr/share/man/man1/xterm.1.gz
+/usr/share/man/man1/koi8rxterm.1.gz
+/usr/share/man/man1/resize.1.gz
+/usr/share/lintian
+/usr/share/lintian/overrides
+/usr/share/lintian/overrides/xterm
+/usr/share/doc
+/usr/share/doc/xterm
+/usr/share/doc/xterm/ctlseqs.txt.gz
+/usr/share/doc/xterm/xterm.termcap.gz
+/usr/share/doc/xterm/xterm.log.html
+/usr/share/doc/xterm/xterm.faq.html
+/usr/share/doc/xterm/xterm.faq.gz
+/usr/share/doc/xterm/changelog.Debian.gz
+/usr/share/doc/xterm/README.Debian
+/usr/share/doc/xterm/copyright
+/usr/share/doc/xterm/README.i18n.gz
+/usr/share/doc/xterm/ctlseqs.ms.gz
+/usr/share/doc/xterm/xterm.terminfo.gz
+/usr/share/doc-base
+/usr/share/doc-base/xterm-ctlseqs
+/usr/share/doc-base/xterm-faq
+/usr/share/menu
+/usr/share/menu/xterm
+/usr/share/pixmaps
+/usr/share/pixmaps/xterm-color_32x32.xpm
+/usr/share/pixmaps/xterm-color_48x48.xpm
+/usr/share/pixmaps/xterm_32x32.xpm
+/usr/share/pixmaps/xterm_48x48.xpm
+/etc
+/etc/X11
+/etc/X11/app-defaults
+/etc/X11/app-defaults/KOI8RXTerm
+/etc/X11/app-defaults/UXTerm
+/etc/X11/app-defaults/XTerm
+/etc/X11/app-defaults/XTerm-color
commit fa40140f8d0b7793585c0656cafc872dbb5b5c2c
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Dec 10 08:24:32 2008 +0100

    APT: Iterate over all pending events in the main loop during tests to allow the dbus object to unregister

diff --git a/backends/apt/tests.py b/backends/apt/tests.py
index ec63a2e..b98486e 100755
--- a/backends/apt/tests.py
+++ b/backends/apt/tests.py
@@ -37,6 +37,7 @@ import apt
 import apt_pkg
 import dbus
 import dbus.mainloop.glib
+import gobject
 import mox
 import nose.tools
 
@@ -52,10 +53,17 @@ class AptBackendTestCase(mox.MoxTestBase):
     def setUp(self):
         """Create a mox factory and a backend instance"""
         mox.MoxTestBase.setUp(self)
-        loop = dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
-        bus = dbus.SessionBus(mainloop=loop)
+        dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+        bus = dbus.SessionBus()
         bus_name = dbus.service.BusName(PACKAGEKIT_DBUS_SERVICE, bus=bus)
         self.backend = PackageKitAptBackend(bus_name, PACKAGEKIT_DBUS_PATH)
+        self.loop = gobject.MainLoop()
+
+    def tearDown(self):
+        mox.MoxTestBase.tearDown(self)
+        context = self.loop.get_context()
+        while context.pending():
+            context.iteration()
 
     @nose.tools.timed(10)
     def testSearchName(self):
commit 40a8c0f7d14c4b87db952f92187f718dfbe266e9
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Dec 10 08:18:25 2008 +0100

    APT: Do not report a package twice if the file search string matches more than once

diff --git a/backends/apt/aptDBUSBackend.py b/backends/apt/aptDBUSBackend.py
index 87c7399..9281850 100755
--- a/backends/apt/aptDBUSBackend.py
+++ b/backends/apt/aptDBUSBackend.py
@@ -555,7 +555,7 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             for installed_file in self._get_installed_files(pkg):
                 if filename in installed_file:
                     self._emit_visible_package(filters, pkg)
-                    continue
+                    break
         self.Finished(EXIT_SUCCESS)
 
     @serialize
commit 2d67f19bfae2eacbb70ce9c96ed8abd7501e12c3
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Dec 10 07:47:44 2008 +0100

    APT: Use the root of apt to search for files

diff --git a/backends/apt/aptDBUSBackend.py b/backends/apt/aptDBUSBackend.py
index a30bcf1..87c7399 100755
--- a/backends/apt/aptDBUSBackend.py
+++ b/backends/apt/aptDBUSBackend.py
@@ -1931,7 +1931,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         This method should be obsolete by the apt.package.Package.installedFiles
         attribute as soon as the consolidate branch of python-apt gets merged
         """
-        path = "/var/lib/dpkg/info/%s.list" % pkg.name
+        path = os.path.join(apt_pkg.Config["Dir"],
+                            "var/lib/dpkg/info/%s.list" % pkg.name)
         try:
             list = open(path)
             files = list.read().decode().split("\n")
commit 935d929773ded2776ebb477feb231997c0de7b32
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Dec 10 07:44:12 2008 +0100

    APT: Start a new testing framework using mox and nose - Google's toilettes are really a source of inspiration

diff --git a/backends/apt/status.test b/backends/apt/status.test
new file mode 100644
index 0000000..3617e09
--- /dev/null
+++ b/backends/apt/status.test
@@ -0,0 +1,40 @@
+Package: xterm
+Status: install ok installed
+Priority: optional
+Section: x11
+Installed-Size: 1112
+Maintainer: Debian X Strike Force <debian-x at lists.debian.org>
+Architecture: i386
+Version: 235-1
+Provides: x-terminal-emulator
+Depends: xbitmaps, libc6 (>= 2.7-1), libfontconfig1 (>= 2.4.0), libice6 (>= 1:1.0.0), libncurses5 (>= 5.6+20071006-3), libsm6, libx11-6, libxaw7, libxext6, libxft2 (>> 2.1.1), libxmu6, libxt6
+Recommends: x11-utils | xutils
+Suggests: xfonts-cyrillic
+Conffiles:
+ /etc/X11/app-defaults/KOI8RXTerm dd942bff017ee9cfc2bb97bbdd7378b6
+ /etc/X11/app-defaults/UXTerm 952670ddfbb90d0a7c36e87e7a796595
+ /etc/X11/app-defaults/XTerm ec0c680b99b0f69f8d5d3318bd1a862e
+ /etc/X11/app-defaults/XTerm-color 657eb990e33aeddb17c7e2185321878c
+Description: X terminal emulator
+ xterm is a terminal emulator for the X Window System.  It provides DEC VT102
+ and Tektronix 4014 compatible terminals for programs that cannot use the
+ window system directly.  This version implements ISO/ANSI colors and most of
+ the control sequences used by DEC VT220 terminals.
+ .
+ This package provides four commands: xterm, which is the traditional
+ terminal emulator; uxterm, which is a wrapper around xterm that is
+ intelligent about locale settings (especially those which use the UTF-8
+ character encoding), but which requires the luit program from the x11-utils
+ package; koi8rxterm, a wrapper similar to uxterm for locales that use the
+ KOI8-R character set; and lxterm, a simple wrapper that chooses which of the
+ previous commands to execute based on the user's locale settings.
+ .
+ A complete list of control sequences supported by the X terminal emulator
+ is provided in /usr/share/doc/xterm.
+ .
+ The xterm program uses bitmap images provided by the xbitmaps package.
+ .
+ Those interested in using koi8rxterm will likely want to install the
+ xfonts-cyrillic package as well.
+Homepage: http://invisible-island.net/xterm/xterm.html
+
diff --git a/backends/apt/test.py b/backends/apt/test.py
deleted file mode 100755
index 9a2d716..0000000
--- a/backends/apt/test.py
+++ /dev/null
@@ -1,156 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-"""
-Provides unit test of the apt backend of PackageKit
-
-Copyright (C) 2008 Sebastian Heinlein <glatzor at ubuntu.com>
-
-Licensed under the GNU General Public License Version 2
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-Licensed under the GNU General Public License Version 2
-"""
-
-__author__  = "Sebastian Heinlein <devel at glatzor.de>"
-
-import os
-import shutil
-import subprocess
-import time
-import unittest
-
-import apt
-import dbus
-import gobject
-
-import apt
-import apt_pkg
-import aptDBUSBackend
-from packagekit.enums import *
-import packagekit.client
-
-PKG_ID = 'yum;3.2.12-1.2;i386;Debian'
-
-apt_pkg.InitConfig()
-root = os.path.join(os.getcwd(), "testroot")
-config = apt_pkg.Config
-config.Set("Dir", root)
-config.Set("Dir::State::status",
-           os.path.join(root, "/var/lib/dpkg/status"))
-
-class AptBackendTestCase(unittest.TestCase):
-
-    def setUp(self):
-        """
-        Setup the package client which tiggers the tests and an apt cache to
-        compare the results
-        """
-        self.running = True
-        self.pk = packagekit.client.PackageKitClient()
-        self.cache = apt.Cache()
-        self.cache.open(None)
-
-    def tearDown(self):
-        """
-        Completely remove the client interface and the cache
-        """
-        del(self.pk)
-        del(self.cache)
-
-    def _setUpChroot(self):
-        if os.path.exists("testroot/"):
-            shutil.rmtree("testroot/")
-
-    def testGetUpdates(self):
-        """
-        Perfrom a call of GetUpdates and compare the results to the ones from
-        an apt cache implementation
-
-        FIXME: Should smart be used here instead of apt?
-        """
-        # Get updates from packagekit
-        pkgs = self.pk.GetUpdates()
-        # get updates from apt 
-        self.cache.upgrade()
-        blocked = map(lambda p: p.name,
-                      filter(lambda p: p.isUpgradable and not p.markedUpgrade,
-                             self.cache))
-        marked = map(lambda p: p.name, self.cache.getChanges())
-        for p in pkgs:
-            name = p.id.split(";")[0]
-            if p.info == INFO_BLOCKED:
-                if name in blocked:
-                    blocked.remove(name)
-                else:
-                    self.fail("PackageKit reported a blocked update in "
-                              "contrast to apt")
-            else:
-                if name in marked:
-                    marked.remove(name)
-                else:
-                    self.fail("PackageKit returned an update in "
-                              "contrast to apt")
-        self.assertTrue(marked == blocked == [], 
-                        "PackageKit didn't return all updates:"
-                        "blocked: %s, available: %s" % (blocked, marked))
- 
-    def testResolve(self):
-        """
-        Check if PackageKit can resolve the package name xterm to a correct
-        package id
-        """
-        pkgs = self.pk.Resolve("none", "xterm")
-        self.failUnless(len(pkgs) == 1 and pkgs[0].id.startswith("xterm;"),
-                        "PackageKit returned wrong package(s) for xterm:"
-                        "%s" % pkgs)
-
-    def testInstallPackages(self):
-        """
-        Check installation of a package
-        """
-        if self.cache["yum"].isInstalled:
-            self.pk.RemovePackages([PKG_ID], self._callback)
-        self.pk.InstallPackages([PKG_ID], self._callback)
-        self.cache.open(None)
-        self.assertTrue(self.cache["yum"].isInstalled,
-                        "yum was not installed")
-
-    def testRemovePackages(self):
-        """
-        Check removal of a package
-        """
-        if not self.cache["yum"].isInstalled:
-            self.pk.InstallPackages([PKG_ID], self._callback)
-        self.pk.RemovePackages([PKG_ID], self._callback)
-        self.cache.open(None)
-        self.assertFalse(self.cache["yum"].isInstalled,
-                         "yum is still installed")
-
-    def _callback(self, status, percentage, subpercentage, elapsed,
-                  remaining, allow_cancel):
-        """
-        Callback for packagekit methods which take a long time. 
-        This method isn't currently of any use
-        """
-        return True
-
-
-def main():
-    unittest.main()
-
-if __name__ == '__main__':
-    main()
-
-# vim: ts=4 et sts=4
diff --git a/backends/apt/test.sh b/backends/apt/test.sh
new file mode 100755
index 0000000..425ec0b
--- /dev/null
+++ b/backends/apt/test.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+nosetests --with-coverage --cover-package=aptDBUSBackend --pdb tests.py
diff --git a/backends/apt/tests.py b/backends/apt/tests.py
new file mode 100755
index 0000000..ec63a2e
--- /dev/null
+++ b/backends/apt/tests.py
@@ -0,0 +1,95 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+Provides unit test of the apt backend of PackageKit
+
+Copyright (C) 2008 Sebastian Heinlein <glatzor at ubuntu.com>
+
+Licensed under the GNU General Public License Version 2
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+Licensed under the GNU General Public License Version 2
+"""
+
+__author__  = "Sebastian Heinlein <devel at glatzor.de>"
+
+import threading
+import time
+import os
+import shutil
+import sys
+import tempfile
+import unittest
+
+import apt
+import apt_pkg
+import dbus
+import dbus.mainloop.glib
+import mox
+import nose.tools
+
+from aptDBUSBackend import PackageKitAptBackend, PACKAGEKIT_DBUS_SERVICE
+from packagekit.enums import *
+from packagekit.daemonBackend import PACKAGEKIT_DBUS_INTERFACE, PACKAGEKIT_DBUS_PATH
+
+TEMPDIR = tempfile.mkdtemp(prefix="apt-backend-test")
+
+class AptBackendTestCase(mox.MoxTestBase):
+    """Test suite for the APT backend"""
+
+    def setUp(self):
+        """Create a mox factory and a backend instance"""
+        mox.MoxTestBase.setUp(self)
+        loop = dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+        bus = dbus.SessionBus(mainloop=loop)
+        bus_name = dbus.service.BusName(PACKAGEKIT_DBUS_SERVICE, bus=bus)
+        self.backend = PackageKitAptBackend(bus_name, PACKAGEKIT_DBUS_PATH)
+
+    @nose.tools.timed(10)
+    def testSearchName(self):
+        """Test the doSearchName method"""
+        self.mox.StubOutWithMock(self.backend, "Package")
+        self.backend.Package('installed', 'xterm;235-1;i386;',
+                             'X terminal emulator')
+        self.mox.ReplayAll()
+        self.backend.doSearchName("none", "xterm")
+        while threading.activeCount() > 1:
+            time.sleep(1)
+
+def setup():
+    """Create a temporary and very simple chroot for apt"""
+    apt_pkg.InitConfig()
+    config = apt_pkg.Config
+    config.Set("Dir", TEMPDIR)
+    config.Set("Dir::State::status",
+               os.path.join(TEMPDIR, "var/lib/dpkg/status"))
+    os.makedirs(os.path.join(TEMPDIR, "var/lib/apt/lists"))
+    os.makedirs(os.path.join(TEMPDIR, "var/cache/apt/partial"))
+    os.makedirs(os.path.join(TEMPDIR, "var/lib/dpkg"))
+    shutil.copy("status.test", os.path.join(TEMPDIR, "var/lib/dpkg/status"))
+
+def teardown():
+    """Clear up temporary files"""
+    if os.path.exists(TEMPDIR):
+        shutil.rmtree(TEMPDIR)
+
+def usage():
+    print "ERROR: Run ./test.sh instead"
+    sys.exit(1)
+
+if __name__ == "__main__":
+    usage()
+
+# vim: ts=4 et sts=4
commit f890a0a421387888eb2468ee889988f36ff36db6
Merge: a4136be... d2a4e4b...
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Dec 10 06:30:54 2008 +0100

    Merge branch 'master' of git+ssh://glatzor@git.packagekit.org/srv/git/PackageKit

commit a4136be320a58c9c9aee441443a38fb8fcb95d64
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Dec 10 06:30:24 2008 +0100

    APT: Fix order of locking and threading

diff --git a/backends/apt/aptDBUSBackend.py b/backends/apt/aptDBUSBackend.py
index 87b2649..a30bcf1 100755
--- a/backends/apt/aptDBUSBackend.py
+++ b/backends/apt/aptDBUSBackend.py
@@ -535,8 +535,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self._canceled.set()
         self._canceled.wait()
 
-    @threaded
     @serialize
+    @threaded
     def doSearchFile(self, filters, filename):
         '''
         Implement the apt2-search-file functionality
@@ -558,8 +558,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                     continue
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     def doSearchGroup(self, filters, group):
         '''
         Implement the apt2-search-group functionality
@@ -576,8 +576,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                 self._emit_visible_package(filters, pkg)
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     def doSearchName(self, filters, search):
         '''
         Implement the apt2-search-name functionality
@@ -594,8 +594,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                 self._emit_visible_package(filters, pkg)
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     def doSearchDetails(self, filters, search):
         '''
         Implement the apt2-search-details functionality
@@ -639,8 +639,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
 
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     def doGetDistroUpgrades(self):
         '''
         Implement the {backend}-get-distro-upgrades functionality
@@ -676,8 +676,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                                "The latest stable release")
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     def doGetUpdates(self, filters):
         '''
         Implement the {backend}-get-update functionality
@@ -743,8 +743,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self._cache.clear()
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     def doGetUpdateDetail(self, pkg_ids):
         '''
         Implement the {backend}-get-update-details functionality
@@ -802,8 +802,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                               changelog, state, issued, updated)
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     def doGetDetails(self, pkg_ids):
         '''
         Implement the {backend}-get-details functionality
@@ -835,8 +835,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                          pkg.homepage, pkg.packageSize)
             self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     @unlock_cache_afterwards
     def doUpdateSystem(self):
         '''
@@ -860,8 +860,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self.PercentageChanged(100)
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     @unlock_cache_afterwards
     def doRemovePackages(self, ids, deps=True, auto=False):
         '''
@@ -911,8 +911,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self.PercentageChanged(100)
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     def doGetRepoList(self, filters):
         '''
         Implement the {backend}-get-repo-list functionality
@@ -992,8 +992,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             self.RepoDetail(repo_id, description, enabled)
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     def doRepoEnable(self, repo_id, enable):
         '''
         Implement the {backend}-repo-enable functionality
@@ -1079,8 +1079,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             return
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     @unlock_cache_afterwards
     def doUpdatePackages(self, ids):
         '''
@@ -1127,8 +1127,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         pklog.debug("Sending success signal")
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     def doDownloadPackages(self, ids, dest):
         '''
         Implement the {backend}-download-packages functionality
@@ -1193,8 +1193,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         pklog.debug("Sending success signal")
         self.Finished(EXIT_SUCCESS)
  
-    @threaded
     @serialize
+    @threaded
     @unlock_cache_afterwards
     def doInstallPackages(self, ids):
         '''
@@ -1240,8 +1240,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         pklog.debug("Sending success signal")
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     @unlock_cache_afterwards
     def doInstallFiles(self, trusted, full_paths):
         '''
@@ -1309,8 +1309,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self.PercentageChanged(100)
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     @unlock_cache_afterwards
     def doRefreshCache(self, force):
         '''
@@ -1334,8 +1334,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self.PercentageChanged(100)
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     def doGetPackages(self, filters):
         '''
         Implement the apt2-get-packages functionality
@@ -1352,8 +1352,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                 self._emit_package(pkg)
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     def doResolve(self, filters, names):
         '''
         Implement the apt2-resolve functionality
@@ -1374,8 +1374,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
                 return
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     def doGetDepends(self, filter, ids, recursive=False):
         '''
         Implement the apt2-get-depends functionality
@@ -1442,8 +1442,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self._cache.clear()
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     def doGetRequires(self, filter, ids, recursive=False):
         '''
         Implement the apt2-get-requires functionality
@@ -1499,8 +1499,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
         self._cache.clear()
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     def doWhatProvides(self, filters, provides_type, search):
         def get_mapping_db(path):
             """
@@ -1588,8 +1588,8 @@ class PackageKitAptBackend(PackageKitBaseBackend):
             return
         self.Finished(EXIT_SUCCESS)
 
-    @threaded
     @serialize
+    @threaded
     def doGetFiles(self, package_ids):
         """
         Emit the Files signal which includes the files included in a package
commit 3737a78f2065d7d00a6ffceca10b63c122e0b584
Author: Sebastian Heinlein <devel at glatzor.de>
Date:   Wed Dec 10 06:17:33 2008 +0100

    Daemon backend: Separate object creation and running

diff --git a/backends/apt/aptDBUSBackend.py b/backends/apt/aptDBUSBackend.py
index 8d1626f..87b2649 100755
--- a/backends/apt/aptDBUSBackend.py
+++ b/backends/apt/aptDBUSBackend.py
@@ -2183,6 +2183,7 @@ def run():
     bus = dbus.SystemBus(mainloop=loop)
     bus_name = dbus.service.BusName(PACKAGEKIT_DBUS_SERVICE, bus=bus)
     manager = PackageKitAptBackend(bus_name, PACKAGEKIT_DBUS_PATH)
+    manager.run()
 
 def main():
     parser = optparse.OptionParser(description="APT backend for PackageKit")
diff --git a/lib/python/packagekit/daemonBackend.py b/lib/python/packagekit/daemonBackend.py
index 6929e26..35ad9f5 100644
--- a/lib/python/packagekit/daemonBackend.py
+++ b/lib/python/packagekit/daemonBackend.py
@@ -171,6 +171,7 @@ class PackageKitBaseBackend(dbus.service.Object):
 
         self.loop = gobject.MainLoop()
 
+    def run(self):
         gobject.timeout_add_seconds(INACTIVE_CHECK_INTERVAL,
                                     self.check_for_inactivity)
         self.last_action_time = time.time()
commit d2a4e4b53800b353d10554202836aa8714274551
Author: Fabian Affolter <fabian at bernewireless.net>
Date:   Tue Dec 9 22:09:33 2008 +0000

    Updated German translation
    
    Transmitted-via: Transifex (translate.fedoraproject.org)

diff --git a/po/de.po b/po/de.po
index fa640e2..9018279 100644
--- a/po/de.po
+++ b/po/de.po
@@ -14,8 +14,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: packagekit.master.de\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-20 01:35+0000\n"
-"PO-Revision-Date: 2008-11-20 12:45+0100\n"
+"POT-Creation-Date: 2008-11-24 01:31+0000\n"
+"PO-Revision-Date: 2008-12-09 22:43+0100\n"
 "Last-Translator: Fabian Affolter <fab at fedoraproject.org>\n"
 "Language-Team: German <i18 at redhat.com>\n"
 "MIME-Version: 1.0\n"
@@ -23,42 +23,42 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: KBabel 1.11.4\n"
+"X-Poedit-Language: German\n"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:286
+#: ../client/pk-console.c:287
 msgid "Details about the update:"
 msgstr "Details über die Aktualisierung"
 
-#: ../client/pk-console.c:479
+#: ../client/pk-console.c:480
 msgid "Please restart the computer to complete the update."
-msgstr "Bitte starten Sie den Computer neu, um das Update abzuschließen."
+msgstr "Bitte starten Sie den Computer neu, um das Update abzuschliessen."
 
-#: ../client/pk-console.c:481
+#: ../client/pk-console.c:482
 msgid "Please logout and login to complete the update."
 msgstr "Bitte erneut einloggen um das Update abzuschließen."
 
-#: ../client/pk-console.c:483
-#, fuzzy
+#: ../client/pk-console.c:484
 msgid "Please restart the application as it is being used."
 msgstr "Starten Sie die Anwendung neu, da sie benutzt wird."
 
 #. TRANSLATORS: The package is already installed on the system
-#: ../client/pk-console.c:595
+#: ../client/pk-console.c:596
 #, c-format
-msgid "The package '%s' is already installed"
-msgstr "Das Paket '%s' ist bereits installiert"
+msgid "The package %s is already installed"
+msgstr "Das Paket %s ist bereits installiert"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:603
+#: ../client/pk-console.c:604
 #, c-format
-msgid "The package '%s' could not be installed: %s"
-msgstr "Das Paket '%s' konnte nicht installiert werden: %s"
+msgid "The package %s could not be installed: %s"
+msgstr "Das Paket %s konnte nicht installiert werden: %s"
 
 #. TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows
-#: ../client/pk-console.c:628
-#: ../client/pk-console.c:655
-#: ../client/pk-console.c:751
-#: ../client/pk-console.c:868
+#: ../client/pk-console.c:629
+#: ../client/pk-console.c:656
+#: ../client/pk-console.c:752
+#: ../client/pk-console.c:869
 #: ../client/pk-tools-common.c:61
 #: ../client/pk-tools-common.c:79
 #: ../client/pk-tools-common.c:86
@@ -67,475 +67,469 @@ msgid "Internal error: %s"
 msgstr "Interner Fehler: %s"
 
 #. TRANSLATORS: There was an error installing the packages. The detailed error follows
-#: ../client/pk-console.c:636
-#: ../client/pk-console.c:1263
+#: ../client/pk-console.c:637
+#: ../client/pk-console.c:1264
 #, c-format
 msgid "This tool could not install the packages: %s"
 msgstr "Konnte folgende Pakete nicht installieren: %s"
 
 #. TRANSLATORS: There was an error installing the files. The detailed error follows
-#: ../client/pk-console.c:663
+#: ../client/pk-console.c:664
 #, c-format
 msgid "This tool could not install the files: %s"
 msgstr "Die Dateien konnten nicht installieren werden: %s"
 
 #. TRANSLATORS: The package name was not found in the installed list. The detailed error follows
-#: ../client/pk-console.c:719
+#: ../client/pk-console.c:720
 #, c-format
-msgid "This tool could not remove '%s': %s"
-msgstr "Konnte nicht entfernen '%s': %s"
+msgid "This tool could not remove %s: %s"
+msgstr "Dieses Werkzeug konnte %s nicht entfernen: %s"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:742
-#: ../client/pk-console.c:813
+#: ../client/pk-console.c:743
+#: ../client/pk-console.c:781
+#: ../client/pk-console.c:814
 #, c-format
 msgid "This tool could not remove the packages: %s"
 msgstr "Konnte folgende Pakete nicht entfernen: %s"
 
-#. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:780
-#, c-format
-msgid "This tool could not remove the packages: '%s'"
-msgstr "Dieser Werkzeug konnte das Paket nicht entfernen: '%s'"
-
 #. TRANSLATORS: When removing, we might have to remove other dependencies
-#: ../client/pk-console.c:792
+#: ../client/pk-console.c:793
 msgid "The following packages have to be removed:"
 msgstr "Die folgenden Pakete müssen entfernt werden:"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:799
+#: ../client/pk-console.c:800
 msgid "Proceed removing additional packages?"
 msgstr "Sollen die zusätzlichen Pakete entfernt werden?"
 
 #. TRANSLATORS: We did not remove any packages
-#: ../client/pk-console.c:804
+#: ../client/pk-console.c:805
 msgid "The package removal was canceled!"
 msgstr "Die Entfernung der Pakete wurde abgebrochen!"
 
 #. TRANSLATORS: The package name was not found in any software sources
-#: ../client/pk-console.c:845
+#: ../client/pk-console.c:846
 #, c-format
-msgid "This tool could not download the package '%s' as it could not be found"
-msgstr "Das Paket '%s' konnte nicht gefunden und heruntergeladen werden"
+msgid "This tool could not download the package %s as it could not be found"
+msgstr "Dieses Werkzeug konnte das Paket %s konnte nicht finden und somit nicht herunterladen"
 
 #. TRANSLATORS: Could not download the packages for some reason. The detailed error follows
-#: ../client/pk-console.c:876
+#: ../client/pk-console.c:877
 #, c-format
 msgid "This tool could not download the packages: %s"
 msgstr "Konnte folgende Pakete nicht herunterladen: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:903
-#: ../client/pk-console.c:912
+#: ../client/pk-console.c:904
+#: ../client/pk-console.c:913
 #, c-format
-msgid "This tool could not update '%s': %s"
-msgstr "Konnte nicht aktualisieren '%s': %s"
+msgid "This tool could not update %s: %s"
+msgstr "Dieses Werkzeug konnte %s nicht aktualisieren: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:934
-#: ../client/pk-console.c:942
+#: ../client/pk-console.c:935
+#: ../client/pk-console.c:943
 #, c-format
-msgid "This tool could not get the requirements for '%s': %s"
-msgstr "Konnte die Vorraussetzungen nicht bekommen für '%s': %s"
+msgid "This tool could not get the requirements for %s: %s"
+msgstr "Dieses Werkzeug konnte die Voraussetzungen für %s nicht beziehen: %s"
 
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
-#: ../client/pk-console.c:964
-#: ../client/pk-console.c:972
+#: ../client/pk-console.c:965
+#: ../client/pk-console.c:973
 #, c-format
-msgid "This tool could not get the dependencies for '%s': %s"
-msgstr "Es konnten keine Abhängigkeiten für '%s' gezogen werden: %s"
+msgid "This tool could not get the dependencies for %s: %s"
+msgstr "Dieses Werkzeug konnten keine Abhängigkeiten für %s beziehen: %s"
 
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
-#: ../client/pk-console.c:994
-#: ../client/pk-console.c:1002
+#: ../client/pk-console.c:995
+#: ../client/pk-console.c:1003
 #, c-format
-msgid "This tool could not get package details for '%s': %s"
-msgstr "Konnte die Paketdetails nicht abrufen für '%s': %s"
+msgid "This tool could not get package details for %s: %s"
+msgstr "Dieses Werkzeug konnte die Paketdetails für %s nicht abrufen: %s"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1024
+#: ../client/pk-console.c:1025
 #, c-format
-msgid "This tool could not find the files for '%s': %s"
-msgstr "Die Dateien für '%s' konnten nicht gefunden werden: %s"
+msgid "This tool could not find the files for %s: %s"
+msgstr "Dieses Werkzeug konnte die Dateien für %s nicht finden: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1032
+#: ../client/pk-console.c:1033
 #, c-format
-msgid "This tool could not get the file list for '%s': %s"
-msgstr "Die Datei-Liste für '%s konnte nicht erstellt werden ': %s"
+msgid "This tool could not get the file list for %s: %s"
+msgstr "Dieses Werkzeug konnte die Datei-Liste für %s nicht beziehen: %s"
 
 #. TRANSLATORS: There was an error getting the list of packages. The filename follows
-#: ../client/pk-console.c:1054
+#: ../client/pk-console.c:1055
 #, c-format
 msgid "File already exists: %s"
 msgstr "Datei bereits vorhanden: %s"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1059
-#: ../client/pk-console.c:1115
-#: ../client/pk-console.c:1190
+#: ../client/pk-console.c:1060
+#: ../client/pk-console.c:1116
+#: ../client/pk-console.c:1191
 msgid "Getting package list"
 msgstr "Beziehe Paket-Liste"
 
 #. TRANSLATORS: There was an error getting the list of packages. The detailed error follows
-#: ../client/pk-console.c:1065
-#: ../client/pk-console.c:1121
-#: ../client/pk-console.c:1196
+#: ../client/pk-console.c:1066
+#: ../client/pk-console.c:1122
+#: ../client/pk-console.c:1197
 #, c-format
 msgid "This tool could not get package list: %s"
 msgstr "Konnte folgende Pakete nicht beziehen: %s"
 
 #. TRANSLATORS: There was an error saving the list
-#: ../client/pk-console.c:1076
+#: ../client/pk-console.c:1077
 msgid "Failed to save to disk"
 msgstr "Speicher auf die Festplatte fehlgeschlagen"
 
 #. TRANSLATORS: There was an error getting the list. The filename follows
-#: ../client/pk-console.c:1110
-#: ../client/pk-console.c:1185
+#: ../client/pk-console.c:1111
+#: ../client/pk-console.c:1186
 #, c-format
 msgid "File does not exist: %s"
 msgstr "Datei nicht vorhanden: %s"
 
 #. TRANSLATORS: header to a list of packages newly added
-#: ../client/pk-console.c:1142
+#: ../client/pk-console.c:1143
 msgid "Packages to add"
 msgstr "Paket zum Hinzufügen"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1150
+#: ../client/pk-console.c:1151
 msgid "Packages to remove"
 msgstr "Pakete zum Entfernen"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1218
+#: ../client/pk-console.c:1219
 msgid "No new packages need to be installed"
 msgstr "Keine neuen Pakete müssen installiert werden"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1224
+#: ../client/pk-console.c:1225
 msgid "To install"
-msgstr "ZUm Installieren"
+msgstr "Zum Installieren"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1235
+#: ../client/pk-console.c:1236
 msgid "Searching for package: "
 msgstr "Suche nach Paket:"
 
 #. TRANSLATORS: package was not found -- this is the end of a string ended in ...
-#: ../client/pk-console.c:1239
+#: ../client/pk-console.c:1240
 msgid "not found."
 msgstr "nicht gefunden."
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1250
+#: ../client/pk-console.c:1251
 msgid "No packages can be found to install"
 msgstr "Keine Pakete zum Installieren gefunden"
 
 #. TRANSLATORS: installing new packages from package list
-#: ../client/pk-console.c:1256
+#: ../client/pk-console.c:1257
 msgid "Installing packages"
 msgstr "Installiere Pakete"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1292
+#: ../client/pk-console.c:1293
 #, c-format
-msgid "This tool could not find the update details for '%s': %s"
-msgstr "Es konnten für '%s' keine Aktualisierungsdetails gefunden werden : %s"
+msgid "This tool could not find the update details for %s: %s"
+msgstr "Dieses Werkzeug konnte für %s keine Aktualisierungsdetails finden : %s"
 
 #. TRANSLATORS: There was an error getting the details about the update for the package. The detailed error follows
-#: ../client/pk-console.c:1300
+#: ../client/pk-console.c:1301
 #, c-format
-msgid "This tool could not get the update details for '%s': %s"
-msgstr "Es konnten keine Aktualisierungsdetails für '%s' gefunden werden: %s"
+msgid "This tool could not get the update details for %s: %s"
+msgstr "Dieses Werkzeug konnten keine Aktualisierungsdetails für '%s' finden: %s"
 
 #. TRANSLATORS: This was an unhandled error, and we don't have _any_ context
-#: ../client/pk-console.c:1346
+#: ../client/pk-console.c:1347
 msgid "Error:"
 msgstr "Fehler:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1360
+#: ../client/pk-console.c:1361
 msgid "Package description"
 msgstr "Paketbeschreibung"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1393
+#: ../client/pk-console.c:1394
 msgid "Package files"
 msgstr "Paket-Dateien"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1402
+#: ../client/pk-console.c:1403
 msgid "No files"
 msgstr "Keine Dateien"
 
 #. TRANSLATORS: This a request for a GPG key signature from the backend, which the client will prompt for later
-#: ../client/pk-console.c:1425
+#: ../client/pk-console.c:1426
 msgid "Repository signature required"
 msgstr "Signatur der Paketquellen benötigt"
 
 #. TRANSLATORS: This a prompt asking the user to import the security key
-#: ../client/pk-console.c:1435
+#: ../client/pk-console.c:1436
 msgid "Do you accept this signature?"
 msgstr "Akzeptieren Sie diese Signatur?"
 
 #. TRANSLATORS: This is where the user declined the security key
-#: ../client/pk-console.c:1439
+#: ../client/pk-console.c:1440
 msgid "The signature was not accepted."
 msgstr "Diese Signatur wurde nicht akzeptiert."
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1473
+#: ../client/pk-console.c:1474
 msgid "End user license agreement required"
 msgstr "Endbenutzer Lizenzvereinbarung benötigt"
 
 #. TRANSLATORS: This a prompt asking the user to agree to the license
-#: ../client/pk-console.c:1480
+#: ../client/pk-console.c:1481
 msgid "Do you agree to this license?"
 msgstr "Sind Sie mit dieser Lizenz einverstanden?"
 
 #. TRANSLATORS: This is where the user declined the license
-#: ../client/pk-console.c:1484
+#: ../client/pk-console.c:1485
 msgid "The license was refused."
 msgstr "Die Lizenz wurde zurückgewiesen."
 
 #. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1513
+#: ../client/pk-console.c:1514
 msgid "The daemon crashed mid-transaction!"
 msgstr "Der Dämon stürzte während der Transaktion ab!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1566
+#: ../client/pk-console.c:1567
 msgid "PackageKit Console Interface"
 msgstr "PackageKit-Konsolen-Interface"
 
-#: ../client/pk-console.c:1566
+#: ../client/pk-console.c:1567
 msgid "Subcommands:"
 msgstr "Unterbefehle:"
 
-#: ../client/pk-console.c:1657
-#: ../client/pk-generate-pack.c:183
-#: ../client/pk-monitor.c:114
-#: ../src/pk-main.c:190
+#: ../client/pk-console.c:1658
+#: ../client/pk-generate-pack.c:184
+#: ../client/pk-monitor.c:115
+#: ../src/pk-main.c:191
 msgid "Show extra debugging information"
-msgstr "Zeige extra Debug-Informationen"
+msgstr "Zeige weitere Debug-Informationen"
 
-#: ../client/pk-console.c:1659
-#: ../client/pk-monitor.c:116
+#: ../client/pk-console.c:1660
+#: ../client/pk-monitor.c:117
 msgid "Show the program version and exit"
 msgstr "Zeige Programm-Version und beende"
 
-#: ../client/pk-console.c:1661
+#: ../client/pk-console.c:1662
 msgid "Set the filter, e.g. installed"
 msgstr "Setze den Filter, z.B. installiert"
 
-#: ../client/pk-console.c:1663
+#: ../client/pk-console.c:1664
 msgid "Exit without waiting for actions to complete"
 msgstr "Beende, ohne auf Beendigung der Aktionen zu warten"
 
 #. TRANSLATORS: This is when we could not connect to the system bus, and is fatal
-#: ../client/pk-console.c:1685
+#: ../client/pk-console.c:1691
 msgid "This tool could not connect to system DBUS."
 msgstr "Dieses Werkzeug konnte nicht zum System-DBUS verbinden."
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1770
+#: ../client/pk-console.c:1776
 msgid "The filter specified was invalid"
 msgstr "Der angegebene Filter war ungültig"
 
-#: ../client/pk-console.c:1787
+#: ../client/pk-console.c:1793
 msgid "You need to specify a search type, e.g. name"
 msgstr "Sie müssen einen Suchtyp angeben, z.B. einen Namen"
 
-#: ../client/pk-console.c:1792
-#: ../client/pk-console.c:1799
-#: ../client/pk-console.c:1806
-#: ../client/pk-console.c:1813
-#: ../client/pk-console.c:1924
-#: ../client/pk-console.c:1934
-#: ../client/pk-console.c:1941
-#: ../client/pk-console.c:1948
+#: ../client/pk-console.c:1798
+#: ../client/pk-console.c:1805
+#: ../client/pk-console.c:1812
+#: ../client/pk-console.c:1819
+#: ../client/pk-console.c:1930
+#: ../client/pk-console.c:1940
+#: ../client/pk-console.c:1947
+#: ../client/pk-console.c:1954
 msgid "You need to specify a search term"
 msgstr "Sie müssen einen Suchwert angeben"
 
-#: ../client/pk-console.c:1818
+#: ../client/pk-console.c:1824
 msgid "Invalid search type"
 msgstr "Ungültiger Suchtyp"
 
-#: ../client/pk-console.c:1823
+#: ../client/pk-console.c:1829
 msgid "You need to specify a package or file to install"
 msgstr "Sie müssen ein Paket oder eine Datei zum installieren angeben"
 
-#: ../client/pk-console.c:1830
+#: ../client/pk-console.c:1836
 msgid "You need to specify a type, key_id and package_id"
 msgstr "Sie müssen einen Typ, Schlüssel_id und Paket_id auswählen"
 
-#: ../client/pk-console.c:1837
+#: ../client/pk-console.c:1843
 msgid "You need to specify a package to remove"
 msgstr "Sie müssen ein Paket zum Löschen angeben"
 
-#: ../client/pk-console.c:1843
+#: ../client/pk-console.c:1849
 msgid "You need to specify the destination directory and then the packages to download"
 msgstr "Sie müssen ein Zielverzeichnis und dann die Pakete zum herunterladen angeben"
 
-#: ../client/pk-console.c:1848
+#: ../client/pk-console.c:1854
 msgid "Directory not found"
 msgstr "Verzeichnis nicht gefunden"
 
-#: ../client/pk-console.c:1854
+#: ../client/pk-console.c:1860
 msgid "You need to specify a licence identifier (eula-id)"
 msgstr "Sie müssen eine Lizenz (eula-id) angeben"
 
-#: ../client/pk-console.c:1870
+#: ../client/pk-console.c:1876
 msgid "You need to specify a package name to resolve"
 msgstr "Sie müssen einen Paketnamen zum Auflösen angeben"
 
-#: ../client/pk-console.c:1879
-#: ../client/pk-console.c:1886
+#: ../client/pk-console.c:1885
+#: ../client/pk-console.c:1892
 msgid "You need to specify a repository name"
 msgstr "Sie müssen einen Repository-Namen angeben"
 
-#: ../client/pk-console.c:1893
+#: ../client/pk-console.c:1899
 msgid "You need to specify a repo name/parameter and value"
-msgstr "Sie müssen einen Repositorynamen/Parameter und Wert angeben"
+msgstr "Sie müssen einen Repository-Namen/Parameter und Wert angeben"
 
-#: ../client/pk-console.c:1906
+#: ../client/pk-console.c:1912
 msgid "You need to specify an action, e.g. 'update-system'"
 msgstr "Sie müssen eine Aktion angeben, z.B. 'update-system'"
 
-#: ../client/pk-console.c:1911
+#: ../client/pk-console.c:1917
 msgid "You need to specify a correct role"
 msgstr "Sie müssen eine korrekte Rolle angeben"
 
-#: ../client/pk-console.c:1916
+#: ../client/pk-console.c:1922
 msgid "Failed to get last time"
 msgstr "Die letzte Zeit konnte nicht herausgefunden werden"
 
-#: ../client/pk-console.c:1955
+#: ../client/pk-console.c:1961
 msgid "You need to specify a package to find the details for"
 msgstr "Sie müssen ein Paket, für das nach Details gesucht wird, angeben"
 
-#: ../client/pk-console.c:1962
+#: ../client/pk-console.c:1968
 msgid "You need to specify a package to find the files for"
 msgstr "Sie müssen ein Paket, für das nach Dateien gesucht wird, angeben"
 
-#: ../client/pk-console.c:1969
+#: ../client/pk-console.c:1975
 msgid "You need to specify a list file to create"
 msgstr "Sie müssen eine Dateiliste zum Erzeugen angeben"
 
-#: ../client/pk-console.c:1977
-#: ../client/pk-console.c:1985
+#: ../client/pk-console.c:1983
+#: ../client/pk-console.c:1991
 msgid "You need to specify a list file to open"
 msgstr "Sie müssen eine Dateiliste zum Öffnen angeben"
 
 #. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:2038
+#: ../client/pk-console.c:2044
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "Option '%s' wird nicht unterstützt"
 
 #. TRANSLATORS: User does not have permission to do this
-#: ../client/pk-console.c:2051
+#: ../client/pk-console.c:2057
 msgid "You don't have the necessary privileges for this operation"
 msgstr "Sie haben nicht die notwendigen Privilegien für diese Operation"
 
 #. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:2054
+#: ../client/pk-console.c:2060
 msgid "Command failed"
 msgstr "Befehl fehlgeschlagen"
 
 #. TRANSLATORS: This is the state of the transaction
-#: ../client/pk-generate-pack.c:99
+#: ../client/pk-generate-pack.c:100
 msgid "Downloading"
 msgstr "Lade herunter"
 
 #. TRANSLATORS: This is when the main packages are being downloaded
-#: ../client/pk-generate-pack.c:119
+#: ../client/pk-generate-pack.c:120
 msgid "Downloading packages"
 msgstr "Lade Pakete herunter"
 
 #. TRANSLATORS: This is when the dependency packages are being downloaded
-#: ../client/pk-generate-pack.c:124
+#: ../client/pk-generate-pack.c:125
 msgid "Downloading dependencies"
-msgstr "Lade Abhängihkeiten herunter"
+msgstr "Lade Abhängigkeiten herunter"
 
-#: ../client/pk-generate-pack.c:185
+#: ../client/pk-generate-pack.c:186
 msgid "Set the file name of dependencies to be excluded"
 msgstr "Setze den Dateiname der Abhängigkeiten, die ausgeschlossen werden"
 
-#: ../client/pk-generate-pack.c:187
+#: ../client/pk-generate-pack.c:188
 msgid "The output directory (the current directory is used if ommitted)"
 msgstr "Das Ausgabe-Verzeichnis ()"
 
-#: ../client/pk-generate-pack.c:189
-#, fuzzy
+#: ../client/pk-generate-pack.c:190
 msgid "The package to be put into the service pack"
-msgstr "Das Paket in das Service-Pack integrieren"
+msgstr "Das Paket in das Service-Paket integrieren"
 
-#: ../client/pk-generate-pack.c:191
+#: ../client/pk-generate-pack.c:192
 msgid "Put all updates available in the service pack"
-msgstr "Füge alle Aktualisierungen dem Service-Pack hinzu"
+msgstr "Füge alle Aktualisierungen dem Service-Paket hinzu"
 
 #. TRANSLATORS: This is when the user fails to supply the correct arguments
-#: ../client/pk-generate-pack.c:214
+#: ../client/pk-generate-pack.c:220
 msgid "Neither --package or --updates option selected."
 msgstr "Weder --package noch --updates wurden als Option gewählt."
 
 #. TRANSLATORS: This is when the user fails to supply just one argument
-#: ../client/pk-generate-pack.c:222
+#: ../client/pk-generate-pack.c:228
 msgid "Both options selected."
 msgstr "Beide Optionen ausgewählt."
 
 #. TRANSLATORS: This is when file already exists
-#: ../client/pk-generate-pack.c:255
+#: ../client/pk-generate-pack.c:261
 msgid "A pack with the same name already exists, do you want to overwrite it?"
-msgstr "Ein Pack mit dem selben Namen existiert bereits, möchten Sie es überschreiben?"
+msgstr "Ein Paket mit dem selben Namen existiert bereits, möchten Sie es überschreiben?"
 
 #. TRANSLATORS: This is when the pack was not overwritten
-#: ../client/pk-generate-pack.c:258
+#: ../client/pk-generate-pack.c:264
 msgid "The pack was not overwritten."
-msgstr "Das Pack wurde nicht überschrieben."
+msgstr "Das Paket wurde nicht überschrieben."
 
 #. TRANSLATORS: This is when the temporary directory cannot be created, the directory name follows
-#: ../client/pk-generate-pack.c:270
+#: ../client/pk-generate-pack.c:276
 msgid "Failed to create directory:"
 msgstr "Verzeichnis konnte nicht erstellt werden:"
 
 #. TRANSLATORS: This is when the list of packages from the remote computer cannot be opened
-#: ../client/pk-generate-pack.c:279
+#: ../client/pk-generate-pack.c:285
 msgid "Failed to open package list."
 msgstr "Konnte Paketliste nicht öffnen."
 
 #. TRANSLATORS: The package name is being matched up to available packages
-#: ../client/pk-generate-pack.c:289
+#: ../client/pk-generate-pack.c:295
 msgid "Finding package name."
 msgstr "Suche Paketname."
 
 #. TRANSLATORS: This is when the package cannot be found in any software source. The detailed error follows
-#: ../client/pk-generate-pack.c:293
+#: ../client/pk-generate-pack.c:299
 #, c-format
 msgid "Failed to find package '%s': %s"
 msgstr "Paket '%s' konnte nicht gefunden werden: %s"
 
 #. TRANSLATORS: This is telling the user we are in the process of making the pack
-#: ../client/pk-generate-pack.c:309
+#: ../client/pk-generate-pack.c:315
 msgid "Creating service pack..."
-msgstr "Erstelle Servicepack..."
+msgstr "Erstelle Servicepack ..."
 
 #. TRANSLATORS: we succeeded in making the file
-#: ../client/pk-generate-pack.c:316
+#: ../client/pk-generate-pack.c:322
 #, c-format
 msgid "Service pack created '%s'"
 msgstr "Servicepack erstellt '%s'"
 
 #. TRANSLATORS: we failed to make te file
-#: ../client/pk-generate-pack.c:320
+#: ../client/pk-generate-pack.c:326
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "Erzeugen von '%s' fehlgeschlagen: %s"
 
-#: ../client/pk-monitor.c:126
+#: ../client/pk-monitor.c:132
 msgid "PackageKit Monitor"
 msgstr "PackageKit-Monitor"
 
@@ -560,57 +554,57 @@ msgid "Please enter a number from 1 to %i: "
 msgstr "Bitte geben Sie eine Zahl zwischen 1 und %i ein: "
 
 #. TRANSLATORS: when we are getting data from the daemon
-#: ../contrib/packagekit-plugin/src/contents.cpp:291
+#: ../contrib/packagekit-plugin/src/contents.cpp:294
 msgid "Getting package information..."
-msgstr "Bekomme Paket-Informationen..."
+msgstr "Bekomme Paket-Informationen ..."
 
 #. TRANSLATORS: run an applicaiton
-#: ../contrib/packagekit-plugin/src/contents.cpp:297
+#: ../contrib/packagekit-plugin/src/contents.cpp:300
 #, c-format
 msgid "Run %s"
 msgstr "Starte %s"
 
 #. TRANSLATORS: show the installed version of a package
-#: ../contrib/packagekit-plugin/src/contents.cpp:303
+#: ../contrib/packagekit-plugin/src/contents.cpp:306
 msgid "Installed version"
 msgstr "Installierte Version"
 
 #. TRANSLATORS: run the application now
-#: ../contrib/packagekit-plugin/src/contents.cpp:311
+#: ../contrib/packagekit-plugin/src/contents.cpp:314
 #, c-format
 msgid "Run version %s now"
 msgstr "Starte Version %s jetzt"
 
-#: ../contrib/packagekit-plugin/src/contents.cpp:317
+#: ../contrib/packagekit-plugin/src/contents.cpp:320
 msgid "Run now"
 msgstr "Starte jetzt"
 
 #. TRANSLATORS: update to a new version of the package
-#: ../contrib/packagekit-plugin/src/contents.cpp:323
+#: ../contrib/packagekit-plugin/src/contents.cpp:326
 #, c-format
 msgid "Update to version %s"
 msgstr "Aktualisiere auf Version %s"
 
 #. TRANSLATORS: To install a package
-#: ../contrib/packagekit-plugin/src/contents.cpp:329
+#: ../contrib/packagekit-plugin/src/contents.cpp:332
 #, c-format
 msgid "Install %s now"
 msgstr "Installiere %s jetzt"
 
 #. TRANSLATORS: the version of the package
-#: ../contrib/packagekit-plugin/src/contents.cpp:332
+#: ../contrib/packagekit-plugin/src/contents.cpp:335
 msgid "Version"
 msgstr "Version"
 
 #. TRANSLATORS: noting found, so can't install
-#: ../contrib/packagekit-plugin/src/contents.cpp:337
+#: ../contrib/packagekit-plugin/src/contents.cpp:340
 msgid "No packages found for your system"
 msgstr "Keine Pakete für Ihr System gefunden"
 
 #. TRANSLATORS: package is being installed
-#: ../contrib/packagekit-plugin/src/contents.cpp:342
+#: ../contrib/packagekit-plugin/src/contents.cpp:345
 msgid "Installing..."
-msgstr "Installiere..."
+msgstr "Installiere ..."
 
 #: ../data/packagekit-catalog.xml.in.h:1
 msgid "PackageKit Catalog"
@@ -624,60 +618,62 @@ msgstr "PackageKit Service-Pack"
 msgid "PackageKit Package List"
 msgstr "PackageKit-Paketliste"
 
-#: ../src/pk-main.c:85
+#: ../src/pk-main.c:86
 msgid "Startup failed due to security policies on this machine."
 msgstr "Startfehler wegen Sicherheitseinstellungen auf diesem Rechner"
 
-#: ../src/pk-main.c:86
+#: ../src/pk-main.c:87
 msgid "This can happen for two reasons:"
 msgstr "Dies kann aus zwei Gründen passieren:"
 
-#: ../src/pk-main.c:87
+#: ../src/pk-main.c:88
 msgid "The correct user is not launching the executable (usually root)"
 msgstr "Der korrekte Benutzer führt nicht das Programm aus (normalerweise root)"
 
-#: ../src/pk-main.c:88
+#: ../src/pk-main.c:89
 msgid "The org.freedesktop.PackageKit.conf file is not installed in the system directory:"
 msgstr "Die org.freedesktop.PackageKit.conf-Datei ist nicht auf Ihrem Rechner im system-Verzeichnis:"
 
-#: ../src/pk-main.c:186
+#: ../src/pk-main.c:187
 msgid "Packaging backend to use, e.g. dummy"
 msgstr "Verwende Packaging-Backend z.B. dummy"
 
-#: ../src/pk-main.c:188
+#: ../src/pk-main.c:189
 msgid "Daemonize and detach from the terminal"
 msgstr "Dämonisiere und löse vom Terminal ab"
 
-#: ../src/pk-main.c:192
+#: ../src/pk-main.c:193
 msgid "Disable the idle timer"
 msgstr "Deaktiviere Idle-Timer"
 
-#: ../src/pk-main.c:194
+#: ../src/pk-main.c:195
 msgid "Show version and exit"
 msgstr "Zeige Version und beende"
 
-#: ../src/pk-main.c:196
+#: ../src/pk-main.c:197
 msgid "Exit after a small delay"
 msgstr "Beende nach kurzer Verzögerung"
 
-#: ../src/pk-main.c:198
+#: ../src/pk-main.c:199
 #, fuzzy
 msgid "Exit after the engine has loaded"
 msgstr "Beende, nachdem die Kern geladen wurde"
 
-#: ../src/pk-main.c:207
+#: ../src/pk-main.c:213
 msgid "PackageKit service"
 msgstr "PackageKit-Dienst"
 
-#: ../src/pk-main.c:243
+#: ../src/pk-main.c:249
 msgid "Cannot connect to the system bus"
 msgstr "Konnte nicht zum System-Bus verbinden"
 
-#: ../src/pk-main.c:292
+#: ../src/pk-main.c:298
 #, c-format
 msgid "Error trying to start: %s\n"
 msgstr "Fehler beim Starten von: %s\n"
 
+#~ msgid "This tool could not remove the packages: '%s'"
+#~ msgstr "Dieser Werkzeug konnte das Paket nicht entfernen: '%s'"
 #~ msgid "Update detail"
 #~ msgstr "Details werden aktualisiert"
 #~ msgid "A system restart is required"
commit 3de708d4b378c5aa4fbeddb60d158f22c9ebb110
Author: Richard Hughes <hughsie at localhost.localdomain>
Date:   Tue Dec 9 16:47:11 2008 +0000

    yum: don't show DeprecationWarnings from yum

diff --git a/backends/yum/pk-backend-yum.c b/backends/yum/pk-backend-yum.c
index 7b77f6f..b9ac83e 100644
--- a/backends/yum/pk-backend-yum.c
+++ b/backends/yum/pk-backend-yum.c
@@ -37,6 +37,8 @@ backend_stderr_cb (PkBackend *backend, const gchar *output)
 		return FALSE;
 	if (strstr (output, "GPG") != NULL)
 		return FALSE;
+	if (strstr (output, "DeprecationWarning") != NULL)
+		return FALSE;
 	return TRUE;
 }
 
commit a28a0b614482ea87783b21ca9d0bbf6ad5031ec2
Author: Richard Hughes <hughsie at localhost.localdomain>
Date:   Tue Dec 9 16:18:33 2008 +0000

    trivial: add the empty m4 directory into git

diff --git a/m4/.gitignore b/m4/.gitignore
new file mode 100644
index 0000000..e69de29
commit a5df7a0c196e2d4280212ca000ec5ec65945c043
Author: Richard Hughes <hughsie at localhost.localdomain>
Date:   Tue Dec 9 16:17:16 2008 +0000

    bugfix: define a macro directory so we work with newer versions of libtool

diff --git a/configure.ac b/configure.ac
index f78e27c..aedd0bf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,6 +4,7 @@ AC_INIT(PackageKit, 0.4.0)
 AC_CONFIG_SRCDIR(src)
 AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
 AM_CONFIG_HEADER(config.h)
+AC_CONFIG_MACRO_DIR([m4])
 
 # Should we enable extra stuff automatically?
 # set no for release builds, yes for development builds
commit cdfb790c20b2838d6f436dc163ec8081a8299cf9
Author: Valeriy Lyasotskiy <onestep at ukr.net>
Date:   Tue Nov 18 12:15:58 2008 +0200

    feature: added arch linux recognition code to pk_get_distro_id

diff --git a/lib/packagekit-glib/pk-common.c b/lib/packagekit-glib/pk-common.c
index 032f4b7..dfe5ad4 100644
--- a/lib/packagekit-glib/pk-common.c
+++ b/lib/packagekit-glib/pk-common.c
@@ -150,6 +150,19 @@ pk_get_distro_id (void)
 		goto out;
 	}
 
+	/* check for Arch */
+	ret = g_file_test ("/etc/arch-release", G_FILE_TEST_EXISTS);
+	if (ret) {
+		/* we can't get arch from /etc */
+		arch = pk_get_machine_type ();
+		if (arch == NULL)
+			goto out;
+
+		/* complete! */
+		distro = g_strdup_printf ("arch-current-%s", arch);
+		goto out;
+	}
+
 out:
 	g_strfreev (split);
 	g_free (arch);


More information about the PackageKit-commit mailing list