[packagekit] packagekit: Branch 'master' - 13 commits

Richard Hughes hughsient at kemper.freedesktop.org
Sat Apr 5 12:05:53 PDT 2008


 NEWS                                    |   54 ++++++++++++++++++++++++++++++++
 backends/dummy/pk-backend-dummy.c       |    4 +-
 backends/yum/helpers/yumBackend.py      |   38 ++++++++++++++++------
 backends/yum2/helpers/yumDBUSBackend.py |    2 -
 backends/zypp/zypp-utils.cpp            |   52 ++++++++++++++++++++++++------
 client/pk-console.c                     |   36 ++++++++++++++-------
 client/pk-monitor.c                     |   18 ++++++++++
 configure.ac                            |    2 -
 docs/html/pk-download.html              |    1 
 libpackagekit/pk-client.c               |   19 +++++------
 libpackagekit/pk-client.h               |    1 
 libpackagekit/pk-extra.c                |   46 ++++++++++++++++++++++-----
 python/packagekit/backend.py            |   14 ++++++--
 src/pk-backend-dbus.c                   |   11 +++---
 src/pk-backend-spawn.c                  |   33 ++++++++++++++++++-
 src/pk-backend.c                        |   17 +++++-----
 src/pk-backend.h                        |    1 
 src/pk-engine.c                         |   19 ++++++-----
 src/pk-interface-transaction.xml        |    1 
 src/pk-interface.xml                    |    1 
 src/pk-transaction.c                    |   20 +++++++----
 21 files changed, 305 insertions(+), 85 deletions(-)

New commits:
commit a183844b01574fedcbf61f3ef15b9069b0862260
Author: Richard Hughes <richard at hughsie.com>
Date:   Sat Apr 5 19:48:29 2008 +0100

    release version 0.1.11

diff --git a/NEWS b/NEWS
index e1bef77..3a6c9a7 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,57 @@
+Version 0.1.11
+~~~~~~~~~~~~~~
+Released: 2008-04-05
+
+* Backends:
+ - conary: Added update (Ken VanDine)
+ - poldek: Implement 'newest' filter (Marcin Banasiak)
+ - yum: Don't mention yum so much in the detailed error text. rh#440701
+ - yum: Fix YumBaseError message handling in _runYumTransaction (Luke Macken)
+ - yum: Extended repo_signature_required and implemented new signature-install method (Tim Lauridsen)
+ - yum: Fix one char at a line messages (Tim Lauridsen)
+ - yum: Make get-requires pkg return the packages there need to removed if pkg is removed (Tim Lauridsen)
+ - yum: Rewrite the yum search functions so that we filter out available packages. rh#440122 (Richard Hughes)
+ - yum: Copy the basename filtering from yum2 into yum. rh#440066 (Richard Hughes)
+ - yum: Replace unicode decoding errors with question marks. rh#439764 (Luke Macken)
+ - yum: Fixed traceback in install_file. rhbz #439728 (Tim Lauridsen)
+ - yum: Fix 'No package to instal' typo, fixes rh#439778 (Richard Hughes)
+ - yum: Correct some grammar pointed out in rh#439780 (Richard Hughes)
+ - yum2: Remove file extensions from the MetaDataMap (Luke Macken)
+ - yum2: Set NoPercentageUpdates when doing a dep resolve (Richard Hughes)
+ - zypp: Added rpm-exceptions (Stefan Haas)
+ - zypp: Make more verbose if resolution failed (Stefan Haas)
+ - zypp: Changes for libzypp 4.7.0 (Stefan Haas)
+ - zypp: Check for valid package names before emitting. BNC#372429. (Scott Reeves)
+
+* New features:
+ - Add a hash table into PkExtra so we can see if the query is likely to succeed
+   - This reduces the profile time from 340ms to 69ms on my machine (Richard Hughes)
+ - Make libgbus send a signal when something is replaced on the bus (Richard Hughes)
+ - The daemon will quit when the conf file is changed (Richard Hughes)
+ - Add a new DBUS interface org.freedesktop.PackageKit.Notify so we can get system wide
+   notifications from PackageKit, without having to bodge PkClient to do this for us. (Richard Hughes)
+ - Add the NEWEST filter (Richard Hughes)
+ - Change the API of GetRepoList(void) to GetRepoList(filter) (Richard Hughes)
+
+* Bugfixes:
+ - Use BUFSIZ chunks of memory in PkSpawn to use the entire page of memory (Richard Hughes)
+ - Make PkRestart and PkConf use the same config file logic (Richard Hughes)
+ - Correct some problems after Matthias' daemon review (Richard Hughes)
+ - Constify *_get_type, it's top of the profile and could be unrolled (Richard Hughes)
+ - Fix 'No package to instal' typo. rh#439778 (Richard Hughes)
+ - Install pk-import-* into libexec as they are not meant to be run by users (Richard Hughes)
+ - Display why the pk-import-* tools fail to open the PkExtra database. rh#439738 (Richard Hughes)
+ - Resolve the path before passing it to the backend. rh#439692 (Richard Hughes)
+ - When the backend has finished, manually set the allow cancel to FALSE (Richard Hughes)
+ - Set the backend exit code to canceled when we cancel the transaction (Richard Hughes)
+ - When asked to cancel, send ::set-allow-cancel(false) to update UI elements (Richard Hughes)
+ - Warn when we are doing PkClient actions when we don't need to (Richard Hughes)
+ - Update the dummy backend to be able to test the client tools (Richard Hughes)
+ - Ignore some errors like 'Already finished' when we try to cancel (Richard Hughes)
+ - Cancel a running client transaction if we try to reset it (Richard Hughes)
+ - Be more paranoid about sqlite status (Richard Hughes)
+ - Fix 'pkcon get repos' by actually waiting for the return value (Klaus Kämpf)
+
 Version 0.1.10
 ~~~~~~~~~~~~~~
 Released: 2008-03-28
diff --git a/configure.ac b/configure.ac
index 2415d89..ab51c23 100755
--- a/configure.ac
+++ b/configure.ac
@@ -7,7 +7,7 @@ AM_CONFIG_HEADER(config.h)
 
 # Should we enable extra stuff automatically?
 # set no for release builds, yes for development builds
-DEVELOPMENT_RELEASE=yes
+DEVELOPMENT_RELEASE=no
 
 # libtool versioning - this applies to libpackagekit
 #
diff --git a/docs/html/pk-download.html b/docs/html/pk-download.html
index 038dcec..9bfe477 100644
--- a/docs/html/pk-download.html
+++ b/docs/html/pk-download.html
@@ -59,6 +59,7 @@ Released versions are found on
 <tr><td>0.1.8</td><td></td><td>2008-02-21</td></tr>
 <tr><td>0.1.9</td><td></td><td>2008-03-04</td></tr>
 <tr><td>0.1.10</td><td></td><td>2008-03-28</td></tr>
+<tr><td>0.1.11</td><td></td><td>2008-04-05</td></tr>
 </table>
 
 <h2>Dependencies</h2>
commit 00dcedfc1796e7393eebf60d570360810ecf0c04
Author: Richard Hughes <richard at hughsie.com>
Date:   Sat Apr 5 19:24:36 2008 +0100

    don't warn when the database is new set and we try to use the methods

diff --git a/libpackagekit/pk-extra.c b/libpackagekit/pk-extra.c
index 39baaa9..c23f717 100644
--- a/libpackagekit/pk-extra.c
+++ b/libpackagekit/pk-extra.c
@@ -145,7 +145,12 @@ pk_extra_populate_locale_cache (PkExtra *extra)
 
 	g_return_val_if_fail (PK_IS_EXTRA (extra), FALSE);
 	g_return_val_if_fail (extra->priv->locale != NULL, FALSE);
-	g_return_val_if_fail (extra->priv->db != NULL, FALSE);
+
+	/* we failed to open */
+	if (extra->priv->db == NULL) {
+		pk_debug ("no database");
+		return FALSE;
+	}
 
 	/* get summary packages */
 	statement = "SELECT package, summary FROM localised";
@@ -172,7 +177,12 @@ pk_extra_populate_package_cache (PkExtra *extra)
 	gint rc;
 
 	g_return_val_if_fail (PK_IS_EXTRA (extra), FALSE);
-	g_return_val_if_fail (extra->priv->db != NULL, FALSE);
+
+	/* we failed to open */
+	if (extra->priv->db == NULL) {
+		pk_debug ("no database");
+		return FALSE;
+	}
 
 	/* get packages */
 	statement = "SELECT package FROM data";
@@ -313,7 +323,12 @@ pk_extra_get_localised_detail (PkExtra *extra, const gchar *package, gchar **sum
 	g_return_val_if_fail (extra->priv->locale != NULL, FALSE);
 	g_return_val_if_fail (package != NULL, FALSE);
 	g_return_val_if_fail (summary != NULL, FALSE);
-	g_return_val_if_fail (extra->priv->db != NULL, FALSE);
+
+	/* we failed to open */
+	if (extra->priv->db == NULL) {
+		pk_debug ("no database");
+		return FALSE;
+	}
 
 	/* can we optimize the call */
 	value = g_hash_table_lookup (extra->priv->hash_locale, package);
@@ -383,7 +398,12 @@ pk_extra_get_package_detail (PkExtra *extra, const gchar *package, gchar **icon,
 
 	g_return_val_if_fail (PK_IS_EXTRA (extra), FALSE);
 	g_return_val_if_fail (extra->priv->locale != NULL, FALSE);
-	g_return_val_if_fail (extra->priv->db != NULL, FALSE);
+
+	/* we failed to open */
+	if (extra->priv->db == NULL) {
+		pk_debug ("no database");
+		return FALSE;
+	}
 
 	/* can we optimize the call */
 	value = g_hash_table_lookup (extra->priv->hash_package, package);
@@ -439,10 +459,15 @@ pk_extra_set_localised_detail (PkExtra *extra, const gchar *package, const gchar
 	gint rc;
 
 	g_return_val_if_fail (PK_IS_EXTRA (extra), FALSE);
-	g_return_val_if_fail (extra->priv->locale != NULL, FALSE);
-	g_return_val_if_fail (extra->priv->db != NULL, FALSE);
 	g_return_val_if_fail (package != NULL, FALSE);
 	g_return_val_if_fail (summary != NULL, FALSE);
+	g_return_val_if_fail (extra->priv->locale != NULL, FALSE);
+
+	/* we failed to open */
+	if (extra->priv->db == NULL) {
+		pk_debug ("no database");
+		return FALSE;
+	}
 
 	/* the row might already exist */
 	statement = g_strdup_printf ("DELETE FROM localised WHERE "
@@ -496,10 +521,15 @@ pk_extra_set_package_detail (PkExtra *extra, const gchar *package, const gchar *
 	gint rc;
 
 	g_return_val_if_fail (PK_IS_EXTRA (extra), FALSE);
-	g_return_val_if_fail (extra->priv->locale != NULL, FALSE);
-	g_return_val_if_fail (extra->priv->db != NULL, FALSE);
 	g_return_val_if_fail (package != NULL, FALSE);
 	g_return_val_if_fail (icon != NULL || exec != NULL, FALSE);
+	g_return_val_if_fail (extra->priv->locale != NULL, FALSE);
+
+	/* we failed to open */
+	if (extra->priv->db == NULL) {
+		pk_debug ("no database");
+		return FALSE;
+	}
 
 	/* the row might already exist */
 	statement = g_strdup_printf ("DELETE FROM data WHERE package = '%s'", package);
commit bc15ac4d4506d7732f1bc6888a324ad90e421e9d
Author: Richard Hughes <richard at hughsie.com>
Date:   Sat Apr 5 19:21:27 2008 +0100

    don't prompt for the gpg promtp, it's too important to break for the release

diff --git a/client/pk-console.c b/client/pk-console.c
index 21cc750..fe3f29c 100644
--- a/client/pk-console.c
+++ b/client/pk-console.c
@@ -1055,6 +1055,10 @@ pk_console_repo_signature_required_cb (PkClient *client, const gchar *package_id
 	g_print ("Fingerprint: %s\n", key_fingerprint);
 	g_print ("Timestamp:   %s\n", key_timestamp);
 
+	/* it didn't quite cut it for the release */
+	g_debug ("Importing keys is not supported yet. We're working on it!");
+	return;
+
 	/* get user input */
 	import = pk_console_get_prompt (_("Okay to import key?"), FALSE);
 	if (!import) {
commit b31098000252b93a3cec4f6fd4c639cefb612dea
Author: Richard Hughes <richard at hughsie.com>
Date:   Sat Apr 5 12:33:46 2008 +0100

    more RepoSigReqd fixes

diff --git a/client/pk-console.c b/client/pk-console.c
index 866a7ff..21cc750 100644
--- a/client/pk-console.c
+++ b/client/pk-console.c
@@ -1039,19 +1039,29 @@ pk_console_files_cb (PkClient *client, const gchar *package_id,
  * pk_console_repo_signature_required_cb:
  **/
 static void
-pk_console_repo_signature_required_cb (PkClient *client, const gchar *repository_name, const gchar *key_url,
-				       const gchar *key_userid, const gchar *key_id, const gchar *key_fingerprint,
-				       const gchar *key_timestamp, PkSigTypeEnum type, gpointer data)
+pk_console_repo_signature_required_cb (PkClient *client, const gchar *package_id, const gchar *repository_name,
+				       const gchar *key_url, const gchar *key_userid, const gchar *key_id,
+				       const gchar *key_fingerprint, const gchar *key_timestamp,
+				       PkSigTypeEnum type, gpointer data)
 {
-	g_print (_("Signature Required\n"));
-	g_print ("  repo name:       '%s'\n", repository_name);
-	g_print ("  key url:         '%s'\n", key_url);
-	g_print ("  key userid:      '%s'\n", key_userid);
-	g_print ("  key id:          '%s'\n", key_id);
-	g_print ("  key fingerprint: '%s'\n", key_fingerprint);
-	g_print ("  key timestamp:   '%s'\n", key_timestamp);
-	g_print ("  key type:        '%s'\n", pk_sig_type_enum_to_text (type));
+	gboolean import;
 
+	g_print ("Repository Signature Required\n");
+	g_print ("Package:     %s\n", package_id);
+	g_print ("Name:        %s\n", repository_name);
+	g_print ("URL:         %s\n", key_url);
+	g_print ("User:        %s\n", key_userid);
+	g_print ("ID:          %s\n", key_id);
+	g_print ("Fingerprint: %s\n", key_fingerprint);
+	g_print ("Timestamp:   %s\n", key_timestamp);
+
+	/* get user input */
+	import = pk_console_get_prompt (_("Okay to import key?"), FALSE);
+	if (!import) {
+		g_print ("%s\n", _("Did not import key, task will fail"));
+		return;
+	}
+	g_print ("TODO: import key\n");
 }
 
 /**
diff --git a/client/pk-monitor.c b/client/pk-monitor.c
index 9099657..3ef55d8 100644
--- a/client/pk-monitor.c
+++ b/client/pk-monitor.c
@@ -121,8 +121,8 @@ pk_monitor_repo_signature_required_cb (PkClient *client, const gchar *package_id
 				       PkSigTypeEnum type, gpointer data)
 {
 	gchar *tid = pk_client_get_tid (client);
-	g_print ("emitting RepoSignatureRequired package_id=%s, tid:%s, %s, %s, %s, %s, %s, %s, %s\n",
-		 package_id, tid, repository_name, key_url, key_userid, key_id,
+	g_print ("RepoSignatureRequired tid:%s, package_id=%s, %s, %s, %s, %s, %s, %s, %s\n",
+		 tid, package_id, repository_name, key_url, key_userid, key_id,
 		 key_fingerprint, key_timestamp, pk_sig_type_enum_to_text (type));
 	g_free (tid);
 }
diff --git a/src/pk-engine.c b/src/pk-engine.c
index e16affb..fff703f 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -330,11 +330,11 @@ pk_engine_repo_signature_required_cb (PkBackend *backend, const gchar *package_i
 	}
 	type_text = pk_sig_type_enum_to_text (type);
 
-	pk_debug ("emitting repo_signature_required package_id=%s, tid:%s, %s, %s, %s, %s, %s, %s, %s",
-		  package_id, c_tid, repository_name, key_url, key_userid, key_id,
+	pk_debug ("emitting repo_signature_required tid:%s, package_id=%s, %s, %s, %s, %s, %s, %s, %s",
+		  c_tid, package_id, repository_name, key_url, key_userid, key_id,
 		  key_fingerprint, key_timestamp, type_text);
 	g_signal_emit (engine, signals [PK_ENGINE_REPO_SIGNATURE_REQUIRED], 0,
-		       package_id, c_tid, repository_name, key_url, key_userid, key_id,
+		       c_tid, package_id, repository_name, key_url, key_userid, key_id,
 		       key_fingerprint, key_timestamp, type_text);
 }
 
commit 0973ee5f38b4142d42a8d372017eb567ab9eaeeb
Author: Richard Hughes <richard at hughsie.com>
Date:   Sat Apr 5 12:03:14 2008 +0100

    fix compile of the zypp backend

diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index 786bbbc..25d4a30 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -357,6 +357,7 @@ gboolean
 zypp_signature_required (PkBackend *backend, const zypp::PublicKey &key)
 {
         gboolean ok = pk_backend_repo_signature_required (backend,
+                        "dummy;0.0.1;i386;data",
                         "TODO: Repo-Name",
                         key.path ().c_str (),
                         key.id ().c_str (),
@@ -372,6 +373,7 @@ gboolean
 zypp_signature_required (PkBackend *backend, const std::string &file, const std::string &id)
 {
         gboolean ok = pk_backend_repo_signature_required (backend,
+                        "dummy;0.0.1;i386;data",
                         "TODO: Repo-Name",
                         file.c_str (),
                         id.c_str (),
@@ -387,6 +389,7 @@ gboolean
 zypp_signature_required (PkBackend *backend, const std::string &file)
 {
         gboolean ok = pk_backend_repo_signature_required (backend,
+                        "dummy;0.0.1;i386;data",
                         "TODO: Repo-Name",
                         file.c_str (),
                         "UNKNOWN",
commit d766cd0fd42f9a3240378229239387b83eae2bf1
Author: Richard Hughes <richard at hughsie.com>
Date:   Sat Apr 5 12:00:48 2008 +0100

    make RepoSignatureRequired actually work

diff --git a/backends/dummy/pk-backend-dummy.c b/backends/dummy/pk-backend-dummy.c
index 1f7a75c..5688672 100644
--- a/backends/dummy/pk-backend-dummy.c
+++ b/backends/dummy/pk-backend-dummy.c
@@ -307,8 +307,8 @@ backend_install_package (PkBackend *backend, const gchar *package_id)
 {
 	g_return_if_fail (backend != NULL);
 
-	if (pk_strequal (package_id,"vips-doc;7.12.4-2.fc8;noarch;linva")) {
-		pk_backend_repo_signature_required (backend, "updates", "http://example.com/gpgkey",
+	if (pk_strequal (package_id, "vips-doc;7.12.4-2.fc8;noarch;linva")) {
+		pk_backend_repo_signature_required (backend, package_id, "updates", "http://example.com/gpgkey",
 						    "Test Key (Fedora) fedora at example.com", "BB7576AC",
 						    "D8CC 06C2 77EC 9C53 372F  C199 B1EE 1799 F24F 1B08",
 						    "2007-10-04", PK_SIGTYPE_ENUM_GPG);
diff --git a/client/pk-monitor.c b/client/pk-monitor.c
index 3b67a92..9099657 100644
--- a/client/pk-monitor.c
+++ b/client/pk-monitor.c
@@ -112,6 +112,22 @@ pk_monitor_allow_cancel_cb (PkClient *client, gboolean allow_cancel, gpointer da
 }
 
 /**
+ * pk_monitor_repo_signature_required_cb:
+ **/
+static void
+pk_monitor_repo_signature_required_cb (PkClient *client, const gchar *package_id, const gchar *repository_name,
+				       const gchar *key_url, const gchar *key_userid, const gchar *key_id,
+				       const gchar *key_fingerprint, const gchar *key_timestamp,
+				       PkSigTypeEnum type, gpointer data)
+{
+	gchar *tid = pk_client_get_tid (client);
+	g_print ("emitting RepoSignatureRequired package_id=%s, tid:%s, %s, %s, %s, %s, %s, %s, %s\n",
+		 package_id, tid, repository_name, key_url, key_userid, key_id,
+		 key_fingerprint, key_timestamp, pk_sig_type_enum_to_text (type));
+	g_free (tid);
+}
+
+/**
  * pk_monitor_finished_cb:
  **/
 static void
@@ -217,6 +233,8 @@ main (int argc, char *argv[])
 			  G_CALLBACK (pk_monitor_package_cb), NULL);
 	g_signal_connect (client, "allow-cancel",
 			  G_CALLBACK (pk_monitor_allow_cancel_cb), NULL);
+	g_signal_connect (client, "repo-signature-required",
+			  G_CALLBACK (pk_monitor_repo_signature_required_cb), NULL);
 
 	notify = pk_notify_new ();
 	g_signal_connect (notify, "repo-list-changed",
diff --git a/libpackagekit/pk-client.c b/libpackagekit/pk-client.c
index 60b7941..8f98887 100644
--- a/libpackagekit/pk-client.c
+++ b/libpackagekit/pk-client.c
@@ -800,8 +800,9 @@ pk_client_files_cb (DBusGProxy  *proxy,
  * pk_client_repo_signature_required_cb:
  **/
 static void
-pk_client_repo_signature_required_cb (DBusGProxy *proxy, const gchar *tid, const gchar *repository_name,
-				      const gchar *key_url, const gchar *key_userid, const gchar *key_id,
+pk_client_repo_signature_required_cb (DBusGProxy *proxy, const gchar *tid, const gchar *package_id,
+				      const gchar *repository_name, const gchar *key_url,
+				      const gchar *key_userid, const gchar *key_id,
 				      const gchar *key_fingerprint, const gchar *key_timestamp,
 				      const gchar *type_text, PkClient *client)
 {
@@ -813,10 +814,10 @@ pk_client_repo_signature_required_cb (DBusGProxy *proxy, const gchar *tid, const
 		return;
 	}
 
-	pk_debug ("emit repo_signature_required tid:%s, %s, %s, %s, %s, %s, %s, %s",
-		  tid, repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp, type_text);
+	pk_debug ("emit repo_signature_required tid:%s, %s, %s, %s, %s, %s, %s, %s, %s",
+		  tid, package_id, repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp, type_text);
 	g_signal_emit (client, signals [PK_CLIENT_REPO_SIGNATURE_REQUIRED], 0,
-		       repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp, type_text);
+		       package_id, repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp, type_text);
 }
 
 /**
@@ -3202,9 +3203,9 @@ pk_client_class_init (PkClientClass *klass)
 		g_signal_new ("repo-signature-required",
 			      G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
 			      G_STRUCT_OFFSET (PkClientClass, repo_signature_required),
-			      NULL, NULL, pk_marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_UINT,
-			      G_TYPE_NONE, 7, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-			      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT);
+			      NULL, NULL, pk_marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_STRING_UINT,
+			      G_TYPE_NONE, 8, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+			      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT);
 	/**
 	 * PkClient::repo-detail:
 	 * @client: the #PkClient instance that emitted the signal
@@ -3520,7 +3521,7 @@ pk_client_init (PkClient *client)
 	dbus_g_proxy_add_signal (proxy, "RepoSignatureRequired",
 				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
 				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
 	dbus_g_proxy_connect_signal (proxy, "RepoSignatureRequired",
 				     G_CALLBACK (pk_client_repo_signature_required_cb), client, NULL);
 
diff --git a/libpackagekit/pk-client.h b/libpackagekit/pk-client.h
index 00779d4..3fd7753 100644
--- a/libpackagekit/pk-client.h
+++ b/libpackagekit/pk-client.h
@@ -118,6 +118,7 @@ struct _PkClientClass
 							 const gchar	*package_id,
 							 const gchar	*filelist);
 	void		(* repo_signature_required)	(PkClient	*client,
+							 const gchar	*package_id,
 							 const gchar	*repository_name,
 							 const gchar	*key_url,
 							 const gchar	*key_userid,
diff --git a/src/pk-backend-dbus.c b/src/pk-backend-dbus.c
index fb6bbbe..b3da9f9 100644
--- a/src/pk-backend-dbus.c
+++ b/src/pk-backend-dbus.c
@@ -242,13 +242,14 @@ pk_backend_dbus_message_cb (DBusGProxy *proxy, PkMessageEnum message,
  * pk_backend_dbus_repo_signature_required_cb:
  **/
 static void
-pk_backend_dbus_repo_signature_required_cb (DBusGProxy *proxy, const gchar *repository_name,
-					    const gchar *key_url, const gchar *key_userid,
-					    const gchar *key_id, const gchar *key_fingerprint,
-					    const gchar *key_timestamp, PkSigTypeEnum type, PkBackendDbus *backend_dbus)
+pk_backend_dbus_repo_signature_required_cb (DBusGProxy *proxy, const gchar *package_id,
+					    const gchar *repository_name, const gchar *key_url,
+					    const gchar *key_userid, const gchar *key_id,
+					    const gchar *key_fingerprint, const gchar *key_timestamp,
+					    PkSigTypeEnum type, PkBackendDbus *backend_dbus)
 {
 	pk_debug ("got signal");
-	pk_backend_repo_signature_required (backend_dbus->priv->backend, repository_name,
+	pk_backend_repo_signature_required (backend_dbus->priv->backend, package_id, repository_name,
 					    key_url, key_userid, key_id, key_fingerprint, key_timestamp, type);
 }
 
diff --git a/src/pk-backend-spawn.c b/src/pk-backend-spawn.c
index 0343e80..497c281 100644
--- a/src/pk-backend-spawn.c
+++ b/src/pk-backend-spawn.c
@@ -93,6 +93,7 @@ pk_backend_spawn_parse_stdout (PkBackendSpawn *backend_spawn, const gchar *line)
 	PkStatusEnum status_enum;
 	PkMessageEnum message_enum;
 	PkRestartEnum restart_enum;
+	PkSigTypeEnum sig_type;
 
 	g_return_val_if_fail (PK_IS_BACKEND_SPAWN (backend_spawn), FALSE);
 
@@ -315,7 +316,37 @@ pk_backend_spawn_parse_stdout (PkBackendSpawn *backend_spawn, const gchar *line)
 		}
 		pk_backend_no_percentage_updates (backend_spawn->priv->backend);
 	} else if (pk_strequal (command, "repo-signature-required")) {
-		ret = FALSE;
+
+		if (size != 9+99) {
+			pk_error ("invalid command '%s'", command);
+			ret = FALSE;
+			goto out;
+		}
+
+		sig_type = pk_sig_type_enum_from_text (sections[8]);
+		if (sig_type == PK_SIGTYPE_ENUM_UNKNOWN) {
+			pk_backend_message (backend_spawn->priv->backend, PK_MESSAGE_ENUM_DAEMON,
+					    "Sig enum not recognised, and hence ignored: '%s'", sections[8]);
+			ret = FALSE;
+			goto out;
+		}
+		if (pk_strzero (sections[1])) {
+			pk_backend_message (backend_spawn->priv->backend, PK_MESSAGE_ENUM_DAEMON,
+					    "package_id blank, and hence ignored: '%s'", sections[1]);
+			ret = FALSE;
+			goto out;
+		}
+		if (pk_strzero (sections[2])) {
+			pk_backend_message (backend_spawn->priv->backend, PK_MESSAGE_ENUM_DAEMON,
+					    "repository name blank, and hence ignored: '%s'", sections[2]);
+			ret = FALSE;
+			goto out;
+		}
+
+		/* pass _all_ of the data */
+		ret = pk_backend_repo_signature_required (backend_spawn->priv->backend, sections[1],
+							  sections[2], sections[3], sections[4],
+							  sections[5], sections[6], sections[7], sig_type);
 		goto out;
 	} else {
 		pk_warning ("invalid command '%s'", command);
diff --git a/src/pk-backend.c b/src/pk-backend.c
index b4ba9d9..2f4e507 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -756,7 +756,8 @@ pk_backend_files (PkBackend *backend, const gchar *package_id, const gchar *file
  * pk_backend_repo_signature_required:
  **/
 gboolean
-pk_backend_repo_signature_required (PkBackend *backend, const gchar *repository_name, const gchar *key_url,
+pk_backend_repo_signature_required (PkBackend *backend, const gchar *package_id,
+				    const gchar *repository_name, const gchar *key_url,
 				    const gchar *key_userid, const gchar *key_id, const gchar *key_fingerprint,
 				    const gchar *key_timestamp, PkSigTypeEnum type)
 {
@@ -770,10 +771,12 @@ pk_backend_repo_signature_required (PkBackend *backend, const gchar *repository_
 		return FALSE;
 	}
 
-	pk_debug ("emit repo-signature-required %s, %s, %s, %s, %s, %s, %i",
-		  repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp, type);
+	pk_debug ("emit repo-signature-required %s, %s, %s, %s, %s, %s, %s, %i",
+		  package_id, repository_name, key_url, key_userid, key_id,
+		  key_fingerprint, key_timestamp, type);
 	g_signal_emit (backend, signals [PK_BACKEND_REPO_SIGNATURE_REQUIRED], 0,
-		       repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp, type);
+		       package_id, repository_name, key_url, key_userid, key_id,
+		       key_fingerprint, key_timestamp, type);
 	return TRUE;
 }
 
@@ -1249,9 +1252,9 @@ pk_backend_class_init (PkBackendClass *klass)
 	signals [PK_BACKEND_REPO_SIGNATURE_REQUIRED] =
 		g_signal_new ("repo-signature-required",
 			      G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
-			      0, NULL, NULL, pk_marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_UINT,
-			      G_TYPE_NONE, 7, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
-			      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT);
+			      0, NULL, NULL, pk_marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_STRING_UINT,
+			      G_TYPE_NONE, 8, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+			      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT);
 	signals [PK_BACKEND_FINISHED] =
 		g_signal_new ("finished",
 			      G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
diff --git a/src/pk-backend.h b/src/pk-backend.h
index ad89bf4..ea98219 100644
--- a/src/pk-backend.h
+++ b/src/pk-backend.h
@@ -103,6 +103,7 @@ gboolean	 pk_backend_error_code			(PkBackend	*backend,
 							 PkErrorCodeEnum code,
 							 const gchar	*details, ...);
 gboolean         pk_backend_repo_signature_required     (PkBackend      *backend,
+							 const gchar	*package_id,
 							 const gchar    *repository_name,
 							 const gchar    *key_url,
 							 const gchar    *key_userid,
diff --git a/src/pk-engine.c b/src/pk-engine.c
index 562b58d..e16affb 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -313,9 +313,10 @@ pk_engine_update_detail_cb (PkBackend *backend, const gchar *package_id,
  * pk_engine_repo_signature_required_cb:
  **/
 static void
-pk_engine_repo_signature_required_cb (PkBackend *backend, const gchar *repository_name, const gchar *key_url,
-				      const gchar *key_userid, const gchar *key_id, const gchar *key_fingerprint,
-				      const gchar *key_timestamp, PkSigTypeEnum type, PkEngine *engine)
+pk_engine_repo_signature_required_cb (PkBackend *backend, const gchar *package_id, const gchar *repository_name,
+				      const gchar *key_url, const gchar *key_userid, const gchar *key_id,
+				      const gchar *key_fingerprint, const gchar *key_timestamp,
+				      PkSigTypeEnum type, PkEngine *engine)
 {
 	const gchar *type_text;
 	const gchar *c_tid;
@@ -329,10 +330,12 @@ pk_engine_repo_signature_required_cb (PkBackend *backend, const gchar *repositor
 	}
 	type_text = pk_sig_type_enum_to_text (type);
 
-	pk_debug ("emitting repo_signature_required tid:%s, %s, %s, %s, %s, %s, %s, %s",
-		  c_tid, repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp, type_text);
+	pk_debug ("emitting repo_signature_required package_id=%s, tid:%s, %s, %s, %s, %s, %s, %s, %s",
+		  package_id, c_tid, repository_name, key_url, key_userid, key_id,
+		  key_fingerprint, key_timestamp, type_text);
 	g_signal_emit (engine, signals [PK_ENGINE_REPO_SIGNATURE_REQUIRED], 0,
-		       c_tid, repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp, type_text);
+		       package_id, c_tid, repository_name, key_url, key_userid, key_id,
+		       key_fingerprint, key_timestamp, type_text);
 }
 
 /**
@@ -2893,8 +2896,8 @@ pk_engine_class_init (PkEngineClass *klass)
 	signals [PK_ENGINE_REPO_SIGNATURE_REQUIRED] =
 		g_signal_new ("repo-signature-required",
 			      G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
-			      0, NULL, NULL, pk_marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING,
-			      G_TYPE_NONE, 8, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+			      0, NULL, NULL, pk_marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING,
+			      G_TYPE_NONE, 9, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
 			      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
 	signals [PK_ENGINE_DESCRIPTION] =
 		g_signal_new ("description",
diff --git a/src/pk-interface-transaction.xml b/src/pk-interface-transaction.xml
index 74acc01..9932a8f 100644
--- a/src/pk-interface-transaction.xml
+++ b/src/pk-interface-transaction.xml
@@ -182,6 +182,7 @@
       <arg type="b" name="enabled" direction="out"/>
     </signal>
     <signal name="RepoSignatureRequired">
+      <arg type="s" name="package_id" direction="out"/>
       <arg type="s" name="repository_name" direction="out"/>
       <arg type="s" name="key_url" direction="out"/>
       <arg type="s" name="key_userid" direction="out"/>
diff --git a/src/pk-interface.xml b/src/pk-interface.xml
index fe683f6..2b49bd3 100644
--- a/src/pk-interface.xml
+++ b/src/pk-interface.xml
@@ -188,6 +188,7 @@
     <!-- Callbacks from repositories -->
     <signal name="RepoSignatureRequired">
       <arg type="s" name="tid" direction="out"/>
+      <arg type="s" name="package_id" direction="out"/>
       <arg type="s" name="repository_name" direction="out"/>
       <arg type="s" name="key_url" direction="out"/>
       <arg type="s" name="key_userid" direction="out"/>
diff --git a/src/pk-transaction.c b/src/pk-transaction.c
index 68bac6c..435556a 100644
--- a/src/pk-transaction.c
+++ b/src/pk-transaction.c
@@ -698,9 +698,11 @@ pk_transaction_repo_detail_cb (PkBackend *backend, const gchar *repo_id,
  * pk_transaction_repo_signature_required_cb:
  **/
 static void
-pk_transaction_repo_signature_required_cb (PkBackend *backend, const gchar *repository_name, const gchar *key_url,
-					   const gchar *key_userid, const gchar *key_id, const gchar *key_fingerprint,
-					   const gchar *key_timestamp, PkSigTypeEnum type, PkTransaction *transaction)
+pk_transaction_repo_signature_required_cb (PkBackend *backend, const gchar *package_id,
+					   const gchar *repository_name, const gchar *key_url,
+					   const gchar *key_userid, const gchar *key_id,
+					   const gchar *key_fingerprint, const gchar *key_timestamp,
+					   PkSigTypeEnum type, PkTransaction *transaction)
 {
 	const gchar *type_text;
 
@@ -709,10 +711,12 @@ pk_transaction_repo_signature_required_cb (PkBackend *backend, const gchar *repo
 
 	type_text = pk_sig_type_enum_to_text (type);
 
-	pk_debug ("emitting repo_signature_required %s, %s, %s, %s, %s, %s, %s",
-		  repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp, type_text);
+	pk_debug ("emitting repo_signature_required %s, %s, %s, %s, %s, %s, %s, %s",
+		  package_id, repository_name, key_url, key_userid, key_id,
+		  key_fingerprint, key_timestamp, type_text);
 	g_signal_emit (transaction, signals [PK_TRANSACTION_REPO_SIGNATURE_REQUIRED], 0,
-		       repository_name, key_url, key_userid, key_id, key_fingerprint, key_timestamp, type_text);
+		       package_id, repository_name, key_url, key_userid, key_id,
+		       key_fingerprint, key_timestamp, type_text);
 }
 
 /**
@@ -2671,8 +2675,8 @@ pk_transaction_class_init (PkTransactionClass *klass)
 	signals [PK_TRANSACTION_REPO_SIGNATURE_REQUIRED] =
 		g_signal_new ("repo-signature-required",
 			      G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
-			      0, NULL, NULL, pk_marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_STRING,
-			      G_TYPE_NONE, 7, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+			      0, NULL, NULL, pk_marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING,
+			      G_TYPE_NONE, 8, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
 			      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
 	signals [PK_TRANSACTION_REQUIRE_RESTART] =
 		g_signal_new ("require-restart",
commit 65af3672021fefd59b2e7b359e7cc55b2e5dc348
Author: Richard Hughes <richard at hughsie.com>
Date:   Sat Apr 5 11:16:30 2008 +0100

    don't mention yum so much in the detailed error text to fix rh#440701

diff --git a/backends/yum/helpers/yumBackend.py b/backends/yum/helpers/yumBackend.py
index f7f11ac..edc7eeb 100644
--- a/backends/yum/helpers/yumBackend.py
+++ b/backends/yum/helpers/yumBackend.py
@@ -208,7 +208,7 @@ class GPGKeyNotImported(exceptions.Exception):
 def sigquit(signum, frame):
     print >> sys.stderr, "Quit signal sent - exiting immediately"
     if yumbase:
-        print >> sys.stderr, "unlocking Yum"
+        print >> sys.stderr, "unlocking backend"
         yumbase.closeRpmDB()
         yumbase.doUnlock(YUM_PID_FILE)
     sys.exit(1)
@@ -321,7 +321,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
 
         except yum.Errors.RepoError,e:
             self._refresh_yum_cache()
-            self.error(ERROR_NO_CACHE,"Yum cache was invalid and has been rebuilt.")
+            self.error(ERROR_NO_CACHE,"Package cache was invalid and has been rebuilt.")
 
     def _do_extra_filtering(self,pkg,filterList):
         ''' do extra filtering (gui,devel etc) '''
@@ -371,7 +371,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
             return False
         except yum.Errors.RepoError,e:
             self._refresh_yum_cache()
-            self.error(ERROR_NO_CACHE,"Yum cache was invalid and has been rebuilt.")
+            self.error(ERROR_NO_CACHE,"Package cache was invalid and has been rebuilt.")
 
     def _do_devel_filtering(self,flt,pkg):
         isDevel = False
@@ -512,7 +512,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
             self.error(ERROR_GROUP_NOT_FOUND,e)
         except yum.Errors.RepoError,e:
             self._refresh_yum_cache()
-            self.error(ERROR_NO_CACHE,"Yum cache was invalid and has been rebuilt.")
+            self.error(ERROR_NO_CACHE,"Package cache was invalid and has been rebuilt.")
 
     def get_packages(self,filters,showdesc='no'):
         '''
@@ -549,7 +549,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
                             self._show_description(pkg)
         except yum.Errors.RepoError,e:
             self._refresh_yum_cache()
-            self.error(ERROR_NO_CACHE,"Yum cache was invalid and has been rebuilt.")
+            self.error(ERROR_NO_CACHE,"Package cache was invalid and has been rebuilt.")
 
     
     def search_file(self,filters,key):
@@ -875,7 +875,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
                             break
         except yum.Errors.RepoError,e:
             self._refresh_yum_cache()
-            self.error(ERROR_NO_CACHE,"Yum cache was invalid and has been rebuilt.")
+            self.error(ERROR_NO_CACHE,"Package cache was invalid and has been rebuilt.")
             
     def install(self, packages):
         '''
@@ -1008,7 +1008,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
                 print "debug :",keyData
                 if not keyData:
                     self.error(ERROR_INTERNAL_ERROR,
-                               "GPG key not imported, but no GPG information received from Yum.")
+                               "GPG key not imported, and no GPG information was found.")
 
 # We need a yum with this change:
 # http://devel.linux.duke.edu/gitweb/?p=yum.git;a=commit;h=09640c743fb6a7ade5711183dc7d5964e1bd3221
@@ -1142,7 +1142,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
                         self._show_package(pkg,INFO_NORMAL)
         except yum.Errors.RepoError,e:
             self._refresh_yum_cache()
-            self.error(ERROR_NO_CACHE,"Yum cache was invalid and has been rebuilt.")
+            self.error(ERROR_NO_CACHE,"Package cache was invalid and has been rebuilt.")
                 
 
     def repo_enable(self, repoid, enable):
commit f6ff78036c9d5797a702303627f46b21dd90fc22
Author: Scott Reeves <sreeves at novell.com>
Date:   Fri Apr 4 17:17:14 2008 -0600

    removed multiple calls to pk_backend_error_code

diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index 1287168..786bbbc 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -496,22 +496,31 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
                         zypp->resolver ()->setForceResolve (force);
 
                 // Gather up any dependencies
-                pk_backend_set_status (backend, PK_STATUS_ENUM_DEP_RESOLVE);
-                if (zypp->resolver ()->resolvePool () == FALSE) {
+		pk_backend_set_status (backend, PK_STATUS_ENUM_DEP_RESOLVE);
+		if (zypp->resolver ()->resolvePool () == FALSE) {
                        // Manual intervention required to resolve dependencies
                        // TODO: Figure out what we need to do with PackageKit
                        // to pull off interactive problem solving.
 
 			zypp::ResolverProblemList problems = zypp->resolver ()->problems ();
+			gchar * emsg = NULL, * tempmsg = NULL;
 
 			for (zypp::ResolverProblemList::iterator it = problems.begin (); it != problems.end (); it++){
-				pk_backend_error_code (backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, (*it)->description ().c_str ());
+				if (emsg == NULL) {
+					emsg = g_strdup ((*it)->description ().c_str ());
+				}
+				else {
+					tempmsg = emsg;
+					emsg = g_strconcat (emsg, "\n", (*it)->description ().c_str (), NULL);
+					g_free (tempmsg);
+				}
 			}
 
-                        pk_backend_error_code (backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "Couldn't resolve the package dependencies.");
-                        pk_backend_finished (backend);
-                        return FALSE;
-                }
+			pk_backend_error_code (backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, emsg);
+			pk_backend_finished (backend);
+			g_free (emsg);
+			return FALSE;
+		}
         
                 switch (type) {
                         case INSTALL:
commit 3fc872c3cd35793609e351845101ddf8e4971f69
Author: Luke Macken <lmacken at redhat.com>
Date:   Fri Apr 4 12:16:23 2008 -0400

    [yum2] Fix YumBaseError message handling in _runYumTransaction

diff --git a/backends/yum2/helpers/yumDBUSBackend.py b/backends/yum2/helpers/yumDBUSBackend.py
index 8578375..0361626 100755
--- a/backends/yum2/helpers/yumDBUSBackend.py
+++ b/backends/yum2/helpers/yumDBUSBackend.py
@@ -1732,7 +1732,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
             self.Finished(EXIT_FAILED)
             return False
         except yum.Errors.YumBaseError, ye:
-            retmsg = "Error in Transaction Processing\n" + ye.value
+            retmsg = "Error in Transaction Processing\n" + "\n".join(ye.value)
             self._unlock_yum()
             self.ErrorCode(ERROR_TRANSACTION_ERROR,retmsg)
             self.Finished(EXIT_FAILED)
commit 6a7c0dbddbba2d78b1546e52c98afd276cf6bbce
Merge: eddb662... 9759301...
Author: Stefan Haas <shaas at suse.de>
Date:   Fri Apr 4 16:55:59 2008 +0200

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

commit eddb662cf39b1f92861880aaab878a4a871a666b
Author: Stefan Haas <shaas at suse.de>
Date:   Fri Apr 4 16:55:35 2008 +0200

    added rpm-execeptions

diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index b973849..1287168 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -11,6 +11,7 @@
 #include <zypp/RepoManager.h>
 #include <zypp/RepoInfo.h>
 #include <zypp/repo/RepoException.h>
+#include <zypp/target/rpm/RpmException.h>
 #include <zypp/parser/ParseException.h>
 #include <zypp/base/Algorithm.h>
 #include <zypp/Pathname.h>
@@ -557,6 +558,10 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
 		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, ex.asUserString().c_str() );
 		pk_backend_finished (backend);
 		return FALSE;
+	} catch (const zypp::target::rpm::RpmException &ex) {
+		pk_backend_error_code (backend, PK_ERROR_ENUM_PACKAGE_DOWNLOAD_FAILED, ex.asUserString().c_str () );
+		pk_backend_finished (backend);
+		return FALSE;
 	} catch (const zypp::Exception &ex) {
 		pk_backend_error_code (backend, PK_ERROR_ENUM_INTERNAL_ERROR, ex.asUserString().c_str() );
 		pk_backend_finished (backend);
commit c23bd58bf4e32afa47e2fb57e951e38117ab5f1e
Author: Stefan Haas <shaas at suse.de>
Date:   Fri Apr 4 15:58:48 2008 +0200

    make zypp-backend more verbose

diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index f0a4f5e..b973849 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -348,8 +348,6 @@ zypp_build_package_id_from_resolvable (zypp::sat::Solvable resolvable)
 					  resolvable.edition ().asString ().c_str (),
 					  resolvable.arch ().asString ().c_str (),
 					  resolvable.repository (). name().c_str ());
-	// TODO: Figure out how to check if resolvable is really a ResObject and then cast it to a ResObject and pull of the repository alias for our "data" part in the package id
-//					  ((zypp::ResObject::constPtr)resolvable)->repository ().info ().alias ().c_str ());
 
 	return package_id;
 }
@@ -506,7 +504,7 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
 			zypp::ResolverProblemList problems = zypp->resolver ()->problems ();
 
 			for (zypp::ResolverProblemList::iterator it = problems.begin (); it != problems.end (); it++){
-				pk_backend_message (backend, PK_MESSAGE_ENUM_WARNING, (*it)->description ().c_str ());
+				pk_backend_error_code (backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, (*it)->description ().c_str ());
 			}
 
                         pk_backend_error_code (backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "Couldn't resolve the package dependencies.");
@@ -532,7 +530,23 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
                 zypp::ZYppCommitResult result = zypp->commit (policy);
 
                 if(!result._errors.empty () || !result._remaining.empty () || !result._srcremaining.empty ()){
-                        pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, "There are packages which couldn't be installed");
+			
+			zypp::ZYppCommitResult::PoolItemList errors = result._errors;
+			for (zypp::ZYppCommitResult::PoolItemList::iterator it = errors.begin (); it != errors.end (); it++){
+				pk_backend_error_code (backend, PK_ERROR_LOCAL_INSTALL_FAILED, "While installing %s an error appeared", (*it)->name ().c_str ());
+			}
+			
+			zypp::ZYppCommitResult::PoolItemList remaining = result._remaining;
+			for (zypp::ZYppCommitResult::PoolItemList::iterator it = remaining.begin (); it != remaining.end (); it++){
+				pk_backend_error_code (backend, PK_ERROR_LOCAL_INSTALL_FAILED, "%s could not be installed", (*it)->name ().c_str ());
+			}
+			
+			zypp::ZYppCommitResult::PoolItemList srcremaining = result._srcremaining;
+			for (zypp::ZYppCommitResult::PoolItemList::iterator it = srcremaining.begin (); it != srcremaining.end (); it++){
+				pk_backend_error_code (backend, PK_ERROR_ENUM_CANNOT_INSTALL_SOURCE_PACKAGE, "%s was not installed", (*it)->name ().c_str ());
+			}
+
+                        pk_backend_error_code (backend, PK_ERROR_ENUM_TRANSACTION_ERROR, "Transaction could not be completed");
                         pk_backend_finished (backend);
                         return FALSE;
                 }
@@ -540,7 +554,6 @@ zypp_perform_execution (PkBackend *backend, PerformType type, gboolean force)
                 zypp->resolver ()->setForceResolve (FALSE);
 
         } catch (const zypp::repo::RepoNotFoundException &ex) {
-                // TODO: make sure this dumps out the right sring.
 		pk_backend_error_code (backend, PK_ERROR_ENUM_REPO_NOT_FOUND, ex.asUserString().c_str() );
 		pk_backend_finished (backend);
 		return FALSE;
commit 97593011a11b373e51e507a2ee306813f227c58e
Author: Tim Lauridsen <tim at naboo.local>
Date:   Fri Apr 4 15:55:00 2008 +0200

    yum: extended repo_signature_required to send pkgid and implemented new signature-install method

diff --git a/backends/yum/helpers/yumBackend.py b/backends/yum/helpers/yumBackend.py
index 29b7698..f7f11ac 100644
--- a/backends/yum/helpers/yumBackend.py
+++ b/backends/yum/helpers/yumBackend.py
@@ -1005,6 +1005,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
                 self.error(ERROR_INTERNAL_ERROR,retmsg)
             except GPGKeyNotImported, e:
                 keyData = self.yumbase.missingGPGKey
+                print "debug :",keyData
                 if not keyData:
                     self.error(ERROR_INTERNAL_ERROR,
                                "GPG key not imported, but no GPG information received from Yum.")
@@ -1013,13 +1014,17 @@ class PackageKitYumBackend(PackageKitBaseBackend):
 # http://devel.linux.duke.edu/gitweb/?p=yum.git;a=commit;h=09640c743fb6a7ade5711183dc7d5964e1bd3221
 # to have fingerprint and timestamp available here
 # the above change is now in the latest yum for Fedor arawhide (yum-3.2.6-5.fc8)
-                self.repo_signature_required(keyData['po'].repoid,
+                id = self._pkg_to_id(keyData['po'])
+                print id
+                self.repo_signature_required(id,
+                                             keyData['po'].repoid,
                                              keyData['keyurl'],
                                              keyData['userid'],
                                              keyData['hexkeyid'],
                                              keyData['fingerprint'],
                                              keyData['timestamp'],
                                              'GPG')
+                print "post"                                             
                 self.error(ERROR_GPG_FAILURE,"GPG key not imported.")
             except yum.Errors.YumBaseError, ye:
                 retmsg = "Error in Transaction Processing;" + self._format_msgs(ye.value)
@@ -1281,6 +1286,20 @@ class PackageKitYumBackend(PackageKitBaseBackend):
         else:
             self.error(ERROR_REPO_NOT_FOUND,'repo %s not found' % repoid)
 
+    def repo_signature_install(self,package):
+        self._check_init()
+        self.allow_cancel(True)
+        self.percentage(None)
+        self.status(STATUS_INFO)
+        pkg,inst = self._findPackage(package)
+        if pkg:
+            try:
+                self.yumbase.getKeyForPackage(pkg, askcb = lambda x, y, z: True)
+            except yum.Errors.YumBaseError, e:
+                self.error(ERROR_INTERNAL_ERROR,str(e))
+            except:
+                self.error(ERROR_INTERNAL_ERROR,"Error importing GPG Key for %s" % pkg)
+
     def _check_init(self,lazy_cache=False):
         '''Just does the caching tweaks'''
         if lazy_cache:
@@ -1559,7 +1578,6 @@ class PackageKitYumBase(yum.YumBase):
                 self.getKeyForPackage(po, fullaskcb=self._fullAskForGPGKeyImport)
             else:
                 raise yum.Errors.YumGPGCheckError, errmsg
-
         return 0
 
     def _fullAskForGPGKeyImport(self, data):
diff --git a/python/packagekit/backend.py b/python/packagekit/backend.py
index c2266a7..b0124c0 100644
--- a/python/packagekit/backend.py
+++ b/python/packagekit/backend.py
@@ -193,9 +193,10 @@ class PackageKitBaseBackend:
         print "allow-cancel\t%s" % (data)
         sys.stdout.flush()
 
-    def repo_signature_required(self,repo_name,key_url,key_userid,key_id,key_fingerprint,key_timestamp,type):
+    def repo_signature_required(self,id,repo_name,key_url,key_userid,key_id,key_fingerprint,key_timestamp,type):
         '''
         send 'repo-signature-required' signal:
+        @param id:           Id of the package needing a signature
         @param repo_name:       Name of the repository
         @param key_url:         URL which the user can use to verify the key
         @param key_userid:      Key userid
@@ -204,8 +205,8 @@ class PackageKitBaseBackend:
         @param key_timestamp:   Key timestamp
         @param type:            Key type (GPG)
         '''
-        print "repo-signature-required\t%s\t%s\t%s\t%s\t%s\t%s\t%s" % (
-            repo_name,key_url,key_userid,key_id,key_fingerprint,key_timestamp,type
+        print "repo-signature-required\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" % (
+            id,repo_name,key_url,key_userid,key_id,key_fingerprint,key_timestamp,type
             )
         sys.stdout.flush()
 
@@ -440,6 +441,13 @@ class PackageKitBaseBackend:
         '''
         self.error(ERROR_NOT_SUPPORTED,"This function is not implemented in this backend")
 
+    def repo_signature_install(self,package):        
+        '''
+        Implement the {backend}-repo-signature-install functionality
+        Needed to be implemented in a sub class
+        '''
+        self.error(ERROR_NOT_SUPPORTED,"This function is not implemented in this backend")
+
     def customTracebackHandler(self,tb):
         '''
         Custom Traceback Handler



More information about the PackageKit mailing list