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

Richard Hughes hughsient at kemper.freedesktop.org
Fri Sep 21 11:33:48 PDT 2007


 TODO                                    |    9 -
 backends/BACKENDS                       |    4 
 backends/alpm/pk-backend-alpm.c         |    2 
 backends/apt/pk-backend-apt.cpp         |    2 
 backends/box/helpers/Makefile.am        |    1 
 backends/box/helpers/install-file.sh    |   15 +
 backends/box/pk-backend-box.c           |   12 +
 backends/conary/pk-backend-conary.c     |    2 
 backends/dummy/pk-backend-dummy.c       |   22 ++
 backends/test/pk-backend-test-fail.c    |   22 ++
 backends/test/pk-backend-test-nop.c     |    2 
 backends/test/pk-backend-test-spawn.c   |    2 
 backends/test/pk-backend-test-succeed.c |   22 ++
 backends/test/pk-backend-test-thread.c  |    2 
 backends/yum/pk-backend-yum.c           |    2 
 client/pk-console.c                     |   10 +
 client/pk-monitor.c                     |    2 
 docs/backends.xml                       |    8 
 docs/introduction.xml                   |   71 +++++++
 libpackagekit/pk-enum-list.c            |    2 
 libpackagekit/pk-enum.c                 |   10 -
 libpackagekit/pk-enum.h                 |   10 -
 libpackagekit/pk-job-list.c             |   18 +-
 libpackagekit/pk-task-client.c          |   18 +-
 libpackagekit/pk-task-list.c            |   10 -
 libpackagekit/pk-task-monitor.c         |   58 ++++--
 policy/packagekit.policy                |    9 +
 python/packagekit.py                    |   10 -
 python/pkt                              |    8 
 src/Makefile.am                         |    2 
 src/pk-backend-internal.h               |    4 
 src/pk-backend.c                        |   83 +++++++--
 src/pk-backend.h                        |   11 -
 src/pk-engine.c                         |  287 ++++++++++++++++++++++----------
 src/pk-engine.h                         |   18 +-
 src/pk-interface.xml                    |   47 +++--
 src/pk-network.c                        |    6 
 src/pk-transaction-id.c                 |    4 
 src/pk-transaction-list.c               |   10 -
 src/pk-transaction-list.h               |    2 
 40 files changed, 625 insertions(+), 214 deletions(-)

New commits:
diff-tree 343a8006de50d8bc90c5d2a9a8a7391b3ecb3ced (from 5751b20539cbbe6d28de9bccb19079d9f7533c30)
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Sep 21 19:27:26 2007 +0100

    check for a valid backend before we get the role

diff --git a/src/pk-engine.c b/src/pk-engine.c
index 9ca79af..a72d7dc 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -502,6 +502,11 @@ pk_engine_add_backend (PkEngine *engine,
 	/* get all the data we know */
 	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 
+	/* we might not have a backend */
+	if (backend == NULL) {
+		return TRUE;
+	}
+
 	/* only save into the database for useful stuff */
 	pk_backend_get_role (backend, &role, NULL);
 	if (role == PK_ROLE_ENUM_REFRESH_CACHE ||
diff-tree 5751b20539cbbe6d28de9bccb19079d9f7533c30 (from b5e71b2c58324a1ea1fa9703dfd6f54d736a3010)
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Sep 21 19:15:13 2007 +0100

    added Resolve into BACKENDS

diff --git a/backends/BACKENDS b/backends/BACKENDS
index 1bd96dd..6ae45eb 100644
--- a/backends/BACKENDS
+++ b/backends/BACKENDS
@@ -2,6 +2,7 @@ Current status of the backends
 
                   | conary | yum | apt | box | alpm |
 -----------------------------------------------------
+resolve           |        |     |     |     |      |
 refresh-cache     |   X    |  X  |  X  |  X  |      |
 get-updates       |   X    |  X  |     |  X  |      |
 update-system     |        |  X  |     |     |      |
diff-tree b5e71b2c58324a1ea1fa9703dfd6f54d736a3010 (from parents)
Merge: 5b4f4fa8c5128c27b2286b5ef1b3b8277323928c 8ef7da33bec6ddb99ccc88df1280baee3eefd453
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Sep 21 19:12:16 2007 +0100

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

diff --cc backends/box/pk-backend-box.c
index 1ba3bf0,644d81f..ad6a906
@@@ -478,10 -488,9 +488,10 @@@
  	NULL,					/* get_update_detail */
  	backend_get_updates,			/* get_updates */
  	backend_install_package,		/* install_package */
- 	NULL,					/* install_file */
+ 	backend_install_file,			/* install_file */
  	backend_refresh_cache,			/* refresh_cache */
  	backend_remove_package,			/* remove_package */
 +	NULL,					/* resolve */
  	backend_search_details,			/* search_details */
  	backend_search_file,			/* search_file */
  	NULL,					/* search_group */
diff-tree 8ef7da33bec6ddb99ccc88df1280baee3eefd453 (from aa74310961ec2e78153f5f0643e87659b6f4c081)
Author: Grzegorz Dabrowski <gdx at o2.pl>
Date:   Fri Sep 21 19:40:01 2007 +0000

    [box] added install-file support

diff --git a/backends/BACKENDS b/backends/BACKENDS
index 6127b53..1bd96dd 100644
--- a/backends/BACKENDS
+++ b/backends/BACKENDS
@@ -9,7 +9,8 @@ search-name       |   X    |  X  |  X  |
 search-details    |        |  X  |  X  |  X  |      |
 search-file       |        |  X  |     |  X  |      |
 search-group      |        |     |     |     |      |
-install           |        |  X  |     |  X  |  X   |
+install-package   |        |  X  |     |  X  |  X   |
+install-file      |        |     |     |  X  |      |
 remove            |        |  X  |     |  X  |  X   |
 get-depends       |        |  X  |     |     |      |
 get-requires      |        |     |     |     |      |
diff --git a/backends/box/helpers/Makefile.am b/backends/box/helpers/Makefile.am
index ecc9b67..70f60ee 100644
--- a/backends/box/helpers/Makefile.am
+++ b/backends/box/helpers/Makefile.am
@@ -4,6 +4,7 @@ helperdir = $(datadir)/PackageKit/helper
 NULL =
 
 dist_helper_DATA = 			\
+	install-file.sh			\
 	install-package.sh		\
 	refresh-cache.sh		\
 	remove-package.sh		\
diff --git a/backends/box/helpers/install-file.sh b/backends/box/helpers/install-file.sh
new file mode 100644
index 0000000..3f77679
--- /dev/null
+++ b/backends/box/helpers/install-file.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# Copyright (C) 2007 Grzegorz Dabrowski <gdx at o2.pl>
+#
+# 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.
+
+echo "no-percentage-updates" > /dev/stderr
+echo "status	install" > /dev/stderr
+pkg=$(echo "$1" | cut -f1 -d';')
+box -i "$pkg" 2>&1 >/dev/null
diff --git a/backends/box/pk-backend-box.c b/backends/box/pk-backend-box.c
index 6e6e602..644d81f 100644
--- a/backends/box/pk-backend-box.c
+++ b/backends/box/pk-backend-box.c
@@ -383,6 +383,16 @@ backend_install_package (PkBackend *back
 }
 
 /**
+ * backend_install_file:
+ */
+static void
+backend_install_file (PkBackend *backend, const gchar *file)
+{
+	g_return_if_fail (backend != NULL);
+	pk_backend_spawn_helper (backend, "install-file.sh", file, NULL);
+}
+
+/**
  * backend_refresh_cache:
  */
 static void
@@ -478,7 +488,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* get_update_detail */
 	backend_get_updates,			/* get_updates */
 	backend_install_package,		/* install_package */
-	NULL,					/* install_file */
+	backend_install_file,			/* install_file */
 	backend_refresh_cache,			/* refresh_cache */
 	backend_remove_package,			/* remove_package */
 	backend_search_details,			/* search_details */
diff-tree 5b4f4fa8c5128c27b2286b5ef1b3b8277323928c (from aa74310961ec2e78153f5f0643e87659b6f4c081)
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Sep 21 19:11:49 2007 +0100

    Add the Resolve method. We need this when we know the package name, and want to get the package id

diff --git a/backends/alpm/pk-backend-alpm.c b/backends/alpm/pk-backend-alpm.c
index d132111..6840300 100644
--- a/backends/alpm/pk-backend-alpm.c
+++ b/backends/alpm/pk-backend-alpm.c
@@ -816,6 +816,7 @@ PK_BACKEND_OPTIONS (
 	NULL,						/* install_file */
 	backend_refresh_cache,				/* refresh_cache */
 	backend_remove_package,				/* remove_package */
+	NULL,						/* resolve */
 	backend_search_details,				/* search_details */
 	backend_search_file,				/* search_file */
 	backend_search_group,				/* search_group */
diff --git a/backends/apt/pk-backend-apt.cpp b/backends/apt/pk-backend-apt.cpp
index 0d6764c..daffa61 100644
--- a/backends/apt/pk-backend-apt.cpp
+++ b/backends/apt/pk-backend-apt.cpp
@@ -664,6 +664,7 @@ extern "C" PK_BACKEND_OPTIONS (
 	NULL,					/* install_name */
 	backend_refresh_cache,			/* refresh_cache */
 	NULL,					/* remove_package */
+	NULL,					/* resolve */
 	backend_search_details,			/* search_details */
 	backend_search_file,			/* search_file */
 	NULL,					/* search_group */
diff --git a/backends/box/pk-backend-box.c b/backends/box/pk-backend-box.c
index 6e6e602..1ba3bf0 100644
--- a/backends/box/pk-backend-box.c
+++ b/backends/box/pk-backend-box.c
@@ -481,6 +481,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* install_file */
 	backend_refresh_cache,			/* refresh_cache */
 	backend_remove_package,			/* remove_package */
+	NULL,					/* resolve */
 	backend_search_details,			/* search_details */
 	backend_search_file,			/* search_file */
 	NULL,					/* search_group */
diff --git a/backends/conary/pk-backend-conary.c b/backends/conary/pk-backend-conary.c
index b18f92b..6f6eff6 100644
--- a/backends/conary/pk-backend-conary.c
+++ b/backends/conary/pk-backend-conary.c
@@ -163,6 +163,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* install_file */
 	backend_refresh_cache,			/* refresh_cache */
 	backend_remove_package,			/* remove_package */
+	NULL,					/* resolve */
 	backend_search_details,			/* search_details */
 	NULL,					/* search_file */
 	NULL,					/* search_group */
diff --git a/backends/dummy/pk-backend-dummy.c b/backends/dummy/pk-backend-dummy.c
index c062da5..481c612 100644
--- a/backends/dummy/pk-backend-dummy.c
+++ b/backends/dummy/pk-backend-dummy.c
@@ -206,6 +206,16 @@ backend_refresh_cache (PkBackend *backen
 }
 
 /**
+ * backend_resolve:
+ */
+static void
+backend_resolve (PkBackend *backend, const gchar *package_id)
+{
+	g_return_if_fail (backend != NULL);
+	pk_backend_finished (backend);
+}
+
+/**
  * backend_remove_package:
  */
 static void
@@ -338,6 +348,7 @@ PK_BACKEND_OPTIONS (
 	backend_install_file,			/* install_file */
 	backend_refresh_cache,			/* refresh_cache */
 	backend_remove_package,			/* remove_package */
+	backend_resolve,			/* resolve */
 	backend_search_details,			/* search_details */
 	backend_search_file,			/* search_file */
 	backend_search_group,			/* search_group */
diff --git a/backends/test/pk-backend-test-fail.c b/backends/test/pk-backend-test-fail.c
index 095dca0..c77caf6 100644
--- a/backends/test/pk-backend-test-fail.c
+++ b/backends/test/pk-backend-test-fail.c
@@ -175,6 +175,16 @@ backend_remove_package (PkBackend *backe
 }
 
 /**
+ * backend_resolve:
+ */
+static void
+backend_resolve (PkBackend *backend, const gchar *package_id)
+{
+	g_return_if_fail (backend != NULL);
+	pk_backend_finished (backend);
+}
+
+/**
  * backend_search_details:
  */
 static void
@@ -258,6 +268,7 @@ PK_BACKEND_OPTIONS (
 	backend_install_file,			/* install_file */
 	backend_refresh_cache,			/* refresh_cache */
 	backend_remove_package,			/* remove_package */
+	backend_resolve,			/* resolve */
 	backend_search_details,			/* search_details */
 	backend_search_file,			/* search_file */
 	backend_search_group,			/* search_group */
diff --git a/backends/test/pk-backend-test-nop.c b/backends/test/pk-backend-test-nop.c
index 22af68e..7b04a7d 100644
--- a/backends/test/pk-backend-test-nop.c
+++ b/backends/test/pk-backend-test-nop.c
@@ -41,6 +41,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* install_file */
 	NULL,					/* refresh_cache */
 	NULL,					/* remove_package */
+	NULL,					/* resolve */
 	NULL,					/* search_details */
 	NULL,					/* search_file */
 	NULL,					/* search_group */
diff --git a/backends/test/pk-backend-test-spawn.c b/backends/test/pk-backend-test-spawn.c
index 0a691f5..d2d8465 100644
--- a/backends/test/pk-backend-test-spawn.c
+++ b/backends/test/pk-backend-test-spawn.c
@@ -54,6 +54,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* install_file */
 	NULL,					/* refresh_cache */
 	NULL,					/* remove_package */
+	NULL,					/* resolve */
 	NULL,					/* search_details */
 	NULL,					/* search_file */
 	NULL,					/* search_group */
diff --git a/backends/test/pk-backend-test-succeed.c b/backends/test/pk-backend-test-succeed.c
index 650ff0e..61354c2 100644
--- a/backends/test/pk-backend-test-succeed.c
+++ b/backends/test/pk-backend-test-succeed.c
@@ -171,6 +171,16 @@ backend_remove_package (PkBackend *backe
 }
 
 /**
+ * backend_resolve:
+ */
+static void
+backend_resolve (PkBackend *backend, const gchar *package_id)
+{
+	g_return_if_fail (backend != NULL);
+	pk_backend_finished (backend);
+}
+
+/**
  * backend_search_details:
  */
 static void
@@ -262,6 +272,7 @@ PK_BACKEND_OPTIONS (
 	backend_install_file,			/* install_file */
 	backend_refresh_cache,			/* refresh_cache */
 	backend_remove_package,			/* remove_package */
+	backend_resolve,			/* resolve */
 	backend_search_details,			/* search_details */
 	backend_search_file,			/* search_file */
 	backend_search_group,			/* search_group */
diff --git a/backends/test/pk-backend-test-thread.c b/backends/test/pk-backend-test-thread.c
index f63e14f..9675d6e 100644
--- a/backends/test/pk-backend-test-thread.c
+++ b/backends/test/pk-backend-test-thread.c
@@ -101,6 +101,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* install_file */
 	NULL,					/* refresh_cache */
 	NULL,					/* remove_package */
+	NULL,					/* resolve */
 	NULL,					/* search_details */
 	NULL,					/* search_file */
 	backend_search_group,			/* search_group */
diff --git a/backends/yum/pk-backend-yum.c b/backends/yum/pk-backend-yum.c
index 3395166..cb37eb8 100644
--- a/backends/yum/pk-backend-yum.c
+++ b/backends/yum/pk-backend-yum.c
@@ -243,6 +243,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* install_file */
 	backend_refresh_cache,			/* refresh_cache */
 	backend_remove_package,			/* remove_package */
+	NULL,					/* resolve */
 	backend_search_details,			/* search_details */
 	backend_search_file,			/* search_file */
 	backend_search_group,			/* search_group */
diff --git a/client/pk-console.c b/client/pk-console.c
index d21c2e7..03e541e 100644
--- a/client/pk-console.c
+++ b/client/pk-console.c
@@ -151,6 +151,7 @@ pk_console_usage (const gchar *error)
 	g_print ("  pkcon [sync] [verbose] remove <package_id>\n");
 	g_print ("  pkcon [sync] [verbose] update <package_id>\n");
 	g_print ("  pkcon [sync] [verbose] refresh\n");
+	g_print ("  pkcon [sync] [verbose] resolve\n");
 	g_print ("  pkcon [sync] [verbose] force-refresh\n");
 	g_print ("  pkcon [sync] [verbose] update-system\n");
 	g_print ("  pkcon [sync] [verbose] get updates\n");
@@ -253,6 +254,15 @@ pk_console_parse_multiple_commands (PkTa
 			pk_task_client_remove_package (tclient, value, FALSE);
 			remove = 2;
 		}
+	} else if (strcmp (mode, "resolve") == 0) {
+		if (value == NULL) {
+			pk_console_usage ("you need to specify a package name to resolve");
+			remove = 1;
+			goto out;
+		} else {
+			pk_warning ("TODO!");
+			remove = 2;
+		}
 	} else if (strcmp (mode, "get") == 0) {
 		if (value == NULL) {
 			pk_console_usage ("you need to specify a get type");
diff --git a/docs/backends.xml b/docs/backends.xml
index bd4f443..a44cb25 100644
--- a/docs/backends.xml
+++ b/docs/backends.xml
@@ -75,6 +75,10 @@
             <entry><literal>get-depends.*</literal></entry>
           </row>
           <row>
+            <entry>Resolve</entry>
+            <entry><literal>resolve.*</literal></entry>
+          </row>
+          <row>
             <entry>Get Requires</entry>
             <entry><literal>get-requires.*</literal></entry>
           </row>
diff --git a/docs/introduction.xml b/docs/introduction.xml
index ea47817..44ad21c 100644
--- a/docs/introduction.xml
+++ b/docs/introduction.xml
@@ -862,6 +862,38 @@
       </para>
     </sect2>
 
+    <sect2 id="api-resolve">
+      <title>Resolve</title>
+      <para>
+        Resolve turns a single package name into a package_id suitable for the
+        other methods.
+      </para>
+      <para>
+        The arguments are:
+      </para>
+      <informaltable>
+        <tgroup cols="2">
+          <thead>
+            <row>
+              <entry>Option</entry>
+              <entry>Description</entry>
+            </row>
+          </thead>
+          <tbody>
+            <row>
+              <entry><literal>package</literal></entry>
+              <entry>A single package name, e.g. <literal>art-clipart</literal>.</entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+      <para>
+        This method typically emits
+        <literal>Error</literal> and
+        <literal>Package</literal>.
+      </para>
+    </sect2>
+
     <sect2 id="api-get-update-detail">
       <title>Get Update Detail</title>
       <para>
diff --git a/libpackagekit/pk-enum.c b/libpackagekit/pk-enum.c
index cd120f0..de1c1b4 100644
--- a/libpackagekit/pk-enum.c
+++ b/libpackagekit/pk-enum.c
@@ -59,6 +59,7 @@ static PkTaskEnumMatch task_status[] = {
 static PkTaskEnumMatch task_role[] = {
 	{PK_ROLE_ENUM_UNKNOWN,			"unknown"},	/* fall though value */
 	{PK_ROLE_ENUM_CANCEL,			"cancel"},
+	{PK_ROLE_ENUM_RESOLVE,			"resolve"},
 	{PK_ROLE_ENUM_GET_DEPENDS,		"get-depends"},
 	{PK_ROLE_ENUM_GET_UPDATE_DETAIL,	"get-update-detail"},
 	{PK_ROLE_ENUM_GET_DESCRIPTION,		"get-description"},
diff --git a/libpackagekit/pk-enum.h b/libpackagekit/pk-enum.h
index 47ec85d..6028476 100644
--- a/libpackagekit/pk-enum.h
+++ b/libpackagekit/pk-enum.h
@@ -30,6 +30,7 @@ G_BEGIN_DECLS
 /* what we asked to do */
 typedef enum {
 	PK_ROLE_ENUM_CANCEL,
+	PK_ROLE_ENUM_RESOLVE,
 	PK_ROLE_ENUM_GET_DEPENDS,
 	PK_ROLE_ENUM_GET_UPDATE_DETAIL,
 	PK_ROLE_ENUM_GET_DESCRIPTION,
diff --git a/src/pk-backend-internal.h b/src/pk-backend-internal.h
index e16710b..fcb5c15 100644
--- a/src/pk-backend-internal.h
+++ b/src/pk-backend-internal.h
@@ -84,6 +84,8 @@ gboolean	 pk_backend_remove_package		(Pk
 gboolean	 pk_backend_search_details		(PkBackend	*backend,
 							 const gchar	*filter,
 							 const gchar	*search);
+gboolean	 pk_backend_resolve			(PkBackend	*backend,
+							 const gchar	*package);
 gboolean	 pk_backend_search_file			(PkBackend	*backend,
 							 const gchar	*filter,
 							 const gchar	*search);
diff --git a/src/pk-backend.c b/src/pk-backend.c
index 9f7148d..0ce1257 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -934,6 +934,8 @@ pk_backend_run (PkBackend *backend)
 	} else if (backend->priv->role == PK_ROLE_ENUM_GET_UPDATE_DETAIL) {
 		backend->desc->get_update_detail (backend,
 						  backend->priv->xcached_package_id);
+	} else if (backend->priv->role == PK_ROLE_ENUM_RESOLVE) {
+		backend->desc->resolve (backend, backend->priv->xcached_package_id);
 	} else if (backend->priv->role == PK_ROLE_ENUM_GET_DESCRIPTION) {
 		backend->desc->get_description (backend,
 						backend->priv->xcached_package_id);
@@ -1127,6 +1129,22 @@ pk_backend_remove_package (PkBackend *ba
 }
 
 /**
+ * pk_backend_resolve:
+ */
+gboolean
+pk_backend_resolve (PkBackend *backend, const gchar *package)
+{
+	g_return_val_if_fail (backend != NULL, FALSE);
+	if (backend->desc->resolve == NULL) {
+		pk_backend_not_implemented_yet (backend, "Resolve");
+		return FALSE;
+	}
+	backend->priv->xcached_package_id = g_strdup (package);
+	pk_backend_set_role (backend, PK_ROLE_ENUM_RESOLVE);
+	return TRUE;
+}
+
+/**
  * pk_backend_search_details:
  */
 gboolean
@@ -1263,6 +1281,9 @@ pk_backend_get_actions (PkBackend *backe
 	if (backend->desc->remove_package != NULL) {
 		pk_enum_list_append (elist, PK_ROLE_ENUM_REMOVE_PACKAGE);
 	}
+	if (backend->desc->resolve != NULL) {
+		pk_enum_list_append (elist, PK_ROLE_ENUM_RESOLVE);
+	}
 	if (backend->desc->search_details != NULL) {
 		pk_enum_list_append (elist, PK_ROLE_ENUM_SEARCH_DETAILS);
 	}
diff --git a/src/pk-backend.h b/src/pk-backend.h
index e72cfb2..2e37424 100644
--- a/src/pk-backend.h
+++ b/src/pk-backend.h
@@ -102,6 +102,7 @@ struct _PkBackendDesc {
 	void		(*install_file)		(PkBackend *backend, const gchar *full_path);
 	void		(*refresh_cache)	(PkBackend *backend, gboolean force);
 	void		(*remove_package)	(PkBackend *backend, const gchar *package_id, gboolean allow_deps);
+	void		(*resolve)		(PkBackend *backend, const gchar *package);
 	void		(*search_details)	(PkBackend *backend, const gchar *filter, const gchar *search);
 	void		(*search_file)		(PkBackend *backend, const gchar *filter, const gchar *search);
 	void		(*search_group)		(PkBackend *backend, const gchar *filter, const gchar *search);
@@ -114,7 +115,7 @@ struct _PkBackendDesc {
 #define PK_BACKEND_OPTIONS(description, version, author, initialize, destroy, \
 			   get_groups, get_filters, cancel, get_depends, get_description, \
 			   get_requires, get_update_detail, get_updates, install_package, install_file, \
-			   refresh_cache, remove_package, search_details, \
+			   refresh_cache, remove_package, resolve, search_details, \
 			   search_file, search_group, search_name, \
 			   update_package, update_system) \
 	G_MODULE_EXPORT const PkBackendDesc pk_backend_desc = { \
@@ -135,6 +136,7 @@ struct _PkBackendDesc {
 		install_file, \
 		refresh_cache, \
 		remove_package, \
+		resolve, \
 		search_details, \
 		search_file, \
 		search_group, \
diff --git a/src/pk-engine.c b/src/pk-engine.c
index 6e69401..9ca79af 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -942,6 +942,45 @@ pk_engine_search_file (PkEngine *engine,
 }
 
 /**
+ * pk_engine_resolve:
+ **/
+gboolean
+pk_engine_resolve (PkEngine *engine, const gchar *package, gchar **tid, GError **error)
+{
+	gboolean ret;
+	PkBackend *backend;
+	PkTransactionItem *item;
+
+	g_return_val_if_fail (engine != NULL, FALSE);
+	g_return_val_if_fail (PK_IS_ENGINE (engine), FALSE);
+
+	/* create a new backend and start it */
+	backend = pk_engine_new_backend (engine);
+	if (backend == NULL) {
+		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_INITIALIZE_FAILED,
+			     "Backend '%s' could not be initialized", engine->priv->backend);
+		return FALSE;
+	}
+
+	ret = pk_backend_resolve (backend, package);
+	if (ret == FALSE) {
+		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NOT_SUPPORTED,
+			     "Operation not yet supported by backend");
+		pk_engine_delete_backend (engine, backend);
+		return FALSE;
+	}
+	pk_engine_add_backend (engine, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
+	if (item == NULL) {
+		pk_warning ("could not find backend");
+		return FALSE;
+	}
+	*tid = g_strdup (item->tid);
+
+	return TRUE;
+}
+
+/**
  * pk_engine_get_depends:
  **/
 gboolean
diff --git a/src/pk-engine.h b/src/pk-engine.h
index 0f39d00..e3cc859 100644
--- a/src/pk-engine.h
+++ b/src/pk-engine.h
@@ -115,6 +115,10 @@ gboolean	 pk_engine_get_description		(Pk
 							 const gchar	*package_id,
 							 gchar		**tid,
 							 GError		**error);
+gboolean	 pk_engine_resolve			(PkEngine	*engine,
+							 const gchar	*package,
+							 gchar		**tid,
+							 GError		**error);
 gboolean	 pk_engine_refresh_cache		(PkEngine	*engine,
 							 gboolean	 force,
 							 gchar		**tid,
diff --git a/src/pk-interface.xml b/src/pk-interface.xml
index 270e74e..46b79f4 100644
--- a/src/pk-interface.xml
+++ b/src/pk-interface.xml
@@ -14,6 +14,10 @@
       <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
       <arg type="s" name="tid" direction="out"/>
     </method>
+    <method name="Resolve">
+      <arg type="s" name="package" direction="in"/>
+      <arg type="s" name="tid" direction="out"/>
+    </method>
     <method name="SearchName">
       <arg type="s" name="filter" direction="in"/>
       <arg type="s" name="search" direction="in"/>
diff-tree aa74310961ec2e78153f5f0643e87659b6f4c081 (from db408c58f946cd17847416681da743369a0249c0)
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Sep 21 18:25:27 2007 +0100

    remove manually added GetOldTransactions

diff --git a/src/pk-engine.c b/src/pk-engine.c
index 626d8e1..6e69401 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -527,11 +527,17 @@ pk_engine_add_backend (PkEngine *engine,
 gboolean
 pk_engine_delete_backend (PkEngine *engine, PkBackend *backend)
 {
+	PkTransactionItem *item;
 	g_return_val_if_fail (engine != NULL, FALSE);
 	g_return_val_if_fail (PK_IS_ENGINE (engine), FALSE);
 
+	/* get item, and remove it */
+	item = pk_transaction_list_get_item_from_backend(engine->priv->transaction_list, backend);
+	if (item == NULL) {
+		return FALSE;
+	}
 	pk_debug ("removing backend %p as it failed", backend);
-	pk_transaction_list_remove (engine->priv->transaction_list, backend);
+	pk_transaction_list_remove (engine->priv->transaction_list, item);
 
 	/* we don't do g_object_unref (backend) here as it is done in the
 	   ::finished handler */
@@ -1579,6 +1585,8 @@ pk_engine_get_old_transactions (PkEngine
 	pk_debug ("emitting finished transaction:%s, '%s', %i", item->tid, "", 0);
 	g_signal_emit (engine, signals [PK_ENGINE_FINISHED], 0, item->tid, "", 0);
 
+	pk_transaction_list_remove (engine->priv->transaction_list, item);
+
 	return TRUE;
 //xxx
 }
diff --git a/src/pk-transaction-list.c b/src/pk-transaction-list.c
index f78c868..1fd32ad 100644
--- a/src/pk-transaction-list.c
+++ b/src/pk-transaction-list.c
@@ -113,16 +113,12 @@ pk_transaction_list_add (PkTransactionLi
  * pk_transaction_list_remove:
  **/
 gboolean
-pk_transaction_list_remove (PkTransactionList *tlist, PkBackend *backend)
+pk_transaction_list_remove (PkTransactionList *tlist, PkTransactionItem *item)
 {
-	PkTransactionItem *item;
 	g_return_val_if_fail (tlist != NULL, FALSE);
 	g_return_val_if_fail (PK_IS_TRANSACTION_LIST (tlist), FALSE);
 
-	item = pk_transaction_list_get_item_from_backend (tlist, backend);
-	if (item == NULL) {
-		return FALSE;
-	}
+	/* valid item */
 	g_ptr_array_remove (tlist->priv->array, item);
 	g_free (item->tid);
 	g_free (item);
@@ -152,7 +148,7 @@ pk_transaction_list_backend_finished_cb 
 		pk_error ("moo!");
 	}
 	pk_debug ("transaction %s completed, removing", item->tid);
-	pk_transaction_list_remove (tlist, backend);
+	pk_transaction_list_remove (tlist, item);
 
 	/* do the next transaction now if we have another queued */
 	length = tlist->priv->array->len;
diff --git a/src/pk-transaction-list.h b/src/pk-transaction-list.h
index 75842fe..3101927 100644
--- a/src/pk-transaction-list.h
+++ b/src/pk-transaction-list.h
@@ -62,7 +62,7 @@ PkTransactionList *pk_transaction_list_n
 PkTransactionItem *pk_transaction_list_add		(PkTransactionList	*tlist,
 							 PkBackend		*backend);
 gboolean	 pk_transaction_list_remove		(PkTransactionList	*tlist,
-							 PkBackend		*backend);
+							 PkTransactionItem	*item);
 gboolean	 pk_transaction_list_commit		(PkTransactionList	*tlist,
 							 PkBackend		*backend);
 gboolean	 pk_transaction_list_role_present	(PkTransactionList	*tlist,
diff-tree db408c58f946cd17847416681da743369a0249c0 (from 107f6aff3281b0ea542b87ab9d59a4a4c95a3517)
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Sep 21 18:15:43 2007 +0100

    don't unref as networkmanager is broken right now

diff --git a/src/pk-engine.c b/src/pk-engine.c
index 3b74114..626d8e1 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -1564,13 +1564,23 @@ pk_engine_get_package (PkEngine *engine,
  * pk_engine_get_old_transactions:
  **/
 gboolean
-pk_engine_get_old_transactions (PkEngine *engine, guint number, GError **error)
+pk_engine_get_old_transactions (PkEngine *engine, guint number, gchar **tid, GError **error)
 {
+	PkTransactionItem *item;
+
 	g_return_val_if_fail (engine != NULL, FALSE);
 	g_return_val_if_fail (PK_IS_ENGINE (engine), FALSE);
 
-	pk_debug ("get %i old transactions", number);
-	return pk_transaction_db_get_list (engine->priv->transaction_db, number);
+	item = pk_transaction_list_add (engine->priv->transaction_list, NULL);
+	pk_transaction_db_get_list (engine->priv->transaction_db, number);
+	*tid = g_strdup (item->tid);
+//	pk_engine_finished_cb ();
+
+	pk_debug ("emitting finished transaction:%s, '%s', %i", item->tid, "", 0);
+	g_signal_emit (engine, signals [PK_ENGINE_FINISHED], 0, item->tid, "", 0);
+
+	return TRUE;
+//xxx
 }
 
 /**
diff --git a/src/pk-engine.h b/src/pk-engine.h
index f913482..0f39d00 100644
--- a/src/pk-engine.h
+++ b/src/pk-engine.h
@@ -179,6 +179,7 @@ gboolean	 pk_engine_get_package			(PkEng
 							 GError		**error);
 gboolean	 pk_engine_get_old_transactions		(PkEngine	*engine,
 							 guint		 number,
+							 gchar		**tid,
 							 GError		**error);
 
 G_END_DECLS
diff --git a/src/pk-interface.xml b/src/pk-interface.xml
index 4b57ca4..270e74e 100644
--- a/src/pk-interface.xml
+++ b/src/pk-interface.xml
@@ -174,9 +174,11 @@
     <!-- Transaction methods -->
     <method name="GetOldTransactions">
       <arg type="u" name="number" direction="in"/>
+      <arg type="s" name="tid" direction="out"/>
     </method>
     <signal name="Transaction">
       <arg type="s" name="tid" direction="out"/>
+      <arg type="s" name="old_tid" direction="out"/>
       <arg type="s" name="timespec" direction="out"/>
       <arg type="b" name="succeeded" direction="out"/>
       <arg type="s" name="role" direction="out"/>
diff --git a/src/pk-network.c b/src/pk-network.c
index aad74be..80d843e 100644
--- a/src/pk-network.c
+++ b/src/pk-network.c
@@ -145,7 +145,7 @@ pk_network_finalize (GObject *object)
 
 	g_return_if_fail (network->priv != NULL);
 	libnm_glib_unregister_callback (network->priv->ctx, network->priv->callbackid);
-	libnm_glib_shutdown (network->priv->ctx);
+//	libnm_glib_shutdown (network->priv->ctx);
 
 	G_OBJECT_CLASS (pk_network_parent_class)->finalize (object);
 }
diff-tree 107f6aff3281b0ea542b87ab9d59a4a4c95a3517 (from 4206ebb1bb571868357db8f09dd3a1e99c9052f8)
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Sep 21 18:12:46 2007 +0100

    space fix

diff --git a/src/pk-network.c b/src/pk-network.c
index 91de8cd..aad74be 100644
--- a/src/pk-network.c
+++ b/src/pk-network.c
@@ -144,7 +144,7 @@ pk_network_finalize (GObject *object)
 	network = PK_NETWORK (object);
 
 	g_return_if_fail (network->priv != NULL);
-	libnm_glib_unregister_callback	(network->priv->ctx, network->priv->callbackid);
+	libnm_glib_unregister_callback (network->priv->ctx, network->priv->callbackid);
 	libnm_glib_shutdown (network->priv->ctx);
 
 	G_OBJECT_CLASS (pk_network_parent_class)->finalize (object);
diff-tree 4206ebb1bb571868357db8f09dd3a1e99c9052f8 (from parents)
Merge: d29d6c9c2b8b6538f2eccaae7e8a4186395648ac ab8ba192bd855d1648df2decd3241beb4b469856
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Sep 21 17:47:46 2007 +0100

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

diff-tree ab8ba192bd855d1648df2decd3241beb4b469856 (from parents)
Merge: 84a4c05f3314292847c6f99648f44d9cbefd31b7 879aa918da5c7cc342e15d412c832a225984455e
Author: Grzegorz Dabrowski <gdx at o2.pl>
Date:   Fri Sep 21 18:36:28 2007 +0000

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

diff-tree 84a4c05f3314292847c6f99648f44d9cbefd31b7 (from 7da31b14365a674f0353c8c387fd9288223aa1ed)
Author: Grzegorz Dabrowski <gdx at o2.pl>
Date:   Fri Sep 21 18:35:56 2007 +0000

    fixed build problem with NetworkManager

diff --git a/src/Makefile.am b/src/Makefile.am
index e1c00b4..6b0f3fe 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -16,7 +16,7 @@ INCLUDES =						\
 	$(DBUS_CFLAGS)					\
 	$(SQLITE_CFLAGS)				\
 	$(POLKIT_CFLAGS)				\
-	$(NM_CFLAGS)					\
+	$(LIBNM_CFLAGS)					\
 	-DBINDIR=\"$(bindir)\"			 	\
 	-DDATADIR=\"$(datadir)\"			\
 	-DPREFIX=\""$(prefix)"\" 			\
diff --git a/src/pk-network.c b/src/pk-network.c
index 86b643e..91de8cd 100644
--- a/src/pk-network.c
+++ b/src/pk-network.c
@@ -37,7 +37,7 @@
 #include <fcntl.h>
 
 #include <glib/gi18n.h>
-#include <libnm-glib/libnm_glib.h>
+#include <libnm_glib.h>
 
 #include "pk-debug.h"
 #include "pk-network.h"
diff-tree d29d6c9c2b8b6538f2eccaae7e8a4186395648ac (from 879aa918da5c7cc342e15d412c832a225984455e)
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Sep 21 17:46:30 2007 +0100

    no more, she can't take it anymore captain

diff --git a/client/pk-monitor.c b/client/pk-monitor.c
index 06f57c4..2a19321 100644
--- a/client/pk-monitor.c
+++ b/client/pk-monitor.c
@@ -101,7 +101,7 @@ main (int argc, char *argv[])
 	pk_debug ("refreshing task list");
 	ret = pk_task_list_refresh (tlist);
 	if (ret == FALSE) {
-		g_error ("cannot refresh job list");
+		g_error ("cannot refresh transaction list");
 	}
 	task_list = pk_task_list_get_latest (tlist);
 	pk_task_list_print (tlist);
diff --git a/libpackagekit/pk-task-client.c b/libpackagekit/pk-task-client.c
index af9cb5b..550957d 100644
--- a/libpackagekit/pk-task-client.c
+++ b/libpackagekit/pk-task-client.c
@@ -66,7 +66,7 @@ struct PkTaskClientPrivate
 };
 
 typedef enum {
-	PK_TASK_CLIENT_JOB_STATUS_CHANGED,
+	PK_TASK_CLIENT_TRANSACTION_STATUS_CHANGED,
 	PK_TASK_CLIENT_PERCENTAGE_CHANGED,
 	PK_TASK_CLIENT_SUB_PERCENTAGE_CHANGED,
 	PK_TASK_CLIENT_NO_PERCENTAGE_UPDATES,
@@ -1108,10 +1108,10 @@ pk_task_client_no_percentage_updates_cb 
 }
 
 /**
- * pk_task_client_job_status_changed_cb:
+ * pk_task_client_transaction_status_changed_cb:
  */
 static void
-pk_task_client_job_status_changed_cb (PkTaskMonitor *tmonitor,
+pk_task_client_transaction_status_changed_cb (PkTaskMonitor *tmonitor,
 				      PkStatusEnum   status,
 				      PkTaskClient  *tclient)
 {
@@ -1119,7 +1119,7 @@ pk_task_client_job_status_changed_cb (Pk
 	g_return_if_fail (PK_IS_TASK_CLIENT (tclient));
 
 	pk_debug ("emit transaction-status-changed %i", status);
-	g_signal_emit (tclient , signals [PK_TASK_CLIENT_JOB_STATUS_CHANGED], 0, status);
+	g_signal_emit (tclient , signals [PK_TASK_CLIENT_TRANSACTION_STATUS_CHANGED], 0, status);
 	tclient->priv->last_status = status;
 }
 
@@ -1254,7 +1254,7 @@ pk_task_client_class_init (PkTaskClientC
 
 	object_class->finalize = pk_task_client_finalize;
 
-	signals [PK_TASK_CLIENT_JOB_STATUS_CHANGED] =
+	signals [PK_TASK_CLIENT_TRANSACTION_STATUS_CHANGED] =
 		g_signal_new ("transaction-status-changed",
 			      G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
 			      0, NULL, NULL, g_cclosure_marshal_VOID__UINT,
@@ -1381,7 +1381,7 @@ pk_task_client_init (PkTaskClient *tclie
 	g_signal_connect (tclient->priv->tmonitor, "no-percentage-updates",
 			  G_CALLBACK (pk_task_client_no_percentage_updates_cb), tclient);
 	g_signal_connect (tclient->priv->tmonitor, "transaction-status-changed",
-			  G_CALLBACK (pk_task_client_job_status_changed_cb), tclient);
+			  G_CALLBACK (pk_task_client_transaction_status_changed_cb), tclient);
 	g_signal_connect (tclient->priv->tmonitor, "package",
 			  G_CALLBACK (pk_task_client_package_cb), tclient);
 	g_signal_connect (tclient->priv->tmonitor, "transaction",
diff --git a/libpackagekit/pk-task-list.c b/libpackagekit/pk-task-list.c
index 5b2d384..39521d2 100644
--- a/libpackagekit/pk-task-list.c
+++ b/libpackagekit/pk-task-list.c
@@ -257,10 +257,10 @@ pk_task_list_get_latest (PkTaskList *tli
 }
 
 /**
- * pk_task_list_job_list_changed_cb:
+ * pk_task_list_transaction_list_changed_cb:
  **/
 static void
-pk_task_list_job_list_changed_cb (PkJobList *jlist, PkTaskList *tlist)
+pk_task_list_transaction_list_changed_cb (PkJobList *jlist, PkTaskList *tlist)
 {
 	/* for now, just refresh all the jobs. a little inefficient me thinks */
 	pk_task_list_refresh (tlist);
@@ -308,7 +308,7 @@ pk_task_list_init (PkTaskList *tlist)
 	/* get the changing job list */
 	tlist->priv->job_list = pk_job_list_new ();
 	g_signal_connect (tlist->priv->job_list, "transaction-list-changed",
-			  G_CALLBACK (pk_task_list_job_list_changed_cb), tlist);
+			  G_CALLBACK (pk_task_list_transaction_list_changed_cb), tlist);
 
 	/* we maintain a local copy */
 	tlist->priv->task_list = g_ptr_array_new ();
diff --git a/libpackagekit/pk-task-monitor.c b/libpackagekit/pk-task-monitor.c
index ddd2462..0202fef 100644
--- a/libpackagekit/pk-task-monitor.c
+++ b/libpackagekit/pk-task-monitor.c
@@ -377,10 +377,10 @@ pk_task_monitor_no_percentage_updates_cb
 }
 
 /**
- * pk_task_monitor_job_status_changed_cb:
+ * pk_task_monitor_transaction_status_changed_cb:
  */
 static void
-pk_task_monitor_job_status_changed_cb (DBusGProxy   *proxy,
+pk_task_monitor_transaction_status_changed_cb (DBusGProxy   *proxy,
 				       const gchar  *tid,
 				       const gchar  *status_text,
 				       PkTaskMonitor *tmonitor)
@@ -701,7 +701,7 @@ pk_task_monitor_init (PkTaskMonitor *tmo
 	dbus_g_proxy_add_signal (proxy, "TransactionStatusChanged",
 				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
 	dbus_g_proxy_connect_signal (proxy, "TransactionStatusChanged",
-				     G_CALLBACK (pk_task_monitor_job_status_changed_cb), tmonitor, NULL);
+				     G_CALLBACK (pk_task_monitor_transaction_status_changed_cb), tmonitor, NULL);
 
 	dbus_g_proxy_add_signal (proxy, "Package",
 				 G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
@@ -758,7 +758,7 @@ pk_task_monitor_finalize (GObject *objec
 	dbus_g_proxy_disconnect_signal (tmonitor->priv->proxy, "NoPercentageUpdates",
 				        G_CALLBACK (pk_task_monitor_no_percentage_updates_cb), tmonitor);
 	dbus_g_proxy_disconnect_signal (tmonitor->priv->proxy, "TransactionStatusChanged",
-				        G_CALLBACK (pk_task_monitor_job_status_changed_cb), tmonitor);
+				        G_CALLBACK (pk_task_monitor_transaction_status_changed_cb), tmonitor);
 	dbus_g_proxy_disconnect_signal (tmonitor->priv->proxy, "Package",
 				        G_CALLBACK (pk_task_monitor_package_cb), tmonitor);
 	dbus_g_proxy_disconnect_signal (tmonitor->priv->proxy, "Transaction",
diff --git a/python/packagekit.py b/python/packagekit.py
index 98daaba..28b7359 100644
--- a/python/packagekit.py
+++ b/python/packagekit.py
@@ -43,7 +43,7 @@ class PackageKitNotStarted(PackageKitExc
 class PackageKitAccessDenied(PackageKitException):
 	pass
 
-class PackageKitJobFailure(PackageKitException):
+class PackageKitTransactionFailure(PackageKitException):
 	pass
 
 class PackageKitBackendFailure(PackageKitException):
@@ -71,7 +71,7 @@ class PackageKit:
 		def wrapper(*args,**kwargs):
 			jid = func(*args,**kwargs)
 			if jid == -1:
-				raise PackageKitJobFailure
+				raise PackageKitTransactionFailure
 			else:
 				return jid
 		return wrapper
diff --git a/python/pkt b/python/pkt
index 3bbc44d..ab8b71b 100755
--- a/python/pkt
+++ b/python/pkt
@@ -39,19 +39,19 @@ def search(*args):
 	patt = " ".join(args[0])
 	if len(patt)==0:
 		print "need something to search for"
-		raise PackageKitJobFailure
+		raise PackageKitTransactionFailure
 	return p.SearchName(patt)
 
 def desc(*args):
 	if len(args)!=1 or len(args[0])!=1:
 		print "desc only takes single arg"
-		raise PackageKitJobFailure
+		raise PackageKitTransactionFailure
 	return p.GetDescription(args[0][0])
 
 def update(args):
 	if len(args)>0 and len(args[0])>0:
 		print "update doesn't take args"
-		raise PackageKitJobFailure
+		raise PackageKitTransactionFailure
 	return p.RefreshCache()
 
 def usage():
@@ -80,7 +80,7 @@ try:
 except PackageKitAccessDenied:
 	print "You don't have sufficient permissions to access PackageKit (on the org.freedesktop.PackageKit dbus service)"
 	exit(1)
-except PackageKitJobFailure:
+except PackageKitTransactionFailure:
 	usage()
 
 p.run()
diff --git a/src/pk-backend.c b/src/pk-backend.c
index 1ac1d14..9f7148d 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -55,7 +55,7 @@ struct _PkBackendPrivate
 {
 	GModule			*handle;
 	gchar			*name;
-	PkStatusEnum		 role; /* this never changes for the lifetime of a job */
+	PkStatusEnum		 role; /* this never changes for the lifetime of a transaction */
 	PkStatusEnum		 status; /* this changes */
 	gboolean		 xcached_force;
 	gboolean		 xcached_allow_deps;
@@ -847,7 +847,7 @@ pk_backend_finished (PkBackend *backend)
 		pk_error ("Internal error, cannot continue (will segfault in the near future...)");
 	}
 
-	/* we have to run this idle as the command may finish before the job
+	/* we have to run this idle as the command may finish before the transaction
 	 * has been sent to the client. I love async... */
 	pk_debug ("adding finished %p to timeout loop", backend);
 	g_timeout_add (50, pk_backend_finished_delay, backend);
diff --git a/src/pk-engine.c b/src/pk-engine.c
index 828892b..3b74114 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -171,10 +171,10 @@ pk_engine_transaction_list_changed_cb (P
 }
 
 /**
- * pk_engine_job_status_changed_cb:
+ * pk_engine_transaction_status_changed_cb:
  **/
 static void
-pk_engine_job_status_changed_cb (PkBackend *backend, PkStatusEnum status, PkEngine *engine)
+pk_engine_transaction_status_changed_cb (PkBackend *backend, PkStatusEnum status, PkEngine *engine)
 {
 	PkTransactionItem *item;
 	const gchar *status_text;
@@ -400,7 +400,7 @@ pk_engine_finished_cb (PkBackend *backen
 	pk_debug ("backend was running for %f seconds", time);
 	pk_transaction_db_set_finished (engine->priv->transaction_db, item->tid, TRUE, time);
 
-	pk_debug ("emitting finished job:%s, '%s', %i", item->tid, exit_text, (guint) time);
+	pk_debug ("emitting finished transaction:%s, '%s', %i", item->tid, exit_text, (guint) time);
 	g_signal_emit (engine, signals [PK_ENGINE_FINISHED], 0, item->tid, exit_text, (guint) time);
 
 	/* unref */
@@ -452,7 +452,7 @@ pk_engine_new_backend (PkEngine *engine)
 
 	/* connect up signals */
 	g_signal_connect (backend, "transaction-status-changed",
-			  G_CALLBACK (pk_engine_job_status_changed_cb), engine);
+			  G_CALLBACK (pk_engine_transaction_status_changed_cb), engine);
 	g_signal_connect (backend, "percentage-changed",
 			  G_CALLBACK (pk_engine_percentage_changed_cb), engine);
 	g_signal_connect (backend, "sub-percentage-changed",
@@ -480,7 +480,7 @@ pk_engine_new_backend (PkEngine *engine)
 	pk_transaction_list_add (engine->priv->transaction_list, backend);
 
 	/* we don't add to the array or do the transaction-list-changed yet
-	 * as this job might fail */
+	 * as this transaction might fail */
 	return backend;
 }
 
@@ -1423,7 +1423,7 @@ pk_engine_get_transaction_list (PkEngine
 	g_return_val_if_fail (engine != NULL, FALSE);
 	g_return_val_if_fail (PK_IS_ENGINE (engine), FALSE);
 
-	pk_debug ("getting job list");
+	pk_debug ("getting transaction list");
 	*transaction_list = pk_transaction_list_get_array (engine->priv->transaction_list);
 
 	return TRUE;
@@ -1713,11 +1713,11 @@ pk_engine_get_seconds_idle (PkEngine *en
 	g_return_val_if_fail (engine != NULL, 0);
 	g_return_val_if_fail (PK_IS_ENGINE (engine), 0);
 
-	/* check for jobs running - a job that takes a *long* time might not
+	/* check for transactions running - a transaction that takes a *long* time might not
 	 * give sufficient percentage updates to not be marked as idle */
 	size = pk_transaction_list_get_size (engine->priv->transaction_list);
 	if (size != 0) {
-		pk_debug ("engine idle zero as %i jobs in progress", size);
+		pk_debug ("engine idle zero as %i transactions in progress", size);
 		return 0;
 	}
 
diff-tree 879aa918da5c7cc342e15d412c832a225984455e (from e4272897795e9000ab86066f267f85f43446467d)
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Sep 21 17:35:19 2007 +0100

    fix make check

diff --git a/libpackagekit/pk-enum-list.c b/libpackagekit/pk-enum-list.c
index 2a18d68..028a1dc 100644
--- a/libpackagekit/pk-enum-list.c
+++ b/libpackagekit/pk-enum-list.c
@@ -341,7 +341,7 @@ libst_enum_list (LibSelfTest *test)
 
 	/************************************************************/
 	libst_title (test, "add multiple");
-	ret = pk_enum_list_append_multiple (elist, PK_ROLE_ENUM_SEARCH_DETAILS, PK_ACTION_ENUM_SEARCH_GROUP, -1);
+	ret = pk_enum_list_append_multiple (elist, PK_ROLE_ENUM_SEARCH_DETAILS, PK_ROLE_ENUM_SEARCH_GROUP, -1);
 	if (ret == TRUE) {
 		libst_success (test, NULL);
 	} else {
diff-tree e4272897795e9000ab86066f267f85f43446467d (from 7da31b14365a674f0353c8c387fd9288223aa1ed)
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Sep 21 17:34:30 2007 +0100

    convert more job'isms

diff --git a/libpackagekit/pk-job-list.c b/libpackagekit/pk-job-list.c
index 5f88d92..24e54c9 100644
--- a/libpackagekit/pk-job-list.c
+++ b/libpackagekit/pk-job-list.c
@@ -54,7 +54,7 @@ struct PkJobListPrivate
 };
 
 typedef enum {
-	PK_JOB_LIST_CHANGED,
+	PK_TRANSACTION_LIST_CHANGED,
 	PK_JOB_LIST_LAST_SIGNAL
 } PkSignals;
 
@@ -154,8 +154,8 @@ pk_job_list_changed_cb (DBusGProxy *prox
 		g_strfreev (jlist->priv->array);
 	}
 	jlist->priv->array = g_strdupv (array);
-	pk_debug ("emit job-list-changed");
-	g_signal_emit (jlist , signals [PK_JOB_LIST_CHANGED], 0);
+	pk_debug ("emit transaction-list-changed");
+	g_signal_emit (jlist , signals [PK_TRANSACTION_LIST_CHANGED], 0);
 }
 
 /**
@@ -168,8 +168,8 @@ pk_job_list_class_init (PkJobListClass *
 
 	object_class->finalize = pk_job_list_finalize;
 
-	signals [PK_JOB_LIST_CHANGED] =
-		g_signal_new ("job-list-changed",
+	signals [PK_TRANSACTION_LIST_CHANGED] =
+		g_signal_new ("transaction-list-changed",
 			      G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
 			      0, NULL, NULL, g_cclosure_marshal_VOID__VOID,
 			      G_TYPE_NONE, 0);
diff --git a/libpackagekit/pk-task-client.c b/libpackagekit/pk-task-client.c
index ae8562c..af9cb5b 100644
--- a/libpackagekit/pk-task-client.c
+++ b/libpackagekit/pk-task-client.c
@@ -1118,7 +1118,7 @@ pk_task_client_job_status_changed_cb (Pk
 	g_return_if_fail (tclient != NULL);
 	g_return_if_fail (PK_IS_TASK_CLIENT (tclient));
 
-	pk_debug ("emit job-status-changed %i", status);
+	pk_debug ("emit transaction-status-changed %i", status);
 	g_signal_emit (tclient , signals [PK_TASK_CLIENT_JOB_STATUS_CHANGED], 0, status);
 	tclient->priv->last_status = status;
 }
@@ -1255,7 +1255,7 @@ pk_task_client_class_init (PkTaskClientC
 	object_class->finalize = pk_task_client_finalize;
 
 	signals [PK_TASK_CLIENT_JOB_STATUS_CHANGED] =
-		g_signal_new ("job-status-changed",
+		g_signal_new ("transaction-status-changed",
 			      G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
 			      0, NULL, NULL, g_cclosure_marshal_VOID__UINT,
 			      G_TYPE_NONE, 1, G_TYPE_UINT);
@@ -1380,7 +1380,7 @@ pk_task_client_init (PkTaskClient *tclie
 			  G_CALLBACK (pk_task_client_sub_percentage_changed_cb), tclient);
 	g_signal_connect (tclient->priv->tmonitor, "no-percentage-updates",
 			  G_CALLBACK (pk_task_client_no_percentage_updates_cb), tclient);
-	g_signal_connect (tclient->priv->tmonitor, "job-status-changed",
+	g_signal_connect (tclient->priv->tmonitor, "transaction-status-changed",
 			  G_CALLBACK (pk_task_client_job_status_changed_cb), tclient);
 	g_signal_connect (tclient->priv->tmonitor, "package",
 			  G_CALLBACK (pk_task_client_package_cb), tclient);
diff --git a/libpackagekit/pk-task-list.c b/libpackagekit/pk-task-list.c
index 266f02b..5b2d384 100644
--- a/libpackagekit/pk-task-list.c
+++ b/libpackagekit/pk-task-list.c
@@ -209,7 +209,7 @@ pk_task_list_refresh (PkTaskList *tlist)
 			item = g_new0 (PkTaskListItem, 1);
 			item->tid = g_strdup (tid);
 			item->monitor = pk_task_monitor_new ();
-			g_signal_connect (item->monitor, "job-status-changed",
+			g_signal_connect (item->monitor, "transaction-status-changed",
 					  G_CALLBACK (pk_task_list_job_status_changed_cb), tlist);
 			g_signal_connect (item->monitor, "finished",
 					  G_CALLBACK (pk_task_list_job_finished_cb), tlist);
@@ -307,7 +307,7 @@ pk_task_list_init (PkTaskList *tlist)
 
 	/* get the changing job list */
 	tlist->priv->job_list = pk_job_list_new ();
-	g_signal_connect (tlist->priv->job_list, "job-list-changed",
+	g_signal_connect (tlist->priv->job_list, "transaction-list-changed",
 			  G_CALLBACK (pk_task_list_job_list_changed_cb), tlist);
 
 	/* we maintain a local copy */
diff --git a/libpackagekit/pk-task-monitor.c b/libpackagekit/pk-task-monitor.c
index ab17893..ddd2462 100644
--- a/libpackagekit/pk-task-monitor.c
+++ b/libpackagekit/pk-task-monitor.c
@@ -54,7 +54,7 @@ struct PkTaskMonitorPrivate
 };
 
 typedef enum {
-	PK_TASK_MONITOR_JOB_STATUS_CHANGED,
+	PK_TASK_MONITOR_TRANSACTION_STATUS_CHANGED,
 	PK_TASK_MONITOR_PERCENTAGE_CHANGED,
 	PK_TASK_MONITOR_SUB_PERCENTAGE_CHANGED,
 	PK_TASK_MONITOR_NO_PERCENTAGE_UPDATES,
@@ -393,8 +393,8 @@ pk_task_monitor_job_status_changed_cb (D
 	status = pk_status_enum_from_text (status_text);
 
 	if (pk_transaction_id_equal (tid, tmonitor->priv->tid) == TRUE) {
-		pk_debug ("emit job-status-changed %i", status);
-		g_signal_emit (tmonitor , signals [PK_TASK_MONITOR_JOB_STATUS_CHANGED], 0, status);
+		pk_debug ("emit transaction-status-changed %i", status);
+		g_signal_emit (tmonitor , signals [PK_TASK_MONITOR_TRANSACTION_STATUS_CHANGED], 0, status);
 	}
 }
 
@@ -535,8 +535,8 @@ pk_task_monitor_class_init (PkTaskMonito
 
 	object_class->finalize = pk_task_monitor_finalize;
 
-	signals [PK_TASK_MONITOR_JOB_STATUS_CHANGED] =
-		g_signal_new ("job-status-changed",
+	signals [PK_TASK_MONITOR_TRANSACTION_STATUS_CHANGED] =
+		g_signal_new ("transaction-status-changed",
 			      G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
 			      0, NULL, NULL, g_cclosure_marshal_VOID__UINT,
 			      G_TYPE_NONE, 1, G_TYPE_UINT);
@@ -698,9 +698,9 @@ pk_task_monitor_init (PkTaskMonitor *tmo
 	dbus_g_proxy_connect_signal (proxy, "NoPercentageUpdates",
 				     G_CALLBACK (pk_task_monitor_no_percentage_updates_cb), tmonitor, NULL);
 
-	dbus_g_proxy_add_signal (proxy, "JobStatusChanged",
+	dbus_g_proxy_add_signal (proxy, "TransactionStatusChanged",
 				 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (proxy, "JobStatusChanged",
+	dbus_g_proxy_connect_signal (proxy, "TransactionStatusChanged",
 				     G_CALLBACK (pk_task_monitor_job_status_changed_cb), tmonitor, NULL);
 
 	dbus_g_proxy_add_signal (proxy, "Package",
@@ -757,7 +757,7 @@ pk_task_monitor_finalize (GObject *objec
 				        G_CALLBACK (pk_task_monitor_sub_percentage_changed_cb), tmonitor);
 	dbus_g_proxy_disconnect_signal (tmonitor->priv->proxy, "NoPercentageUpdates",
 				        G_CALLBACK (pk_task_monitor_no_percentage_updates_cb), tmonitor);
-	dbus_g_proxy_disconnect_signal (tmonitor->priv->proxy, "JobStatusChanged",
+	dbus_g_proxy_disconnect_signal (tmonitor->priv->proxy, "TransactionStatusChanged",
 				        G_CALLBACK (pk_task_monitor_job_status_changed_cb), tmonitor);
 	dbus_g_proxy_disconnect_signal (tmonitor->priv->proxy, "Package",
 				        G_CALLBACK (pk_task_monitor_package_cb), tmonitor);
diff --git a/python/packagekit.py b/python/packagekit.py
index a86e574..98daaba 100644
--- a/python/packagekit.py
+++ b/python/packagekit.py
@@ -109,7 +109,7 @@ class PackageKit:
 		elif kwargs['member'] == "SubPercentageChanged":
 			progress = (float(args[1])/100.0)+int(progress)
 			self.Percentage(progress)
-		elif kwargs['member'] == "JobStatusChanged":
+		elif kwargs['member'] == "TransactionStatusChanged":
 			self.JobStatus(args[1])
 		elif kwargs['member'] == "Package":
 			self.Package(args[2],args[3])
diff --git a/src/pk-backend.c b/src/pk-backend.c
index 862fcd5..1ac1d14 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -82,7 +82,7 @@ struct _PkBackendPrivate
 };
 
 enum {
-	PK_BACKEND_JOB_STATUS_CHANGED,
+	PK_BACKEND_TRANSACTION_STATUS_CHANGED,
 	PK_BACKEND_PERCENTAGE_CHANGED,
 	PK_BACKEND_SUB_PERCENTAGE_CHANGED,
 	PK_BACKEND_NO_PERCENTAGE_UPDATES,
@@ -605,8 +605,8 @@ pk_backend_change_status (PkBackend *bac
 	g_return_val_if_fail (backend != NULL, FALSE);
 	g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE);
 	backend->priv->status = status;
-	pk_debug ("emiting job-status-changed %i", status);
-	g_signal_emit (backend, signals [PK_BACKEND_JOB_STATUS_CHANGED], 0, status);
+	pk_debug ("emiting transaction-status-changed %i", status);
+	g_signal_emit (backend, signals [PK_BACKEND_TRANSACTION_STATUS_CHANGED], 0, status);
 	return TRUE;
 }
 
@@ -1383,8 +1383,8 @@ pk_backend_class_init (PkBackendClass *k
 
 	object_class->finalize = pk_backend_finalize;
 
-	signals [PK_BACKEND_JOB_STATUS_CHANGED] =
-		g_signal_new ("job-status-changed",
+	signals [PK_BACKEND_TRANSACTION_STATUS_CHANGED] =
+		g_signal_new ("transaction-status-changed",
 			      G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
 			      0, NULL, NULL, g_cclosure_marshal_VOID__UINT,
 			      G_TYPE_NONE, 1, G_TYPE_UINT);
diff --git a/src/pk-engine.c b/src/pk-engine.c
index c68ba8c..828892b 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -62,13 +62,13 @@ struct PkEnginePrivate
 	PolKitContext		*pk_context;
 	DBusConnection		*connection;
 	gchar			*backend;
-	PkTransactionList	*job_list;
+	PkTransactionList	*transaction_list;
 	PkTransactionDb		*transaction_db;
 };
 
 enum {
-	PK_ENGINE_JOB_LIST_CHANGED,
-	PK_ENGINE_JOB_STATUS_CHANGED,
+	PK_ENGINE_TRANSACTION_LIST_CHANGED,
+	PK_ENGINE_TRANSACTION_STATUS_CHANGED,
 	PK_ENGINE_PERCENTAGE_CHANGED,
 	PK_ENGINE_SUB_PERCENTAGE_CHANGED,
 	PK_ENGINE_NO_PERCENTAGE_UPDATES,
@@ -158,15 +158,15 @@ pk_engine_reset_timer (PkEngine *engine)
 static void
 pk_engine_transaction_list_changed_cb (PkTransactionList *tlist, PkEngine *engine)
 {
-	gchar **job_list;
+	gchar **transaction_list;
 
 	g_return_if_fail (engine != NULL);
 	g_return_if_fail (PK_IS_ENGINE (engine));
 
-	job_list = pk_transaction_list_get_array (engine->priv->job_list);
+	transaction_list = pk_transaction_list_get_array (engine->priv->transaction_list);
 
-	pk_debug ("emitting job-list-changed");
-	g_signal_emit (engine, signals [PK_ENGINE_JOB_LIST_CHANGED], 0, job_list);
+	pk_debug ("emitting transaction-list-changed");
+	g_signal_emit (engine, signals [PK_ENGINE_TRANSACTION_LIST_CHANGED], 0, transaction_list);
 	pk_engine_reset_timer (engine);
 }
 
@@ -182,15 +182,15 @@ pk_engine_job_status_changed_cb (PkBacke
 	g_return_if_fail (engine != NULL);
 	g_return_if_fail (PK_IS_ENGINE (engine));
 
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return;
 	}
 		status_text = pk_status_enum_to_text (status);
 
-	pk_debug ("emitting job-status-changed tid:%s, '%s'", item->tid, status_text);
-	g_signal_emit (engine, signals [PK_ENGINE_JOB_STATUS_CHANGED], 0, item->tid, status_text);
+	pk_debug ("emitting transaction-status-changed tid:%s, '%s'", item->tid, status_text);
+	g_signal_emit (engine, signals [PK_ENGINE_TRANSACTION_STATUS_CHANGED], 0, item->tid, status_text);
 	pk_engine_reset_timer (engine);
 }
 
@@ -205,7 +205,7 @@ pk_engine_percentage_changed_cb (PkBacke
 	g_return_if_fail (engine != NULL);
 	g_return_if_fail (PK_IS_ENGINE (engine));
 
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return;
@@ -226,7 +226,7 @@ pk_engine_sub_percentage_changed_cb (PkB
 	g_return_if_fail (engine != NULL);
 	g_return_if_fail (PK_IS_ENGINE (engine));
 
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return;
@@ -247,7 +247,7 @@ pk_engine_no_percentage_updates_cb (PkBa
 	g_return_if_fail (engine != NULL);
 	g_return_if_fail (PK_IS_ENGINE (engine));
 
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return;
@@ -268,7 +268,7 @@ pk_engine_package_cb (PkBackend *backend
 	g_return_if_fail (engine != NULL);
 	g_return_if_fail (PK_IS_ENGINE (engine));
 
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return;
@@ -292,7 +292,7 @@ pk_engine_update_detail_cb (PkBackend *b
 	g_return_if_fail (engine != NULL);
 	g_return_if_fail (PK_IS_ENGINE (engine));
 
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return;
@@ -316,7 +316,7 @@ pk_engine_error_code_cb (PkBackend *back
 	g_return_if_fail (engine != NULL);
 	g_return_if_fail (PK_IS_ENGINE (engine));
 
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return;
@@ -339,7 +339,7 @@ pk_engine_require_restart_cb (PkBackend 
 	g_return_if_fail (engine != NULL);
 	g_return_if_fail (PK_IS_ENGINE (engine));
 
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return;
@@ -363,7 +363,7 @@ pk_engine_description_cb (PkBackend *bac
 	g_return_if_fail (engine != NULL);
 	g_return_if_fail (PK_IS_ENGINE (engine));
 
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return;
@@ -387,7 +387,7 @@ pk_engine_finished_cb (PkBackend *backen
 	g_return_if_fail (engine != NULL);
 	g_return_if_fail (PK_IS_ENGINE (engine));
 
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return;
@@ -419,7 +419,7 @@ pk_engine_allow_interrupt_cb (PkBackend 
 	g_return_if_fail (engine != NULL);
 	g_return_if_fail (PK_IS_ENGINE (engine));
 
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return;
@@ -451,7 +451,7 @@ pk_engine_new_backend (PkEngine *engine)
 	pk_debug ("adding backend %p", backend);
 
 	/* connect up signals */
-	g_signal_connect (backend, "job-status-changed",
+	g_signal_connect (backend, "transaction-status-changed",
 			  G_CALLBACK (pk_engine_job_status_changed_cb), engine);
 	g_signal_connect (backend, "percentage-changed",
 			  G_CALLBACK (pk_engine_percentage_changed_cb), engine);
@@ -477,9 +477,9 @@ pk_engine_new_backend (PkEngine *engine)
 	/* initialise some stuff */
 	pk_engine_reset_timer (engine);
 
-	pk_transaction_list_add (engine->priv->job_list, backend);
+	pk_transaction_list_add (engine->priv->transaction_list, backend);
 
-	/* we don't add to the array or do the job-list-changed yet
+	/* we don't add to the array or do the transaction-list-changed yet
 	 * as this job might fail */
 	return backend;
 }
@@ -497,10 +497,10 @@ pk_engine_add_backend (PkEngine *engine,
 	g_return_val_if_fail (PK_IS_ENGINE (engine), FALSE);
 
 	/* commit, so it appears in the JobList */
-	pk_transaction_list_commit (engine->priv->job_list, backend);
+	pk_transaction_list_commit (engine->priv->transaction_list, backend);
 
 	/* get all the data we know */
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 
 	/* only save into the database for useful stuff */
 	pk_backend_get_role (backend, &role, NULL);
@@ -531,7 +531,7 @@ pk_engine_delete_backend (PkEngine *engi
 	g_return_val_if_fail (PK_IS_ENGINE (engine), FALSE);
 
 	pk_debug ("removing backend %p as it failed", backend);
-	pk_transaction_list_remove (engine->priv->job_list, backend);
+	pk_transaction_list_remove (engine->priv->transaction_list, backend);
 
 	/* we don't do g_object_unref (backend) here as it is done in the
 	   ::finished handler */
@@ -626,7 +626,7 @@ pk_engine_refresh_cache (PkEngine *engin
 		return FALSE;
 	}
 	pk_engine_add_backend (engine, backend);
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return FALSE;
@@ -665,7 +665,7 @@ pk_engine_get_updates (PkEngine *engine,
 		return FALSE;
 	}
 	pk_engine_add_backend (engine, backend);
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return FALSE;
@@ -769,7 +769,7 @@ pk_engine_search_name (PkEngine *engine,
 		return FALSE;
 	}
 	pk_engine_add_backend (engine, backend);
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return FALSE;
@@ -821,7 +821,7 @@ pk_engine_search_details (PkEngine *engi
 		return FALSE;
 	}
 	pk_engine_add_backend (engine, backend);
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return FALSE;
@@ -873,7 +873,7 @@ pk_engine_search_group (PkEngine *engine
 		return FALSE;
 	}
 	pk_engine_add_backend (engine, backend);
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return FALSE;
@@ -925,7 +925,7 @@ pk_engine_search_file (PkEngine *engine,
 		return FALSE;
 	}
 	pk_engine_add_backend (engine, backend);
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return FALSE;
@@ -973,7 +973,7 @@ pk_engine_get_depends (PkEngine *engine,
 		return FALSE;
 	}
 	pk_engine_add_backend (engine, backend);
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return FALSE;
@@ -1021,7 +1021,7 @@ pk_engine_get_requires (PkEngine *engine
 		return FALSE;
 	}
 	pk_engine_add_backend (engine, backend);
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return FALSE;
@@ -1069,7 +1069,7 @@ pk_engine_get_update_detail (PkEngine *e
 		return FALSE;
 	}
 	pk_engine_add_backend (engine, backend);
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return FALSE;
@@ -1109,7 +1109,7 @@ pk_engine_get_description (PkEngine *eng
 		return FALSE;
 	}
 	pk_engine_add_backend (engine, backend);
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return FALSE;
@@ -1142,7 +1142,7 @@ pk_engine_update_system (PkEngine *engin
 	}
 
 	/* are we already performing an update? */
-	if (pk_transaction_list_role_present (engine->priv->job_list, PK_ROLE_ENUM_UPDATE_SYSTEM) == TRUE) {
+	if (pk_transaction_list_role_present (engine->priv->transaction_list, PK_ROLE_ENUM_UPDATE_SYSTEM) == TRUE) {
 		error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_TRANSACTION_EXISTS_WITH_ROLE,
 				     "Already performing system update");
 		dbus_g_method_return_error (context, error);
@@ -1168,7 +1168,7 @@ pk_engine_update_system (PkEngine *engin
 	}
 	pk_engine_add_backend (engine, backend);
 
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return;
@@ -1226,7 +1226,7 @@ pk_engine_remove_package (PkEngine *engi
 	}
 	pk_engine_add_backend (engine, backend);
 
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return;
@@ -1286,7 +1286,7 @@ pk_engine_install_package (PkEngine *eng
 	}
 	pk_engine_add_backend (engine, backend);
 
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return;
@@ -1346,7 +1346,7 @@ pk_engine_install_file (PkEngine *engine
 	}
 	pk_engine_add_backend (engine, backend);
 
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return;
@@ -1406,7 +1406,7 @@ pk_engine_update_package (PkEngine *engi
 	}
 	pk_engine_add_backend (engine, backend);
 
-	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	item = pk_transaction_list_get_item_from_backend (engine->priv->transaction_list, backend);
 	if (item == NULL) {
 		pk_warning ("could not find backend");
 		return;
@@ -1418,13 +1418,13 @@ pk_engine_update_package (PkEngine *engi
  * pk_engine_get_transaction_list:
  **/
 gboolean
-pk_engine_get_transaction_list (PkEngine *engine, gchar ***job_list, GError **error)
+pk_engine_get_transaction_list (PkEngine *engine, gchar ***transaction_list, GError **error)
 {
 	g_return_val_if_fail (engine != NULL, FALSE);
 	g_return_val_if_fail (PK_IS_ENGINE (engine), FALSE);
 
 	pk_debug ("getting job list");
-	*job_list = pk_transaction_list_get_array (engine->priv->job_list);
+	*transaction_list = pk_transaction_list_get_array (engine->priv->transaction_list);
 
 	return TRUE;
 }
@@ -1442,7 +1442,7 @@ pk_engine_get_status (PkEngine *engine, 
 	g_return_val_if_fail (engine != NULL, FALSE);
 	g_return_val_if_fail (PK_IS_ENGINE (engine), FALSE);
 
-	item = pk_transaction_list_get_item_from_tid (engine->priv->job_list, tid);
+	item = pk_transaction_list_get_item_from_tid (engine->priv->transaction_list, tid);
 	if (item == NULL) {
 		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_TRANSACTION,
 			     "No tid:%s", tid);
@@ -1467,7 +1467,7 @@ pk_engine_get_role (PkEngine *engine, co
 	g_return_val_if_fail (engine != NULL, FALSE);
 	g_return_val_if_fail (PK_IS_ENGINE (engine), FALSE);
 
-	item = pk_transaction_list_get_item_from_tid (engine->priv->job_list, tid);
+	item = pk_transaction_list_get_item_from_tid (engine->priv->transaction_list, tid);
 	if (item == NULL) {
 		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_TRANSACTION,
 			     "No tid:%s", tid);
@@ -1491,7 +1491,7 @@ pk_engine_get_percentage (PkEngine *engi
 	g_return_val_if_fail (engine != NULL, FALSE);
 	g_return_val_if_fail (PK_IS_ENGINE (engine), FALSE);
 
-	item = pk_transaction_list_get_item_from_tid (engine->priv->job_list, tid);
+	item = pk_transaction_list_get_item_from_tid (engine->priv->transaction_list, tid);
 	if (item == NULL) {
 		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_TRANSACTION,
 			     "No tid:%s", tid);
@@ -1518,7 +1518,7 @@ pk_engine_get_sub_percentage (PkEngine *
 	g_return_val_if_fail (engine != NULL, FALSE);
 	g_return_val_if_fail (PK_IS_ENGINE (engine), FALSE);
 
-	item = pk_transaction_list_get_item_from_tid (engine->priv->job_list, tid);
+	item = pk_transaction_list_get_item_from_tid (engine->priv->transaction_list, tid);
 	if (item == NULL) {
 		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_TRANSACTION,
 			     "No tid:%s", tid);
@@ -1545,7 +1545,7 @@ pk_engine_get_package (PkEngine *engine,
 	g_return_val_if_fail (engine != NULL, FALSE);
 	g_return_val_if_fail (PK_IS_ENGINE (engine), FALSE);
 
-	item = pk_transaction_list_get_item_from_tid (engine->priv->job_list, tid);
+	item = pk_transaction_list_get_item_from_tid (engine->priv->transaction_list, tid);
 	if (item == NULL) {
 		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_TRANSACTION,
 			     "No tid:%s", tid);
@@ -1585,7 +1585,7 @@ pk_engine_cancel (PkEngine *engine, cons
 	g_return_val_if_fail (engine != NULL, FALSE);
 	g_return_val_if_fail (PK_IS_ENGINE (engine), FALSE);
 
-	item = pk_transaction_list_get_item_from_tid (engine->priv->job_list, tid);
+	item = pk_transaction_list_get_item_from_tid (engine->priv->transaction_list, tid);
 	if (item == NULL) {
 		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_TRANSACTION,
 			     "No tid:%s", tid);
@@ -1715,7 +1715,7 @@ pk_engine_get_seconds_idle (PkEngine *en
 
 	/* check for jobs running - a job that takes a *long* time might not
 	 * give sufficient percentage updates to not be marked as idle */
-	size = pk_transaction_list_get_size (engine->priv->job_list);
+	size = pk_transaction_list_get_size (engine->priv->transaction_list);
 	if (size != 0) {
 		pk_debug ("engine idle zero as %i jobs in progress", size);
 		return 0;
@@ -1738,13 +1738,13 @@ pk_engine_class_init (PkEngineClass *kla
 	object_class->finalize = pk_engine_finalize;
 
 	/* set up signal that emits 'au' */
-	signals [PK_ENGINE_JOB_LIST_CHANGED] =
-		g_signal_new ("job-list-changed",
+	signals [PK_ENGINE_TRANSACTION_LIST_CHANGED] =
+		g_signal_new ("transaction-list-changed",
 			      G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
 			      0, NULL, NULL, g_cclosure_marshal_VOID__BOXED,
 			      G_TYPE_NONE, 1, G_TYPE_STRV);
-	signals [PK_ENGINE_JOB_STATUS_CHANGED] =
-		g_signal_new ("job-status-changed",
+	signals [PK_ENGINE_TRANSACTION_STATUS_CHANGED] =
+		g_signal_new ("transaction-status-changed",
 			      G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_LAST,
 			      0, NULL, NULL, pk_marshal_VOID__STRING_STRING,
 			      G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);
@@ -1824,8 +1824,8 @@ pk_engine_init (PkEngine *engine)
 	engine->priv->timer = g_timer_new ();
 	engine->priv->backend = NULL;
 
-	engine->priv->job_list = pk_transaction_list_new ();
-	g_signal_connect (engine->priv->job_list, "changed",
+	engine->priv->transaction_list = pk_transaction_list_new ();
+	g_signal_connect (engine->priv->transaction_list, "changed",
 			  G_CALLBACK (pk_engine_transaction_list_changed_cb), engine);
 
 	/* we use a trasaction db to store old transactions and to do rollbacks */
@@ -1870,7 +1870,7 @@ pk_engine_finalize (GObject *object)
 	g_timer_destroy (engine->priv->timer);
 	g_free (engine->priv->backend);
 	polkit_context_unref (engine->priv->pk_context);
-	g_object_unref (engine->priv->job_list);
+	g_object_unref (engine->priv->transaction_list);
 	g_object_unref (engine->priv->transaction_db);
 
 	G_OBJECT_CLASS (pk_engine_parent_class)->finalize (object);
diff --git a/src/pk-engine.h b/src/pk-engine.h
index e60273d..f913482 100644
--- a/src/pk-engine.h
+++ b/src/pk-engine.h
@@ -139,8 +139,8 @@ void		 pk_engine_update_package		(PkEngi
 							 const gchar	*package_id,
 							 DBusGMethodInvocation *context,
 							 GError		**error);
-gboolean	 pk_engine_get_transaction_list			(PkEngine	*engine,
-							 gchar		***job_list,
+gboolean	 pk_engine_get_transaction_list		(PkEngine	*engine,
+							 gchar		***transaction_list,
 							 GError		**error);
 gboolean	 pk_engine_get_status			(PkEngine	*engine,
 							 const gchar	*tid,
diff --git a/src/pk-interface.xml b/src/pk-interface.xml
index f057b01..4b57ca4 100644
--- a/src/pk-interface.xml
+++ b/src/pk-interface.xml
@@ -2,7 +2,7 @@
 <node name="/">
   <interface name="org.freedesktop.PackageKit">
 
-    <!-- Schedule new jobs -->
+    <!-- Schedule new transactions -->
     <method name="GetUpdates">
       <arg type="s" name="tid" direction="out"/>
     </method>
@@ -72,12 +72,12 @@
       <arg type="s" name="tid" direction="out"/>
     </method>
 
-    <!-- signals emitted from any job -->
-    <signal name="JobStatusChanged">
+    <!-- signals emitted from any transaction -->
+    <signal name="TransactionStatusChanged">
       <arg type="s" name="tid" direction="out"/>
       <arg type="s" name="status" direction="out"/> <!-- invalid,setup,download,install,update,exit -->
     </signal>
-    <signal name="PercentageChanged"> <!-- progress of the whole job -->
+    <signal name="PercentageChanged"> <!-- progress of the whole transaction -->
       <arg type="s" name="tid" direction="out"/>
       <arg type="u" name="percentage" direction="out"/>
     </signal>
@@ -114,11 +114,11 @@
     <signal name="Finished">
       <arg type="s" name="tid" direction="out"/>
       <arg type="s" name="status" direction="out"/> <!-- success,failed,canceled -->
-      <arg type="u" name="runtime" direction="out"/> <!-- amount of time job has been running in seconds -->
+      <arg type="u" name="runtime" direction="out"/> <!-- amount of time transaction has been running in seconds -->
     </signal>
     <signal name="AllowInterrupt">
       <arg type="s" name="tid" direction="out"/>
-      <arg type="b" name="allow_kill" direction="out"/> <!-- if the job can be SIGKILL'd -->
+      <arg type="b" name="allow_kill" direction="out"/> <!-- if the transaction can be SIGKILL'd -->
     </signal>
     <signal name="ErrorCode">
       <arg type="s" name="tid" direction="out"/>
@@ -131,17 +131,17 @@
       <arg type="s" name="details" direction="out"/> <!-- non-localized detail -->
     </signal>
 
-    <!-- Do things or query jobs -->
+    <!-- Do things or query transactions -->
     <method name="Cancel"> <!-- might not succeed for all manner or reasons -->
       <!-- throws NoSuchTransaction -->
       <arg type="s" name="tid" direction="in"/>
     </method>
-    <method name="GetStatus"> <!-- this is what the job is currrently doing, and might change -->
+    <method name="GetStatus"> <!-- this is what the transaction is currrently doing, and might change -->
       <!-- throws NoSuchTransaction -->
       <arg type="s" name="tid" direction="in"/>
       <arg type="s" name="status" direction="out"/> <!-- query,download,install,exit -->
     </method>
-    <method name="GetRole"> <!-- this is the master role, i.e. won't change for the lifetime of the job -->
+    <method name="GetRole"> <!-- this is the master role, i.e. won't change for the lifetime of the transaction -->
       <!-- throws NoSuchTransaction -->
       <arg type="s" name="tid" direction="in"/>
       <arg type="s" name="status" direction="out"/> <!-- query,download,install,exit -->
diff-tree 7da31b14365a674f0353c8c387fd9288223aa1ed (from c5e0f41d4db3fa360a6528566675b2ba11258067)
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Sep 21 17:21:58 2007 +0100

    remove some of the job'isms

diff --git a/TODO b/TODO
index 1d411e1..647b139 100644
--- a/TODO
+++ b/TODO
@@ -1,8 +1,6 @@
 Order of no particular importance:
 
 *** API Changes ***
-s/GetJobList/GetTransactions
-s/JobListChanged/TransactionListChanged
 s/GetOldTransactions/GetTransactionDetails
 
 *** Have to have an UpdatesChanged signal ***
diff --git a/libpackagekit/pk-job-list.c b/libpackagekit/pk-job-list.c
index 1fc2361..5f88d92 100644
--- a/libpackagekit/pk-job-list.c
+++ b/libpackagekit/pk-job-list.c
@@ -109,7 +109,7 @@ pk_job_list_refresh (PkJobList *jlist)
 		jlist->priv->array = NULL;
 	}
 	error = NULL;
-	ret = dbus_g_proxy_call (jlist->priv->proxy, "GetJobList", &error,
+	ret = dbus_g_proxy_call (jlist->priv->proxy, "GetTransactionList", &error,
 				 G_TYPE_INVALID,
 				 G_TYPE_STRV, &array,
 				 G_TYPE_INVALID);
@@ -119,7 +119,7 @@ pk_job_list_refresh (PkJobList *jlist)
 	}
 	if (ret == FALSE) {
 		/* abort as the DBUS method failed */
-		pk_warning ("GetJobList failed!");
+		pk_warning ("GetTransactionList failed!");
 		jlist->priv->array = NULL;
 		return FALSE;
 	}
@@ -240,9 +240,9 @@ pk_job_list_init (PkJobList *jlist)
 	}
 	jlist->priv->proxy = proxy;
 
-	dbus_g_proxy_add_signal (proxy, "JobListChanged",
+	dbus_g_proxy_add_signal (proxy, "TransactionListChanged",
 				 G_TYPE_STRV, G_TYPE_INVALID);
-	dbus_g_proxy_connect_signal (proxy, "JobListChanged",
+	dbus_g_proxy_connect_signal (proxy, "TransactionListChanged",
 				     G_CALLBACK(pk_job_list_changed_cb), jlist, NULL);
 
 	/* force a refresh so we have valid data*/
diff --git a/python/packagekit.py b/python/packagekit.py
index 58304d0..a86e574 100644
--- a/python/packagekit.py
+++ b/python/packagekit.py
@@ -97,7 +97,7 @@ class PackageKit:
 		self.loop.run()
 
 	def catchall_signal_handler(self,*args, **kwargs):
-		#if args[0] != self.job and kwargs['member']!="JobListChanged":
+		#if args[0] != self.job and kwargs['member']!="TransactionListChanged":
 		#	print "args",args,kwargs
 		#	return
 		if kwargs['member'] == "Finished":
@@ -113,7 +113,7 @@ class PackageKit:
 			self.JobStatus(args[1])
 		elif kwargs['member'] == "Package":
 			self.Package(args[2],args[3])
-		elif kwargs['member'] in ["NoPercentageUpdates","JobListChanged"]:
+		elif kwargs['member'] in ["NoPercentageUpdates","TransactionListChanged"]:
 			pass
 		else:
 			print "Caught signal %s"% kwargs['member']
diff --git a/src/pk-engine.c b/src/pk-engine.c
index 86196c7..c68ba8c 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -115,9 +115,9 @@ pk_engine_error_get_type (void)
 		{
 			ENUM_ENTRY (PK_ENGINE_ERROR_DENIED, "PermissionDenied"),
 			ENUM_ENTRY (PK_ENGINE_ERROR_NOT_SUPPORTED, "NotSupported"),
-			ENUM_ENTRY (PK_ENGINE_ERROR_NO_SUCH_JOB, "NoSuchJob"),
+			ENUM_ENTRY (PK_ENGINE_ERROR_NO_SUCH_TRANSACTION, "NoSuchTransaction"),
 			ENUM_ENTRY (PK_ENGINE_ERROR_NO_SUCH_FILE, "NoSuchFile"),
-			ENUM_ENTRY (PK_ENGINE_ERROR_JOB_EXISTS_WITH_ROLE, "JobExistsWithRole"),
+			ENUM_ENTRY (PK_ENGINE_ERROR_TRANSACTION_EXISTS_WITH_ROLE, "TransactionExistsWithRole"),
 			ENUM_ENTRY (PK_ENGINE_ERROR_REFUSED_BY_POLICY, "RefusedByPolicy"),
 			ENUM_ENTRY (PK_ENGINE_ERROR_PACKAGE_ID_INVALID, "PackageIdInvalid"),
 			ENUM_ENTRY (PK_ENGINE_ERROR_SEARCH_INVALID, "SearchInvalid"),
@@ -1143,7 +1143,7 @@ pk_engine_update_system (PkEngine *engin
 
 	/* are we already performing an update? */
 	if (pk_transaction_list_role_present (engine->priv->job_list, PK_ROLE_ENUM_UPDATE_SYSTEM) == TRUE) {
-		error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_JOB_EXISTS_WITH_ROLE,
+		error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_TRANSACTION_EXISTS_WITH_ROLE,
 				     "Already performing system update");
 		dbus_g_method_return_error (context, error);
 		return;
@@ -1415,10 +1415,10 @@ pk_engine_update_package (PkEngine *engi
 }
 
 /**
- * pk_engine_get_job_list:
+ * pk_engine_get_transaction_list:
  **/
 gboolean
-pk_engine_get_job_list (PkEngine *engine, gchar ***job_list, GError **error)
+pk_engine_get_transaction_list (PkEngine *engine, gchar ***job_list, GError **error)
 {
 	g_return_val_if_fail (engine != NULL, FALSE);
 	g_return_val_if_fail (PK_IS_ENGINE (engine), FALSE);
@@ -1444,7 +1444,7 @@ pk_engine_get_status (PkEngine *engine, 
 
 	item = pk_transaction_list_get_item_from_tid (engine->priv->job_list, tid);
 	if (item == NULL) {
-		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_JOB,
+		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_TRANSACTION,
 			     "No tid:%s", tid);
 		return FALSE;
 	}
@@ -1469,7 +1469,7 @@ pk_engine_get_role (PkEngine *engine, co
 
 	item = pk_transaction_list_get_item_from_tid (engine->priv->job_list, tid);
 	if (item == NULL) {
-		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_JOB,
+		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_TRANSACTION,
 			     "No tid:%s", tid);
 		return FALSE;
 	}
@@ -1493,7 +1493,7 @@ pk_engine_get_percentage (PkEngine *engi
 
 	item = pk_transaction_list_get_item_from_tid (engine->priv->job_list, tid);
 	if (item == NULL) {
-		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_JOB,
+		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_TRANSACTION,
 			     "No tid:%s", tid);
 		return FALSE;
 	}
@@ -1520,7 +1520,7 @@ pk_engine_get_sub_percentage (PkEngine *
 
 	item = pk_transaction_list_get_item_from_tid (engine->priv->job_list, tid);
 	if (item == NULL) {
-		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_JOB,
+		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_TRANSACTION,
 			     "No tid:%s", tid);
 		return FALSE;
 	}
@@ -1547,7 +1547,7 @@ pk_engine_get_package (PkEngine *engine,
 
 	item = pk_transaction_list_get_item_from_tid (engine->priv->job_list, tid);
 	if (item == NULL) {
-		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_JOB,
+		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_TRANSACTION,
 			     "No tid:%s", tid);
 		return FALSE;
 	}
@@ -1587,7 +1587,7 @@ pk_engine_cancel (PkEngine *engine, cons
 
 	item = pk_transaction_list_get_item_from_tid (engine->priv->job_list, tid);
 	if (item == NULL) {
-		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_JOB,
+		g_set_error (error, PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_TRANSACTION,
 			     "No tid:%s", tid);
 		return FALSE;
 	}
diff --git a/src/pk-engine.h b/src/pk-engine.h
index 03e835f..e60273d 100644
--- a/src/pk-engine.h
+++ b/src/pk-engine.h
@@ -57,9 +57,9 @@ typedef enum
 {
 	PK_ENGINE_ERROR_DENIED,
 	PK_ENGINE_ERROR_NOT_SUPPORTED,
-	PK_ENGINE_ERROR_NO_SUCH_JOB,
+	PK_ENGINE_ERROR_NO_SUCH_TRANSACTION,
 	PK_ENGINE_ERROR_NO_SUCH_FILE,
-	PK_ENGINE_ERROR_JOB_EXISTS_WITH_ROLE,
+	PK_ENGINE_ERROR_TRANSACTION_EXISTS_WITH_ROLE,
 	PK_ENGINE_ERROR_REFUSED_BY_POLICY,
 	PK_ENGINE_ERROR_PACKAGE_ID_INVALID,
 	PK_ENGINE_ERROR_SEARCH_INVALID,
@@ -139,7 +139,7 @@ void		 pk_engine_update_package		(PkEngi
 							 const gchar	*package_id,
 							 DBusGMethodInvocation *context,
 							 GError		**error);
-gboolean	 pk_engine_get_job_list			(PkEngine	*engine,
+gboolean	 pk_engine_get_transaction_list			(PkEngine	*engine,
 							 gchar		***job_list,
 							 GError		**error);
 gboolean	 pk_engine_get_status			(PkEngine	*engine,
diff --git a/src/pk-interface.xml b/src/pk-interface.xml
index 18b548a..f057b01 100644
--- a/src/pk-interface.xml
+++ b/src/pk-interface.xml
@@ -133,41 +133,41 @@
 
     <!-- Do things or query jobs -->
     <method name="Cancel"> <!-- might not succeed for all manner or reasons -->
-      <!-- throws NoSuchJob -->
+      <!-- throws NoSuchTransaction -->
       <arg type="s" name="tid" direction="in"/>
     </method>
     <method name="GetStatus"> <!-- this is what the job is currrently doing, and might change -->
-      <!-- throws NoSuchJob -->
+      <!-- throws NoSuchTransaction -->
       <arg type="s" name="tid" direction="in"/>
       <arg type="s" name="status" direction="out"/> <!-- query,download,install,exit -->
     </method>
     <method name="GetRole"> <!-- this is the master role, i.e. won't change for the lifetime of the job -->
-      <!-- throws NoSuchJob -->
+      <!-- throws NoSuchTransaction -->
       <arg type="s" name="tid" direction="in"/>
       <arg type="s" name="status" direction="out"/> <!-- query,download,install,exit -->
       <arg type="s" name="package_id" direction="out"/> <!-- what we are doing the action to, or NULL -->
     </method>
     <method name="GetPercentage">
-      <!-- throws NoSuchJob -->
+      <!-- throws NoSuchTransaction -->
       <arg type="s" name="tid" direction="in"/>
       <arg type="u" name="percentage" direction="out"/>
     </method>
     <method name="GetSubPercentage">
-      <!-- throws NoSuchJob -->
+      <!-- throws NoSuchTransaction -->
       <arg type="s" name="tid" direction="in"/>
       <arg type="u" name="percentage" direction="out"/>
     </method>
     <method name="GetPackage">
-      <!-- throws NoSuchJob -->
+      <!-- throws NoSuchTransaction -->
       <arg type="s" name="tid" direction="in"/>
       <arg type="s" name="package" direction="out"/>
     </method>
 
-    <!-- Job list -->
-    <method name="GetJobList">
+    <!-- Transaction list -->
+    <method name="GetTransactionList">
       <arg type="as" name="transactions" direction="out"/>
     </method>
-    <signal name="JobListChanged">
+    <signal name="TransactionListChanged">
       <arg type="as" name="transactions" direction="out"/>
     </signal>
 
diff-tree c5e0f41d4db3fa360a6528566675b2ba11258067 (from 7c5034c969073de0549e0e05065ea2987e40e6ba)
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Sep 21 17:01:58 2007 +0100

    make the enum name match the order of the dbus methods

diff --git a/libpackagekit/pk-enum.c b/libpackagekit/pk-enum.c
index 6b8807f..cd120f0 100644
--- a/libpackagekit/pk-enum.c
+++ b/libpackagekit/pk-enum.c
@@ -69,11 +69,11 @@ static PkTaskEnumMatch task_role[] = {
 	{PK_ROLE_ENUM_SEARCH_GROUP,		"search-group"},
 	{PK_ROLE_ENUM_SEARCH_NAME,		"search-name"},
 	{PK_ROLE_ENUM_REFRESH_CACHE,		"refresh-cache"},
-	{PK_ROLE_ENUM_PACKAGE_REMOVE,		"package-remove"},
-	{PK_ROLE_ENUM_PACKAGE_INSTALL,		"package-install"},
-	{PK_ROLE_ENUM_FILE_INSTALL,		"file-install"},
-	{PK_ROLE_ENUM_PACKAGE_UPDATE,		"package-update"},
-	{PK_ROLE_ENUM_SYSTEM_UPDATE,		"system-update"},
+	{PK_ROLE_ENUM_REMOVE_PACKAGE,		"remove-package"},
+	{PK_ROLE_ENUM_INSTALL_PACKAGE,		"install-package"},
+	{PK_ROLE_ENUM_INSTALL_FILE,		"install-file"},
+	{PK_ROLE_ENUM_UPDATE_PACKAGE,		"update-package"},
+	{PK_ROLE_ENUM_UPDATE_SYSTEM,		"update-system"},
 	{0, NULL},
 };
 
diff --git a/libpackagekit/pk-enum.h b/libpackagekit/pk-enum.h
index 8aefe65..47ec85d 100644
--- a/libpackagekit/pk-enum.h
+++ b/libpackagekit/pk-enum.h
@@ -40,11 +40,11 @@ typedef enum {
 	PK_ROLE_ENUM_SEARCH_GROUP,
 	PK_ROLE_ENUM_SEARCH_NAME,
 	PK_ROLE_ENUM_REFRESH_CACHE,
-	PK_ROLE_ENUM_SYSTEM_UPDATE,
-	PK_ROLE_ENUM_PACKAGE_REMOVE,
-	PK_ROLE_ENUM_PACKAGE_INSTALL,
-	PK_ROLE_ENUM_FILE_INSTALL,
-	PK_ROLE_ENUM_PACKAGE_UPDATE,
+	PK_ROLE_ENUM_UPDATE_SYSTEM,
+	PK_ROLE_ENUM_REMOVE_PACKAGE,
+	PK_ROLE_ENUM_INSTALL_PACKAGE,
+	PK_ROLE_ENUM_INSTALL_FILE,
+	PK_ROLE_ENUM_UPDATE_PACKAGE,
 	PK_ROLE_ENUM_UNKNOWN
 } PkRoleEnum;
 
diff --git a/src/pk-backend.c b/src/pk-backend.c
index 8abd5cd..862fcd5 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -958,23 +958,23 @@ pk_backend_run (PkBackend *backend)
 		backend->desc->search_name (backend,
 					    backend->priv->xcached_filter,
 					    backend->priv->xcached_search);
-	} else if (backend->priv->role == PK_ROLE_ENUM_PACKAGE_INSTALL) {
+	} else if (backend->priv->role == PK_ROLE_ENUM_INSTALL_PACKAGE) {
 		backend->desc->install_package (backend,
 						backend->priv->xcached_package_id);
-	} else if (backend->priv->role == PK_ROLE_ENUM_FILE_INSTALL) {
+	} else if (backend->priv->role == PK_ROLE_ENUM_INSTALL_FILE) {
 		backend->desc->install_file (backend,
 					     backend->priv->xcached_full_path);
 	} else if (backend->priv->role == PK_ROLE_ENUM_REFRESH_CACHE) {
 		backend->desc->refresh_cache (backend,
 					      backend->priv->xcached_force);
-	} else if (backend->priv->role == PK_ROLE_ENUM_PACKAGE_REMOVE) {
+	} else if (backend->priv->role == PK_ROLE_ENUM_REMOVE_PACKAGE) {
 		backend->desc->remove_package (backend,
 					       backend->priv->xcached_package_id,
 					       backend->priv->xcached_allow_deps);
-	} else if (backend->priv->role == PK_ROLE_ENUM_PACKAGE_UPDATE) {
+	} else if (backend->priv->role == PK_ROLE_ENUM_UPDATE_PACKAGE) {
 		backend->desc->update_package (backend,
 					       backend->priv->xcached_package_id);
-	} else if (backend->priv->role == PK_ROLE_ENUM_SYSTEM_UPDATE) {
+	} else if (backend->priv->role == PK_ROLE_ENUM_UPDATE_SYSTEM) {
 		backend->desc->update_system (backend);
 	} else {
 		return FALSE;
@@ -1073,7 +1073,7 @@ pk_backend_install_package (PkBackend *b
 		return FALSE;
 	}
 	backend->priv->xcached_package_id = g_strdup (package_id);
-	pk_backend_set_role (backend, PK_ROLE_ENUM_PACKAGE_INSTALL);
+	pk_backend_set_role (backend, PK_ROLE_ENUM_INSTALL_PACKAGE);
 	return TRUE;
 }
 
@@ -1089,7 +1089,7 @@ pk_backend_install_file (PkBackend *back
 		return FALSE;
 	}
 	backend->priv->xcached_full_path = g_strdup (full_path);
-	pk_backend_set_role (backend, PK_ROLE_ENUM_FILE_INSTALL);
+	pk_backend_set_role (backend, PK_ROLE_ENUM_INSTALL_FILE);
 	return TRUE;
 }
 
@@ -1122,7 +1122,7 @@ pk_backend_remove_package (PkBackend *ba
 	}
 	backend->priv->xcached_allow_deps = allow_deps;
 	backend->priv->xcached_package_id = g_strdup (package_id);
-	pk_backend_set_role (backend, PK_ROLE_ENUM_PACKAGE_REMOVE);
+	pk_backend_set_role (backend, PK_ROLE_ENUM_REMOVE_PACKAGE);
 	return TRUE;
 }
 
@@ -1206,7 +1206,7 @@ pk_backend_update_package (PkBackend *ba
 		return FALSE;
 	}
 	backend->priv->xcached_package_id = g_strdup (package_id);
-	pk_backend_set_role (backend, PK_ROLE_ENUM_PACKAGE_UPDATE);
+	pk_backend_set_role (backend, PK_ROLE_ENUM_UPDATE_PACKAGE);
 	return TRUE;
 }
 
@@ -1221,7 +1221,7 @@ pk_backend_update_system (PkBackend *bac
 		pk_backend_not_implemented_yet (backend, "UpdateSystem");
 		return FALSE;
 	}
-	pk_backend_set_role (backend, PK_ROLE_ENUM_SYSTEM_UPDATE);
+	pk_backend_set_role (backend, PK_ROLE_ENUM_UPDATE_SYSTEM);
 	return TRUE;
 }
 
@@ -1252,16 +1252,16 @@ pk_backend_get_actions (PkBackend *backe
 		pk_enum_list_append (elist, PK_ROLE_ENUM_GET_UPDATES);
 	}
 	if (backend->desc->install_package != NULL) {
-		pk_enum_list_append (elist, PK_ROLE_ENUM_PACKAGE_INSTALL);
+		pk_enum_list_append (elist, PK_ROLE_ENUM_INSTALL_PACKAGE);
 	}
 	if (backend->desc->install_file != NULL) {
-		pk_enum_list_append (elist, PK_ROLE_ENUM_FILE_INSTALL);
+		pk_enum_list_append (elist, PK_ROLE_ENUM_INSTALL_FILE);
 	}
 	if (backend->desc->refresh_cache != NULL) {
 		pk_enum_list_append (elist, PK_ROLE_ENUM_REFRESH_CACHE);
 	}
 	if (backend->desc->remove_package != NULL) {
-		pk_enum_list_append (elist, PK_ROLE_ENUM_PACKAGE_REMOVE);
+		pk_enum_list_append (elist, PK_ROLE_ENUM_REMOVE_PACKAGE);
 	}
 	if (backend->desc->search_details != NULL) {
 		pk_enum_list_append (elist, PK_ROLE_ENUM_SEARCH_DETAILS);
@@ -1276,10 +1276,10 @@ pk_backend_get_actions (PkBackend *backe
 		pk_enum_list_append (elist, PK_ROLE_ENUM_SEARCH_NAME);
 	}
 	if (backend->desc->update_package != NULL) {
-		pk_enum_list_append (elist, PK_ROLE_ENUM_PACKAGE_UPDATE);
+		pk_enum_list_append (elist, PK_ROLE_ENUM_UPDATE_PACKAGE);
 	}
 	if (backend->desc->update_system != NULL) {
-		pk_enum_list_append (elist, PK_ROLE_ENUM_SYSTEM_UPDATE);
+		pk_enum_list_append (elist, PK_ROLE_ENUM_UPDATE_SYSTEM);
 	}
 	return elist;
 }
diff --git a/src/pk-engine.c b/src/pk-engine.c
index edbd7e1..86196c7 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -505,10 +505,10 @@ pk_engine_add_backend (PkEngine *engine,
 	/* only save into the database for useful stuff */
 	pk_backend_get_role (backend, &role, NULL);
 	if (role == PK_ROLE_ENUM_REFRESH_CACHE ||
-	    role == PK_ROLE_ENUM_SYSTEM_UPDATE ||
-	    role == PK_ROLE_ENUM_PACKAGE_REMOVE ||
-	    role == PK_ROLE_ENUM_PACKAGE_INSTALL ||
-	    role == PK_ROLE_ENUM_PACKAGE_UPDATE) {
+	    role == PK_ROLE_ENUM_UPDATE_SYSTEM ||
+	    role == PK_ROLE_ENUM_REMOVE_PACKAGE ||
+	    role == PK_ROLE_ENUM_INSTALL_PACKAGE ||
+	    role == PK_ROLE_ENUM_UPDATE_PACKAGE) {
 		/* add to database */
 		pk_transaction_db_add (engine->priv->transaction_db, item->tid);
 
@@ -1142,7 +1142,7 @@ pk_engine_update_system (PkEngine *engin
 	}
 
 	/* are we already performing an update? */
-	if (pk_transaction_list_role_present (engine->priv->job_list, PK_ROLE_ENUM_SYSTEM_UPDATE) == TRUE) {
+	if (pk_transaction_list_role_present (engine->priv->job_list, PK_ROLE_ENUM_UPDATE_SYSTEM) == TRUE) {
 		error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_JOB_EXISTS_WITH_ROLE,
 				     "Already performing system update");
 		dbus_g_method_return_error (context, error);
diff-tree 7c5034c969073de0549e0e05065ea2987e40e6ba (from 95c1055bc67f4e33d5f7ca07cf5aadd454f2c4e2)
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Sep 21 16:45:54 2007 +0100

    add the method call InstallFile so we can install rpms and debs like we can in pirut

diff --git a/TODO b/TODO
index de75950..1d411e1 100644
--- a/TODO
+++ b/TODO
@@ -12,9 +12,6 @@ NOTE: RELEASE BLOCKER
 *** Add a way to import GPG keys ***
 In fedora, if you add a signed repo you have to agree to the GPG key.
 
-*** Add a way to locally install packages ***
-We have to be very careful with this, and not allow automatic installs.
-
 *** Split up PolicyKit install into different types ***
 Have different permissions for signed and unsigned repos.
 
diff --git a/backends/alpm/pk-backend-alpm.c b/backends/alpm/pk-backend-alpm.c
index 95e6d30..d132111 100644
--- a/backends/alpm/pk-backend-alpm.c
+++ b/backends/alpm/pk-backend-alpm.c
@@ -813,6 +813,7 @@ PK_BACKEND_OPTIONS (
 	NULL,						/* get_update_detail */
 	backend_get_updates,				/* get_updates */
 	backend_install_package,			/* install_package */
+	NULL,						/* install_file */
 	backend_refresh_cache,				/* refresh_cache */
 	backend_remove_package,				/* remove_package */
 	backend_search_details,				/* search_details */
diff --git a/backends/apt/pk-backend-apt.cpp b/backends/apt/pk-backend-apt.cpp
index 76d4b31..0d6764c 100644
--- a/backends/apt/pk-backend-apt.cpp
+++ b/backends/apt/pk-backend-apt.cpp
@@ -661,6 +661,7 @@ extern "C" PK_BACKEND_OPTIONS (
 	NULL,					/* get_update_detail */
 	NULL,					/* get_updates */
 	NULL,					/* install_package */
+	NULL,					/* install_name */
 	backend_refresh_cache,			/* refresh_cache */
 	NULL,					/* remove_package */
 	backend_search_details,			/* search_details */
diff --git a/backends/box/pk-backend-box.c b/backends/box/pk-backend-box.c
index 59adc21..6e6e602 100644
--- a/backends/box/pk-backend-box.c
+++ b/backends/box/pk-backend-box.c
@@ -478,6 +478,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* get_update_detail */
 	backend_get_updates,			/* get_updates */
 	backend_install_package,		/* install_package */
+	NULL,					/* install_file */
 	backend_refresh_cache,			/* refresh_cache */
 	backend_remove_package,			/* remove_package */
 	backend_search_details,			/* search_details */
diff --git a/backends/conary/pk-backend-conary.c b/backends/conary/pk-backend-conary.c
index d1b42c9..b18f92b 100644
--- a/backends/conary/pk-backend-conary.c
+++ b/backends/conary/pk-backend-conary.c
@@ -160,6 +160,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* get_update_detail */
 	backend_get_updates,			/* get_updates */
 	backend_install_package,		/* install_package */
+	NULL,					/* install_file */
 	backend_refresh_cache,			/* refresh_cache */
 	backend_remove_package,			/* remove_package */
 	backend_search_details,			/* search_details */
diff --git a/backends/dummy/pk-backend-dummy.c b/backends/dummy/pk-backend-dummy.c
index 1090f38..c062da5 100644
--- a/backends/dummy/pk-backend-dummy.c
+++ b/backends/dummy/pk-backend-dummy.c
@@ -186,6 +186,16 @@ backend_install_package (PkBackend *back
 }
 
 /**
+ * backend_install_file:
+ */
+static void
+backend_install_file (PkBackend *backend, const gchar *full_path)
+{
+	g_return_if_fail (backend != NULL);
+	pk_backend_finished (backend);
+}
+
+/**
  * backend_refresh_cache:
  */
 static void
@@ -325,6 +335,7 @@ PK_BACKEND_OPTIONS (
 	backend_get_update_detail,		/* get_update_detail */
 	backend_get_updates,			/* get_updates */
 	backend_install_package,		/* install_package */
+	backend_install_file,			/* install_file */
 	backend_refresh_cache,			/* refresh_cache */
 	backend_remove_package,			/* remove_package */
 	backend_search_details,			/* search_details */
diff --git a/backends/test/pk-backend-test-fail.c b/backends/test/pk-backend-test-fail.c
index b503196..095dca0 100644
--- a/backends/test/pk-backend-test-fail.c
+++ b/backends/test/pk-backend-test-fail.c
@@ -145,6 +145,16 @@ backend_install_package (PkBackend *back
 }
 
 /**
+ * backend_install_file:
+ */
+static void
+backend_install_file (PkBackend *backend, const gchar *full_path)
+{
+	g_return_if_fail (backend != NULL);
+	pk_backend_finished (backend);
+}
+
+/**
  * backend_refresh_cache:
  */
 static void
@@ -245,6 +255,7 @@ PK_BACKEND_OPTIONS (
 	backend_get_update_detail,		/* get_update_detail */
 	backend_get_updates,			/* get_updates */
 	backend_install_package,		/* install_package */
+	backend_install_file,			/* install_file */
 	backend_refresh_cache,			/* refresh_cache */
 	backend_remove_package,			/* remove_package */
 	backend_search_details,			/* search_details */
diff --git a/backends/test/pk-backend-test-nop.c b/backends/test/pk-backend-test-nop.c
index 6774698..22af68e 100644
--- a/backends/test/pk-backend-test-nop.c
+++ b/backends/test/pk-backend-test-nop.c
@@ -38,6 +38,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* get_update_detail */
 	NULL,					/* get_updates */
 	NULL,					/* install_package */
+	NULL,					/* install_file */
 	NULL,					/* refresh_cache */
 	NULL,					/* remove_package */
 	NULL,					/* search_details */
diff --git a/backends/test/pk-backend-test-spawn.c b/backends/test/pk-backend-test-spawn.c
index 4a9c098..0a691f5 100644
--- a/backends/test/pk-backend-test-spawn.c
+++ b/backends/test/pk-backend-test-spawn.c
@@ -51,6 +51,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* get_update_detail */
 	NULL,					/* get_updates */
 	NULL,					/* install_package */
+	NULL,					/* install_file */
 	NULL,					/* refresh_cache */
 	NULL,					/* remove_package */
 	NULL,					/* search_details */
diff --git a/backends/test/pk-backend-test-succeed.c b/backends/test/pk-backend-test-succeed.c
index 34904d6..650ff0e 100644
--- a/backends/test/pk-backend-test-succeed.c
+++ b/backends/test/pk-backend-test-succeed.c
@@ -141,6 +141,16 @@ backend_install_package (PkBackend *back
 }
 
 /**
+ * backend_install_file:
+ */
+static void
+backend_install_file (PkBackend *backend, const gchar *full_path)
+{
+	g_return_if_fail (backend != NULL);
+	pk_backend_finished (backend);
+}
+
+/**
  * backend_refresh_cache:
  */
 static void
@@ -249,6 +259,7 @@ PK_BACKEND_OPTIONS (
 	backend_get_update_detail,		/* get_update_detail */
 	backend_get_updates,			/* get_updates */
 	backend_install_package,		/* install_package */
+	backend_install_file,			/* install_file */
 	backend_refresh_cache,			/* refresh_cache */
 	backend_remove_package,			/* remove_package */
 	backend_search_details,			/* search_details */
diff --git a/backends/test/pk-backend-test-thread.c b/backends/test/pk-backend-test-thread.c
index 2c4488f..f63e14f 100644
--- a/backends/test/pk-backend-test-thread.c
+++ b/backends/test/pk-backend-test-thread.c
@@ -98,6 +98,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* get_update_detail */
 	NULL,					/* get_updates */
 	NULL,					/* install_package */
+	NULL,					/* install_file */
 	NULL,					/* refresh_cache */
 	NULL,					/* remove_package */
 	NULL,					/* search_details */
diff --git a/backends/yum/pk-backend-yum.c b/backends/yum/pk-backend-yum.c
index 8e1a664..3395166 100644
--- a/backends/yum/pk-backend-yum.c
+++ b/backends/yum/pk-backend-yum.c
@@ -240,6 +240,7 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* get_update_detail */
 	backend_get_updates,			/* get_updates */
 	backend_install_package,		/* install_package */
+	NULL,					/* install_file */
 	backend_refresh_cache,			/* refresh_cache */
 	backend_remove_package,			/* remove_package */
 	backend_search_details,			/* search_details */
diff --git a/docs/backends.xml b/docs/backends.xml
index d83b8ce..bd4f443 100644
--- a/docs/backends.xml
+++ b/docs/backends.xml
@@ -63,6 +63,10 @@
             <entry><literal>install.*</literal></entry>
           </row>
           <row>
+            <entry>Install File</entry>
+            <entry><literal>install-file.*</literal></entry>
+          </row>
+          <row>
             <entry>Remove Package</entry>
             <entry><literal>remove.*</literal></entry>
           </row>
diff --git a/docs/introduction.xml b/docs/introduction.xml
index 2136244..ea47817 100644
--- a/docs/introduction.xml
+++ b/docs/introduction.xml
@@ -708,7 +708,7 @@
       </para>
     </sect2>
 
-    <sect2 id="api-install">
+    <sect2 id="api-install-package">
       <title>Install Package</title>
       <para>
         The installer should always install extra packages automatically
@@ -750,6 +750,43 @@
       </para>
     </sect2>
 
+    <sect2 id="api-install-file">
+      <title>Install File</title>
+      <para>
+        The installer should always install extra packages automatically
+        as the use could call GetDepends prior to the install if a confirmation
+        is required in the UI.
+      </para>
+      <para>
+        The arguments are:
+      </para>
+      <informaltable>
+        <tgroup cols="2">
+          <thead>
+            <row>
+              <entry>Option</entry>
+              <entry>Description</entry>
+            </row>
+          </thead>
+          <tbody>
+            <row>
+              <entry><literal>full_path</literal></entry>
+              <entry>A full path and filename to a single package.</entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable>
+      <para>
+        This method typically emits
+        <literal>Percentage</literal>,
+        <literal>Subpercentage</literal>,
+        <literal>NoPercentageUpdates</literal>,
+        <literal>Status</literal> and
+        <literal>Error</literal> and
+        <literal>Package</literal>.
+      </para>
+    </sect2>
+
     <sect2 id="api-remove">
       <title>Remove Package</title>
       <para>
diff --git a/libpackagekit/pk-enum.c b/libpackagekit/pk-enum.c
index b5c132c..6b8807f 100644
--- a/libpackagekit/pk-enum.c
+++ b/libpackagekit/pk-enum.c
@@ -71,6 +71,7 @@ static PkTaskEnumMatch task_role[] = {
 	{PK_ROLE_ENUM_REFRESH_CACHE,		"refresh-cache"},
 	{PK_ROLE_ENUM_PACKAGE_REMOVE,		"package-remove"},
 	{PK_ROLE_ENUM_PACKAGE_INSTALL,		"package-install"},
+	{PK_ROLE_ENUM_FILE_INSTALL,		"file-install"},
 	{PK_ROLE_ENUM_PACKAGE_UPDATE,		"package-update"},
 	{PK_ROLE_ENUM_SYSTEM_UPDATE,		"system-update"},
 	{0, NULL},
diff --git a/libpackagekit/pk-enum.h b/libpackagekit/pk-enum.h
index 8555aff..8aefe65 100644
--- a/libpackagekit/pk-enum.h
+++ b/libpackagekit/pk-enum.h
@@ -43,6 +43,7 @@ typedef enum {
 	PK_ROLE_ENUM_SYSTEM_UPDATE,
 	PK_ROLE_ENUM_PACKAGE_REMOVE,
 	PK_ROLE_ENUM_PACKAGE_INSTALL,
+	PK_ROLE_ENUM_FILE_INSTALL,
 	PK_ROLE_ENUM_PACKAGE_UPDATE,
 	PK_ROLE_ENUM_UNKNOWN
 } PkRoleEnum;
diff --git a/policy/packagekit.policy b/policy/packagekit.policy
index c8a372c..fceb17e 100644
--- a/policy/packagekit.policy
+++ b/policy/packagekit.policy
@@ -18,6 +18,15 @@ Copyright (c) 2007 Richard Hughes <richa
     </defaults>
   </action>
 
+  <action id="org.freedesktop.packagekit.localinstall">
+    <description>Install local file</description>
+    <message>System policy prevents installing file</message>
+    <defaults>
+      <allow_inactive>no</allow_inactive>
+      <allow_active>auth_admin</allow_active>
+    </defaults>
+  </action>
+
   <action id="org.freedesktop.packagekit.update">
     <description>Update package</description>
     <message>System policy prevents updating package</message>
diff --git a/src/pk-backend-internal.h b/src/pk-backend-internal.h
index c7398d4..e16710b 100644
--- a/src/pk-backend-internal.h
+++ b/src/pk-backend-internal.h
@@ -74,6 +74,8 @@ gboolean	 pk_backend_get_requires		(PkBa
 gboolean	 pk_backend_get_updates			(PkBackend	*backend);
 gboolean	 pk_backend_install_package		(PkBackend	*backend,
 							 const gchar	*package_id);
+gboolean	 pk_backend_install_file		(PkBackend	*backend,
+							 const gchar	*full_path);
 gboolean	 pk_backend_refresh_cache		(PkBackend	*backend,
 							 gboolean	 force);
 gboolean	 pk_backend_remove_package		(PkBackend	*backend,
diff --git a/src/pk-backend.c b/src/pk-backend.c
index 80e41e8..8abd5cd 100644
--- a/src/pk-backend.c
+++ b/src/pk-backend.c
@@ -60,6 +60,7 @@ struct _PkBackendPrivate
 	gboolean		 xcached_force;
 	gboolean		 xcached_allow_deps;
 	gchar			*xcached_package_id;
+	gchar			*xcached_full_path;
 	gchar			*xcached_filter;
 	gchar			*xcached_search;
 	PkExitEnum		 exit;
@@ -960,6 +961,9 @@ pk_backend_run (PkBackend *backend)
 	} else if (backend->priv->role == PK_ROLE_ENUM_PACKAGE_INSTALL) {
 		backend->desc->install_package (backend,
 						backend->priv->xcached_package_id);
+	} else if (backend->priv->role == PK_ROLE_ENUM_FILE_INSTALL) {
+		backend->desc->install_file (backend,
+					     backend->priv->xcached_full_path);
 	} else if (backend->priv->role == PK_ROLE_ENUM_REFRESH_CACHE) {
 		backend->desc->refresh_cache (backend,
 					      backend->priv->xcached_force);
@@ -1074,6 +1078,22 @@ pk_backend_install_package (PkBackend *b
 }
 
 /**
+ * pk_backend_install_file:
+ */
+gboolean
+pk_backend_install_file (PkBackend *backend, const gchar *full_path)
+{
+	g_return_val_if_fail (backend != NULL, FALSE);
+	if (backend->desc->install_file == NULL) {
+		pk_backend_not_implemented_yet (backend, "InstallFile");
+		return FALSE;
+	}
+	backend->priv->xcached_full_path = g_strdup (full_path);
+	pk_backend_set_role (backend, PK_ROLE_ENUM_FILE_INSTALL);
+	return TRUE;
+}
+
+/**
  * pk_backend_refresh_cache:
  */
 gboolean
@@ -1234,6 +1254,9 @@ pk_backend_get_actions (PkBackend *backe
 	if (backend->desc->install_package != NULL) {
 		pk_enum_list_append (elist, PK_ROLE_ENUM_PACKAGE_INSTALL);
 	}
+	if (backend->desc->install_file != NULL) {
+		pk_enum_list_append (elist, PK_ROLE_ENUM_FILE_INSTALL);
+	}
 	if (backend->desc->refresh_cache != NULL) {
 		pk_enum_list_append (elist, PK_ROLE_ENUM_REFRESH_CACHE);
 	}
@@ -1435,6 +1458,7 @@ pk_backend_init (PkBackend *backend)
 	backend->priv->spawn = NULL;
 	backend->priv->handle = NULL;
 	backend->priv->xcached_package_id = NULL;
+	backend->priv->xcached_full_path = NULL;
 	backend->priv->xcached_filter = NULL;
 	backend->priv->xcached_search = NULL;
 	backend->priv->last_percentage = PK_BACKEND_PERCENTAGE_INVALID;
diff --git a/src/pk-backend.h b/src/pk-backend.h
index 2b711d9..e72cfb2 100644
--- a/src/pk-backend.h
+++ b/src/pk-backend.h
@@ -99,6 +99,7 @@ struct _PkBackendDesc {
 	void		(*get_update_detail)	(PkBackend *backend, const gchar *package_id);
 	void		(*get_updates)		(PkBackend *backend);
 	void		(*install_package)	(PkBackend *backend, const gchar *package_id);
+	void		(*install_file)		(PkBackend *backend, const gchar *full_path);
 	void		(*refresh_cache)	(PkBackend *backend, gboolean force);
 	void		(*remove_package)	(PkBackend *backend, const gchar *package_id, gboolean allow_deps);
 	void		(*search_details)	(PkBackend *backend, const gchar *filter, const gchar *search);
@@ -111,9 +112,8 @@ struct _PkBackendDesc {
 };
 
 #define PK_BACKEND_OPTIONS(description, version, author, initialize, destroy, \
-			   get_groups, get_filters, \
-			   cancel, get_depends, get_description, \
-			   get_requires, get_update_detail, get_updates, install_package, \
+			   get_groups, get_filters, cancel, get_depends, get_description, \
+			   get_requires, get_update_detail, get_updates, install_package, install_file, \
 			   refresh_cache, remove_package, search_details, \
 			   search_file, search_group, search_name, \
 			   update_package, update_system) \
@@ -132,6 +132,7 @@ struct _PkBackendDesc {
 		get_update_detail, \
 		get_updates, \
 		install_package, \
+		install_file, \
 		refresh_cache, \
 		remove_package, \
 		search_details, \
diff --git a/src/pk-engine.c b/src/pk-engine.c
index aff40b7..edbd7e1 100644
--- a/src/pk-engine.c
+++ b/src/pk-engine.c
@@ -116,6 +116,7 @@ pk_engine_error_get_type (void)
 			ENUM_ENTRY (PK_ENGINE_ERROR_DENIED, "PermissionDenied"),
 			ENUM_ENTRY (PK_ENGINE_ERROR_NOT_SUPPORTED, "NotSupported"),
 			ENUM_ENTRY (PK_ENGINE_ERROR_NO_SUCH_JOB, "NoSuchJob"),
+			ENUM_ENTRY (PK_ENGINE_ERROR_NO_SUCH_FILE, "NoSuchFile"),
 			ENUM_ENTRY (PK_ENGINE_ERROR_JOB_EXISTS_WITH_ROLE, "JobExistsWithRole"),
 			ENUM_ENTRY (PK_ENGINE_ERROR_REFUSED_BY_POLICY, "RefusedByPolicy"),
 			ENUM_ENTRY (PK_ENGINE_ERROR_PACKAGE_ID_INVALID, "PackageIdInvalid"),
@@ -1294,6 +1295,66 @@ pk_engine_install_package (PkEngine *eng
 }
 
 /**
+ * pk_engine_install_file:
+ *
+ * This is async, so we have to treat it a bit carefully
+ **/
+void
+pk_engine_install_file (PkEngine *engine, const gchar *full_path,
+			DBusGMethodInvocation *context, GError **dead_error)
+{
+	gboolean ret;
+	PkTransactionItem *item;
+	PkBackend *backend;
+	GError *error;
+
+	g_return_if_fail (engine != NULL);
+	g_return_if_fail (PK_IS_ENGINE (engine));
+
+	/* check file exists */
+	ret = g_file_test (full_path, G_FILE_TEST_EXISTS);
+	if (ret == FALSE) {
+		error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_NO_SUCH_FILE,
+				     "No such file '%s'", full_path);
+		dbus_g_method_return_error (context, error);
+		return;
+	}
+
+	/* check with PolicyKit if the action is allowed from this client - if not, set an error */
+	ret = pk_engine_action_is_allowed (engine, context, "org.freedesktop.packagekit.localinstall", &error);
+	if (ret == FALSE) {
+		dbus_g_method_return_error (context, error);
+		return;
+	}
+
+	/* create a new backend and start it */
+	backend = pk_engine_new_backend (engine);
+	if (backend == NULL) {
+		error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_NOT_SUPPORTED,
+				     "Operation not yet supported by backend");
+		dbus_g_method_return_error (context, error);
+		return;
+	}
+
+	ret = pk_backend_install_file (backend, full_path);
+	if (ret == FALSE) {
+		error = g_error_new (PK_ENGINE_ERROR, PK_ENGINE_ERROR_NOT_SUPPORTED,
+				     "Operation not yet supported by backend");
+		pk_engine_delete_backend (engine, backend);
+		dbus_g_method_return_error (context, error);
+		return;
+	}
+	pk_engine_add_backend (engine, backend);
+
+	item = pk_transaction_list_get_item_from_backend (engine->priv->job_list, backend);
+	if (item == NULL) {
+		pk_warning ("could not find backend");
+		return;
+	}
+	dbus_g_method_return (context, item->tid);
+}
+
+/**
  * pk_engine_update_package:
  *
  * This is async, so we have to treat it a bit carefully
diff --git a/src/pk-engine.h b/src/pk-engine.h
index ea2e336..03e835f 100644
--- a/src/pk-engine.h
+++ b/src/pk-engine.h
@@ -58,6 +58,7 @@ typedef enum
 	PK_ENGINE_ERROR_DENIED,
 	PK_ENGINE_ERROR_NOT_SUPPORTED,
 	PK_ENGINE_ERROR_NO_SUCH_JOB,
+	PK_ENGINE_ERROR_NO_SUCH_FILE,
 	PK_ENGINE_ERROR_JOB_EXISTS_WITH_ROLE,
 	PK_ENGINE_ERROR_REFUSED_BY_POLICY,
 	PK_ENGINE_ERROR_PACKAGE_ID_INVALID,
@@ -130,6 +131,10 @@ void		 pk_engine_install_package		(PkEng
 							 const gchar	*package_id,
 							 DBusGMethodInvocation *context,
 							 GError		**error);
+void		 pk_engine_install_file			(PkEngine	*engine,
+							 const gchar	*full_path,
+							 DBusGMethodInvocation *context,
+							 GError		**error);
 void		 pk_engine_update_package		(PkEngine	*engine,
 							 const gchar	*package_id,
 							 DBusGMethodInvocation *context,
diff --git a/src/pk-interface.xml b/src/pk-interface.xml
index 4bc92c8..18b548a 100644
--- a/src/pk-interface.xml
+++ b/src/pk-interface.xml
@@ -66,6 +66,11 @@
       <arg type="s" name="package_id" direction="in"/>
       <arg type="s" name="tid" direction="out"/>
     </method>
+    <method name="InstallFile">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+      <arg type="s" name="full_path" direction="in"/>
+      <arg type="s" name="tid" direction="out"/>
+    </method>
 
     <!-- signals emitted from any job -->
     <signal name="JobStatusChanged">
diff-tree 95c1055bc67f4e33d5f7ca07cf5aadd454f2c4e2 (from 0fae6644906d1d061dd7fd18fbe71d0a6cbfe8ec)
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Sep 21 16:09:22 2007 +0100

    don't use a package_db, it's feature creep

diff --git a/TODO b/TODO
index 9195f28..de75950 100644
--- a/TODO
+++ b/TODO
@@ -36,10 +36,6 @@ Client programs using libpackagekit shou
 *** Log what was installed/removed and when ***
 Need to monitor the Package's emitted by the task and encoded to a string
 
-*** Add "when installed" and "installed by" data into UI ***
-Is this useful?
-We would need to store package_id,installed_by,when_installed in a sqlite database
-
 *** Dummy backend should use subpercent and install deps ***
 It's not a great test case right now...
 
diff-tree 0fae6644906d1d061dd7fd18fbe71d0a6cbfe8ec (from dbd5f5584fc626e383189a5e8b54306b67209c0a)
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Sep 21 16:07:38 2007 +0100

    NetworkManager has changed the install path of libnm-glib

diff --git a/src/pk-network.c b/src/pk-network.c
index cb2f04b..86b643e 100644
--- a/src/pk-network.c
+++ b/src/pk-network.c
@@ -37,7 +37,7 @@
 #include <fcntl.h>
 
 #include <glib/gi18n.h>
-#include <NetworkManager/libnm_glib.h>
+#include <libnm-glib/libnm_glib.h>
 
 #include "pk-debug.h"
 #include "pk-network.h"
diff-tree dbd5f5584fc626e383189a5e8b54306b67209c0a (from 06a79c186ebe8c0acdc5a477a2d59856d1462577)
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Sep 21 16:06:53 2007 +0100

    check for a null transaction id to try to investigate a segfault

diff --git a/libpackagekit/pk-task-monitor.c b/libpackagekit/pk-task-monitor.c
index 9dd87c3..ab17893 100644
--- a/libpackagekit/pk-task-monitor.c
+++ b/libpackagekit/pk-task-monitor.c
@@ -288,6 +288,20 @@ pk_task_monitor_get_role (PkTaskMonitor 
 }
 
 /**
+ * pk_transaction_id_equal:
+ * TODO: only compare first two sections...
+ **/
+static gboolean
+pk_transaction_id_equal (const gchar *tid1, const gchar *tid2)
+{
+	if (tid1 == NULL || tid2 == NULL) {
+		pk_warning ("tid compare invalid '%s' and '%s'", tid1, tid2);
+		return FALSE;
+	}
+	return (strcmp (tid1, tid2) == 0);
+}
+
+/**
  * pk_task_monitor_finished_cb:
  */
 static void
@@ -302,7 +316,7 @@ pk_task_monitor_finished_cb (DBusGProxy 
 	g_return_if_fail (tmonitor != NULL);
 	g_return_if_fail (PK_IS_TASK_MONITOR (tmonitor));
 
-	if (strcmp (tid, tmonitor->priv->tid) == 0) {
+	if (pk_transaction_id_equal (tid, tmonitor->priv->tid) == TRUE) {
 		exit = pk_exit_enum_from_text (exit_text);
 		pk_debug ("emit finished %i, %i", exit, runtime);
 		g_signal_emit (tmonitor , signals [PK_TASK_MONITOR_FINISHED], 0, exit, runtime);
@@ -321,7 +335,7 @@ pk_task_monitor_percentage_changed_cb (D
 	g_return_if_fail (tmonitor != NULL);
 	g_return_if_fail (PK_IS_TASK_MONITOR (tmonitor));
 
-	if (strcmp (tid, tmonitor->priv->tid) == 0) {
+	if (pk_transaction_id_equal (tid, tmonitor->priv->tid) == TRUE) {
 		pk_debug ("emit percentage-changed %i", percentage);
 		g_signal_emit (tmonitor , signals [PK_TASK_MONITOR_PERCENTAGE_CHANGED], 0, percentage);
 	}
@@ -339,7 +353,7 @@ pk_task_monitor_sub_percentage_changed_c
 	g_return_if_fail (tmonitor != NULL);
 	g_return_if_fail (PK_IS_TASK_MONITOR (tmonitor));
 
-	if (strcmp (tid, tmonitor->priv->tid) == 0) {
+	if (pk_transaction_id_equal (tid, tmonitor->priv->tid) == TRUE) {
 		pk_debug ("emit sub-percentage-changed %i", percentage);
 		g_signal_emit (tmonitor, signals [PK_TASK_MONITOR_SUB_PERCENTAGE_CHANGED], 0, percentage);
 	}
@@ -356,7 +370,7 @@ pk_task_monitor_no_percentage_updates_cb
 	g_return_if_fail (tmonitor != NULL);
 	g_return_if_fail (PK_IS_TASK_MONITOR (tmonitor));
 
-	if (strcmp (tid, tmonitor->priv->tid) == 0) {
+	if (pk_transaction_id_equal (tid, tmonitor->priv->tid) == TRUE) {
 		pk_debug ("emit no-percentage-updates");
 		g_signal_emit (tmonitor , signals [PK_TASK_MONITOR_NO_PERCENTAGE_UPDATES], 0);
 	}
@@ -378,7 +392,7 @@ pk_task_monitor_job_status_changed_cb (D
 
 	status = pk_status_enum_from_text (status_text);
 
-	if (strcmp (tid, tmonitor->priv->tid) == 0) {
+	if (pk_transaction_id_equal (tid, tmonitor->priv->tid) == TRUE) {
 		pk_debug ("emit job-status-changed %i", status);
 		g_signal_emit (tmonitor , signals [PK_TASK_MONITOR_JOB_STATUS_CHANGED], 0, status);
 	}
@@ -398,7 +412,7 @@ pk_task_monitor_package_cb (DBusGProxy  
 	g_return_if_fail (tmonitor != NULL);
 	g_return_if_fail (PK_IS_TASK_MONITOR (tmonitor));
 
-	if (strcmp (tid, tmonitor->priv->tid) == 0) {
+	if (pk_transaction_id_equal (tid, tmonitor->priv->tid) == TRUE) {
 		pk_debug ("emit package %i, %s, %s", value, package, summary);
 		g_signal_emit (tmonitor , signals [PK_TASK_MONITOR_PACKAGE], 0, value, package, summary);
 	}
@@ -437,7 +451,7 @@ pk_task_monitor_update_detail_cb (DBusGP
 	g_return_if_fail (tmonitor != NULL);
 	g_return_if_fail (PK_IS_TASK_MONITOR (tmonitor));
 
-	if (strcmp (tid, tmonitor->priv->tid) == 0) {
+	if (pk_transaction_id_equal (tid, tmonitor->priv->tid) == TRUE) {
 		pk_debug ("emit update-detail %s, %s, %s, %s, %s, %s",
 			  package_id, updates, obsoletes, url, restart, update_text);
 		g_signal_emit (tmonitor , signals [PK_TASK_MONITOR_UPDATE_DETAIL], 0,
@@ -462,7 +476,7 @@ pk_task_monitor_description_cb (DBusGPro
 	g_return_if_fail (tmonitor != NULL);
 	g_return_if_fail (PK_IS_TASK_MONITOR (tmonitor));
 
-	if (strcmp (tid, tmonitor->priv->tid) == 0) {
+	if (pk_transaction_id_equal (tid, tmonitor->priv->tid) == TRUE) {
 		group = pk_group_enum_from_text (group_text);
 		pk_debug ("emit description %s, %s, %i, %s, %s", package_id, licence, group, description, url);
 		g_signal_emit (tmonitor , signals [PK_TASK_MONITOR_DESCRIPTION], 0, package_id, licence, group, description, url);
@@ -483,7 +497,7 @@ pk_task_monitor_error_code_cb (DBusGProx
 	g_return_if_fail (tmonitor != NULL);
 	g_return_if_fail (PK_IS_TASK_MONITOR (tmonitor));
 
-	if (strcmp (tid, tmonitor->priv->tid) == 0) {
+	if (pk_transaction_id_equal (tid, tmonitor->priv->tid) == TRUE) {
 		code = pk_error_enum_from_text (code_text);
 		pk_debug ("emit error-code %i, %s", code, details);
 		g_signal_emit (tmonitor , signals [PK_TASK_MONITOR_ERROR_CODE], 0, code, details);
@@ -504,7 +518,7 @@ pk_task_monitor_require_restart_cb (DBus
 	g_return_if_fail (tmonitor != NULL);
 	g_return_if_fail (PK_IS_TASK_MONITOR (tmonitor));
 
-	if (strcmp (tid, tmonitor->priv->tid) == 0) {
+	if (pk_transaction_id_equal (tid, tmonitor->priv->tid) == TRUE) {
 		restart = pk_restart_enum_from_text (restart_text);
 		pk_debug ("emit require-restart %i, %s", restart, details);
 		g_signal_emit (tmonitor , signals [PK_TASK_MONITOR_REQUIRE_RESTART], 0, restart, details);
diff --git a/src/pk-transaction-id.c b/src/pk-transaction-id.c
index ee20b4e..e8e3e0b 100644
--- a/src/pk-transaction-id.c
+++ b/src/pk-transaction-id.c
@@ -102,6 +102,10 @@ pk_transaction_id_save_job_count (guint 
 gboolean
 pk_transaction_id_equal (const gchar *tid1, const gchar *tid2)
 {
+	if (tid1 == NULL || tid2 == NULL) {
+		pk_warning ("transaction id compare invalid '%s' and '%s'", tid1, tid2);
+		return FALSE;
+	}
 	return (strcmp (tid1, tid2) == 0);
 }
 



More information about the PackageKit mailing list