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

Richard Hughes hughsient at kemper.freedesktop.org
Sun Apr 20 14:10:47 PDT 2008


 backends/conary/helpers/conaryBackend.py |  308 ++++++++++++++++++++++++++++---
 backends/conary/helpers/get-repo-list.py |   19 +
 backends/conary/helpers/repo-enable.py   |   19 +
 backends/conary/helpers/repo-set-data.py |   20 ++
 backends/yum/helpers/yumBackend.py       |    6 
 contrib/PackageKit.spec.in               |    4 
 libpackagekit/pk-common.c                |   68 ++++++
 libpackagekit/pk-common.h                |    5 
 libpackagekit/pk-package-ids.c           |   43 ----
 src/pk-backend-spawn.c                   |   41 ++--
 src/pk-backend-spawn.h                   |    1 
 src/pk-spawn.c                           |   55 +++--
 src/pk-spawn.h                           |    4 
 13 files changed, 481 insertions(+), 112 deletions(-)

New commits:
commit 72c81628f547c70a7161ade0b48f33d3825e788b
Merge: 8b13966... a6a4dba...
Author: Richard Hughes <richard at hughsie.com>
Date:   Sun Apr 20 21:54:00 2008 +0100

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

commit 8b13966919516d08bfa02b52a32ccaec5ba81cf7
Author: Richard Hughes <richard at hughsie.com>
Date:   Sun Apr 20 21:53:29 2008 +0100

    don't rely on a space to seporate the command list, as this breaks installing local files from directories with spaces in them. Fix looks huge (but isn't) and fixes things properly to use strv arrays when passing data. fixes rh#443235

diff --git a/backends/yum/helpers/yumBackend.py b/backends/yum/helpers/yumBackend.py
index d0f829a..b2b3625 100644
--- a/backends/yum/helpers/yumBackend.py
+++ b/backends/yum/helpers/yumBackend.py
@@ -925,11 +925,11 @@ class PackageKitYumBackend(PackageKitBaseBackend):
                 if len(self.yumbase.tsInfo) > 0:
                     self._runYumTransaction()
             else:
-                self.error(ERROR_PACKAGE_ALREADY_INSTALLED,"Can't install %s " % inst_file)
+                self.error(ERROR_LOCAL_INSTALL_FAILED,"Can't install %s " % inst_file)
 
         except yum.Errors.InstallError,e:
             msgs = ';'.join(e)
-            self.error(ERROR_PACKAGE_ALREADY_INSTALLED,msgs)
+            self.error(ERROR_LOCAL_INSTALL_FAILED,msgs)
         except (yum.Errors.RepoError, yum.Errors.PackageSackError, IOError):
             # We might not be able to connect to the internet to get
             # repository metadata, or the package might not exist.
diff --git a/libpackagekit/pk-common.c b/libpackagekit/pk-common.c
index 36f4b99..547f731 100644
--- a/libpackagekit/pk-common.c
+++ b/libpackagekit/pk-common.c
@@ -640,6 +640,74 @@ pk_delay_yield (gfloat delay)
 }
 
 /**
+ * pk_ptr_array_to_argv:
+ * @array: the GPtrArray of strings
+ *
+ * Form a composite string array of strings.
+ * The data in the GPtrArray is copied.
+ *
+ * Return value: the string array, or %NULL if invalid
+ **/
+gchar **
+pk_ptr_array_to_argv (GPtrArray *array)
+{
+	gchar **strv_array;
+	const gchar *value_temp;
+	guint i;
+
+	g_return_val_if_fail (array != NULL, NULL);
+
+	/* copy the array to a strv */
+	strv_array = g_new0 (gchar *, array->len + 2);
+	for (i=0; i<array->len; i++) {
+		value_temp = (const gchar *) g_ptr_array_index (array, i);
+		strv_array[i] = g_strdup (value_temp);
+	}
+	/* set the last element to NULL */
+	strv_array[i] = NULL;
+
+	return strv_array;
+}
+
+/**
+ * pk_va_list_to_argv:
+ * @string_first: the first string
+ * @args: any subsequant string's
+ *
+ * Form a composite string array of string
+ *
+ * Return value: the string array, or %NULL if invalid
+ **/
+gchar **
+pk_va_list_to_argv (const gchar *string_first, va_list *args)
+{
+	GPtrArray *ptr_array;
+	gchar **array;
+	gchar *value_temp;
+	guint i;
+
+	g_return_val_if_fail (args != NULL, NULL);
+	g_return_val_if_fail (string_first != NULL, NULL);
+
+	/* find how many elements we have in a temp array */
+	ptr_array = g_ptr_array_new ();
+	g_ptr_array_add (ptr_array, g_strdup (string_first));
+	for (i=0;; i++) {
+		value_temp = va_arg (*args, gchar *);
+		if (value_temp == NULL) break;
+		g_ptr_array_add (ptr_array, g_strdup (value_temp));
+	}
+	pk_debug ("number of strings=%i", i+1);
+
+	/* convert the array to a strv type */
+	array = pk_ptr_array_to_argv (ptr_array);
+
+	/* get rid of the array, and free the contents */
+	g_ptr_array_free (ptr_array, TRUE);
+	return array;
+}
+
+/**
  * pk_strbuild_va:
  * @first_element: The first string item, or NULL
  * @args: the va_list
diff --git a/libpackagekit/pk-common.h b/libpackagekit/pk-common.h
index 644f364..9908ec2 100644
--- a/libpackagekit/pk-common.h
+++ b/libpackagekit/pk-common.h
@@ -84,6 +84,11 @@ gchar		**pk_strsplit				(const gchar	*id,
 gchar		*pk_strbuild_va				(const gchar	*first_element,
 							 va_list	*args)
 							 G_GNUC_WARN_UNUSED_RESULT;
+gchar		**pk_ptr_array_to_argv			(GPtrArray	*array)
+							 G_GNUC_WARN_UNUSED_RESULT;
+gchar		**pk_va_list_to_argv			(const gchar	*string_first,
+							 va_list	*args)
+							 G_GNUC_WARN_UNUSED_RESULT;
 gboolean	 pk_strcmp_sections			(const gchar	*id1,
 							 const gchar	*id2,
 							 guint		 parts,
diff --git a/libpackagekit/pk-package-ids.c b/libpackagekit/pk-package-ids.c
index fd1ca6b..933da1f 100644
--- a/libpackagekit/pk-package-ids.c
+++ b/libpackagekit/pk-package-ids.c
@@ -51,23 +51,7 @@
 gchar **
 pk_package_ids_from_array (GPtrArray *array)
 {
-	gchar **strv_array;
-	const gchar *value_temp;
-	guint i;
-
-	g_return_val_if_fail (array != NULL, NULL);
-
-	/* copy the temp array to a strv */
-	strv_array = g_new0 (gchar *, array->len + 2);
-	for (i=0; i<array->len; i++) {
-		value_temp = (const gchar *) g_ptr_array_index (array, i);
-		/* we don't need to copy the copy */
-		strv_array[i] = g_strdup (value_temp);
-	}
-	/* set the last element to NULL */
-	strv_array[i] = NULL;
-
-	return strv_array;
+	return pk_ptr_array_to_argv (array);
 }
 
 /**
@@ -82,30 +66,7 @@ pk_package_ids_from_array (GPtrArray *array)
 gchar **
 pk_package_ids_from_va_list (const gchar *package_id_first, va_list *args)
 {
-	GPtrArray *data;
-	gchar **array;
-	gchar *value_temp;
-	guint i;
-
-	g_return_val_if_fail (args != NULL, NULL);
-	g_return_val_if_fail (package_id_first != NULL, NULL);
-
-	/* find how many elements we have in a temp array */
-	data = g_ptr_array_new ();
-	g_ptr_array_add (data, g_strdup (package_id_first));
-	for (i=0;; i++) {
-		value_temp = va_arg (*args, gchar *);
-		if (value_temp == NULL) break;
-		g_ptr_array_add (data, g_strdup (value_temp));
-	}
-	pk_debug ("number of packages=%i", i+1);
-
-	/* convert the array to a strv type */
-	array = pk_package_ids_from_array (data);
-
-	/* get rid of the array, and free the contents */
-	g_ptr_array_free (data, TRUE);
-	return array;
+	return pk_va_list_to_argv (package_id_first, args);
 }
 
 /**
diff --git a/src/pk-backend-spawn.c b/src/pk-backend-spawn.c
index 7031178..6f933ca 100644
--- a/src/pk-backend-spawn.c
+++ b/src/pk-backend-spawn.c
@@ -441,45 +441,50 @@ pk_backend_spawn_helper_new (PkBackendSpawn *backend_spawn)
 }
 
 /**
- * pk_backend_spawn_helper_internal:
+ * pk_backend_spawn_helper_va_list:
  **/
 static gboolean
-pk_backend_spawn_helper_internal (PkBackendSpawn *backend_spawn, const gchar *script, const gchar *argument)
+pk_backend_spawn_helper_va_list (PkBackendSpawn *backend_spawn, const gchar *executable, va_list *args)
 {
 	gboolean ret;
 	gchar *filename;
-	gchar *command;
+	gchar **argv;
 
 	g_return_val_if_fail (PK_IS_BACKEND_SPAWN (backend_spawn), FALSE);
 
+	/* convert to a argv */
+	argv = pk_va_list_to_argv (executable, args);
+	if (argv == NULL) {
+		pk_warning ("argv NULL");
+		return FALSE;
+	}
+
 #if PK_BUILD_LOCAL
 	/* prefer the local version */
-	filename = g_build_filename ("..", "backends", backend_spawn->priv->name, "helpers", script, NULL);
+	filename = g_build_filename ("..", "backends", backend_spawn->priv->name, "helpers", argv[0], NULL);
 	if (g_file_test (filename, G_FILE_TEST_EXISTS) == FALSE) {
 		pk_debug ("local helper not found '%s'", filename);
 		g_free (filename);
-		filename = g_build_filename (DATADIR, "PackageKit", "helpers", backend_spawn->priv->name, script, NULL);
+		filename = g_build_filename (DATADIR, "PackageKit", "helpers", backend_spawn->priv->name, argv[0], NULL);
 	}
 #else
-	filename = g_build_filename (DATADIR, "PackageKit", "helpers", backend_spawn->priv->name, script, NULL);
+	filename = g_build_filename (DATADIR, "PackageKit", "helpers", backend_spawn->priv->name, argv[0], NULL);
 #endif
 	pk_debug ("using spawn filename %s", filename);
 
-	if (argument != NULL) {
-		command = g_strdup_printf ("%s %s", filename, argument);
-	} else {
-		command = g_strdup (filename);
-	}
+	/* replace the filename with the full path */
+	g_free (argv[0]);
+	argv[0] = g_strdup (filename);
 
 	pk_backend_spawn_helper_new (backend_spawn);
-	ret = pk_spawn_command (backend_spawn->priv->spawn, command);
+	ret = pk_spawn_argv (backend_spawn->priv->spawn, argv);
 	if (!ret) {
 		pk_backend_spawn_helper_delete (backend_spawn);
-		pk_backend_error_code (backend_spawn->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR, "Spawn of helper '%s' failed", command);
+		pk_backend_error_code (backend_spawn->priv->backend, PK_ERROR_ENUM_INTERNAL_ERROR,
+				       "Spawn of helper '%s' failed", argv[0]);
 		pk_backend_finished (backend_spawn->priv->backend);
 	}
 	g_free (filename);
-	g_free (command);
 	return ret;
 }
 
@@ -527,22 +532,20 @@ pk_backend_spawn_kill (PkBackendSpawn *backend_spawn)
  * pk_backend_spawn_helper:
  **/
 gboolean
-pk_backend_spawn_helper (PkBackendSpawn *backend_spawn, const gchar *script, const gchar *first_element, ...)
+pk_backend_spawn_helper (PkBackendSpawn *backend_spawn, const gchar *first_element, ...)
 {
 	gboolean ret;
 	va_list args;
-	gchar *arguments;
 
 	g_return_val_if_fail (PK_IS_BACKEND_SPAWN (backend_spawn), FALSE);
+	g_return_val_if_fail (first_element != NULL, FALSE);
 	g_return_val_if_fail (backend_spawn->priv->name != NULL, FALSE);
 
 	/* get the argument list */
 	va_start (args, first_element);
-	arguments = pk_strbuild_va (first_element, &args);
+	ret = pk_backend_spawn_helper_va_list (backend_spawn, first_element, &args);
 	va_end (args);
 
-	ret = pk_backend_spawn_helper_internal (backend_spawn, script, arguments);
-	g_free (arguments);
 	return ret;
 }
 
diff --git a/src/pk-backend-spawn.h b/src/pk-backend-spawn.h
index b16149e..e2a5459 100644
--- a/src/pk-backend-spawn.h
+++ b/src/pk-backend-spawn.h
@@ -51,7 +51,6 @@ typedef struct
 GType		 pk_backend_spawn_get_type		(void) G_GNUC_CONST;
 PkBackendSpawn	*pk_backend_spawn_new			(void);
 gboolean	 pk_backend_spawn_helper		(PkBackendSpawn	*backend_spawn,
-							 const gchar	*script,
 							 const gchar	*first_element, ...);
 gboolean	 pk_backend_spawn_kill			(PkBackendSpawn	*backend_spawn);
 const gchar	*pk_backend_spawn_get_name		(PkBackendSpawn	*backend_spawn);
diff --git a/src/pk-spawn.c b/src/pk-spawn.c
index d5d6884..9b415b1 100644
--- a/src/pk-spawn.c
+++ b/src/pk-spawn.c
@@ -267,28 +267,22 @@ pk_spawn_kill (PkSpawn *spawn)
 }
 
 /**
- * pk_spawn_command:
+ * pk_spawn_argv:
+ * @argv: Can be generated using g_strsplit (command, " ", 0)
+ * if there are no spaces in the filename
+ *
  **/
 gboolean
-pk_spawn_command (PkSpawn *spawn, const gchar *command)
+pk_spawn_argv (PkSpawn *spawn, gchar **argv)
 {
 	gboolean ret;
-	gchar **argv;
 
 	g_return_val_if_fail (PK_IS_SPAWN (spawn), FALSE);
-	g_return_val_if_fail (command != NULL, FALSE);
-
-	if (command == NULL) {
-		pk_warning ("command NULL");
-		return FALSE;
-	}
+	g_return_val_if_fail (argv != NULL, FALSE);
 
-	pk_debug ("command '%s'", command);
+	pk_debug ("argv[0] '%s'", argv[0]);
 	spawn->priv->finished = FALSE;
 
-	/* split command line */
-	argv = g_strsplit (command, " ", 0);
-
 	/* create spawned object for tracking */
 	ret = g_spawn_async_with_pipes (NULL, argv, NULL,
 				 G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH,
@@ -297,11 +291,10 @@ pk_spawn_command (PkSpawn *spawn, const gchar *command)
 				 &spawn->priv->stdout_fd,
 				 NULL,
 				 NULL);
-	g_strfreev (argv);
 
 	/* we failed to invoke the helper */
 	if (ret == FALSE) {
-		pk_warning ("failed to spawn '%s'", command);
+		pk_warning ("failed to spawn '%s'", argv[0]);
 		return FALSE;
 	}
 
@@ -490,6 +483,7 @@ libst_spawn (LibSelfTest *test)
 	PkSpawn *spawn = NULL;
 	gboolean ret;
 	gchar *path;
+	gchar **argv;
 
 	if (libst_start (test, "PkSpawn", CLASS_AUTO) == FALSE) {
 		return;
@@ -501,8 +495,9 @@ libst_spawn (LibSelfTest *test)
 	/************************************************************/
 	libst_title (test, "make sure return error for missing file");
 	mexit = BAD_EXIT;
-	path = pk_test_get_data ("pk-spawn-test.sh");
-	ret = pk_spawn_command (spawn, "pk-spawn-test-xxx.sh");
+	argv = g_strsplit ("pk-spawn-test-xxx.sh", " ", 0);
+	ret = pk_spawn_argv (spawn, argv);
+	g_strfreev (argv);
 	if (ret == FALSE) {
 		libst_success (test, "failed to run invalid file");
 	} else {
@@ -520,7 +515,11 @@ libst_spawn (LibSelfTest *test)
 	/************************************************************/
 	libst_title (test, "make sure run correct helper");
 	mexit = -1;
-	ret = pk_spawn_command (spawn, path);
+	path = pk_test_get_data ("pk-spawn-test.sh");
+	argv = g_strsplit (path, " ", 0);
+	ret = pk_spawn_argv (spawn, argv);
+	g_free (path);
+	g_strfreev (argv);
 	if (ret) {
 		libst_success (test, "ran correct file");
 	} else {
@@ -561,7 +560,11 @@ libst_spawn (LibSelfTest *test)
 	/************************************************************/
 	libst_title (test, "make sure run correct helper, and kill it");
 	mexit = BAD_EXIT;
-	ret = pk_spawn_command (spawn, path);
+	path = pk_test_get_data ("pk-spawn-test.sh");
+	argv = g_strsplit (path, " ", 0);
+	ret = pk_spawn_argv (spawn, argv);
+	g_free (path);
+	g_strfreev (argv);
 	if (ret) {
 		libst_success (test, NULL);
 	} else {
@@ -583,13 +586,15 @@ libst_spawn (LibSelfTest *test)
 
 	/* get new object */
 	new_spawn_object (test, &spawn);
-	g_free (path);
 
 	/************************************************************/
 	libst_title (test, "make sure run correct helper, and quit it");
 	mexit = BAD_EXIT;
 	path = pk_test_get_data ("pk-spawn-test-sigquit.sh");
-	ret = pk_spawn_command (spawn, path);
+	argv = g_strsplit (path, " ", 0);
+	ret = pk_spawn_argv (spawn, argv);
+	g_free (path);
+	g_strfreev (argv);
 	if (ret) {
 		libst_success (test, NULL);
 	} else {
@@ -609,12 +614,13 @@ libst_spawn (LibSelfTest *test)
 		libst_failed (test, "finish %i!", mexit);
 	}
 
-	g_free (path);
-
 	/************************************************************/
 	libst_title (test, "run lots of data for profiling");
 	path = pk_test_get_data ("pk-spawn-test-profiling.sh");
-	ret = pk_spawn_command (spawn, path);
+	argv = g_strsplit (path, " ", 0);
+	ret = pk_spawn_argv (spawn, argv);
+	g_free (path);
+	g_strfreev (argv);
 	if (ret) {
 		libst_success (test, NULL);
 	} else {
@@ -622,7 +628,6 @@ libst_spawn (LibSelfTest *test)
 	}
 
 	g_object_unref (spawn);
-	g_free (path);
 
 	libst_end (test);
 }
diff --git a/src/pk-spawn.h b/src/pk-spawn.h
index 830c540..1b20fef 100644
--- a/src/pk-spawn.h
+++ b/src/pk-spawn.h
@@ -51,8 +51,8 @@ typedef struct
 GType		 pk_spawn_get_type		  	(void) G_GNUC_CONST;
 PkSpawn		*pk_spawn_new				(void);
 
-gboolean	 pk_spawn_command			(PkSpawn	*spawn,
-							 const gchar	*command)
+gboolean	 pk_spawn_argv				(PkSpawn	*spawn,
+							 gchar		**argv)
 							 G_GNUC_WARN_UNUSED_RESULT;
 gboolean	 pk_spawn_kill				(PkSpawn	*spawn);
 
commit bc7769d64b6bfac41b531ac030b2619743716fed
Author: Richard Hughes <richard at hughsie.com>
Date:   Sun Apr 20 20:45:33 2008 +0100

    update spec file now we have translations

diff --git a/contrib/PackageKit.spec.in b/contrib/PackageKit.spec.in
index c8b08ff..24da432 100644
--- a/contrib/PackageKit.spec.in
+++ b/contrib/PackageKit.spec.in
@@ -105,6 +105,8 @@ install -m644 docs/spec/pk-structure.png $RPM_BUILD_ROOT%{_datadir}/doc/packagek
 chmod 755 $RPM_BUILD_ROOT%{_libexecdir}/yumDBUSBackend.py
 chmod 755 $RPM_BUILD_ROOT%{_libexecdir}/PackageKitDbusTest.py
 
+%find_lang %name
+
 %clean
 rm -rf $RPM_BUILD_ROOT
 
@@ -112,7 +114,7 @@ rm -rf $RPM_BUILD_ROOT
 
 %postun libs -p /sbin/ldconfig
 
-%files
+%files -f %{name}.lang
 %defattr(-,root,root,-)
 %doc README AUTHORS NEWS COPYING 
 %dir %{_datadir}/doc/packagekit
commit a6a4dba95c21eed341cb0b9ad3bf9c6c0d59a446
Merge: 42c7df1... 31d1b68...
Author: Robin Norwood <rnorwood at redhat.com>
Date:   Sun Apr 20 15:24:54 2008 -0400

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

commit 42c7df14d6919e78a37f20a28a6abb4140f4394f
Author: Robin Norwood <rnorwood at redhat.com>
Date:   Sun Apr 20 15:22:13 2008 -0400

    Look up group list from map.

diff --git a/backends/conary/helpers/conaryBackend.py b/backends/conary/helpers/conaryBackend.py
index 73086c6..edba04f 100644
--- a/backends/conary/helpers/conaryBackend.py
+++ b/backends/conary/helpers/conaryBackend.py
@@ -248,7 +248,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         cache = Cache()
 
         try:
-            troveTupleList = cache.searchByGroups([key])
+            troveTupleList = cache.searchByGroups(revGroupMap[key])
         finally:
             pass
 
@@ -811,7 +811,7 @@ class Cache(object):
 
     def searchByGroups(self, groups):
         """
-        Returns all troves for given group. (trove, version, flavor)
+        Returns all troves for given groups. (trove, version, flavor)
         Needs filtering capability.
         ['all'] means all packages
         FIXME: No filtering done on group text - SQL injection
commit 31d1b68af889f8b71c13a36d62ce8b20882b88c2
Merge: 6bb88b8... 8579e86...
Author: Stu Gott <smg at localhost.localdomain>
Date:   Sun Apr 20 15:16:41 2008 -0400

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

commit 6bb88b829018e4fda2d4819c89bfd42ea57ec13d
Author: Stu Gott <smg at localhost.localdomain>
Date:   Sun Apr 20 15:16:26 2008 -0400

    caching update code

diff --git a/backends/conary/helpers/conaryBackend.py b/backends/conary/helpers/conaryBackend.py
index 94e55f5..1d4df4c 100644
--- a/backends/conary/helpers/conaryBackend.py
+++ b/backends/conary/helpers/conaryBackend.py
@@ -131,23 +131,40 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             if self._do_filtering(name,fltlist,installed):
                 self.package(id, installed, summary)
 
-    def _do_update(self, applyList, apply=False):
+    def _get_update(self, applyList, cache=True):
         updJob = self.client.newUpdateJob()
         suggMap = self.client.prepareUpdateJob(updJob, applyList)
+        if cache:
+            Cache().cacheUpdateJob(applyList, updJob)
+        return updJob, suggMap
 
-        if apply:
-            self.allow_cancel(False)
-            restartDir = self.client.applyUpdateJob(updJob)
+    def _do_update(self, applyList):
+        jobPath = Cache().checkCachedUpdateJob(applyList)
+        if jobPath:
+            updJob = self.client.newUpdateJob()
+            try:
+                updJob.thaw(jobPath)
+            except IOError, err:
+                updJob = None
+        else:
+            updJob = self._get_update(applyList, cache=False)
+        self.allow_cancel(False)
+        restartDir = self.client.applyUpdateJob(updJob)
+        return updJob
 
-        return updJob, suggMap
+    def _get_package_update(self, name, version, flavor):
+        if name.startswith('-'):
+            applyList = [(name, (version, flavor), (None, None), False)]
+        else:
+            applyList = [(name, (None, None), (version, flavor), True)]
+        return self._get_update(applyList)
 
-    def _do_package_update(self, name, version, flavor, apply=False):
+    def _do_package_update(self, name, version, flavor):
         if name.startswith('-'):
             applyList = [(name, (version, flavor), (None, None), False)]
         else:
             applyList = [(name, (None, None), (version, flavor), True)]
-        updJob, suggMap = self._do_update(applyList, apply=apply)
-        return updJob, suggMap
+        return self._do_update(applyList)
 
     @ExceptionHandler
     def resolve(self, filter, package):
@@ -204,9 +221,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                     'Package already installed')
 
             else:
-                updJob, suggMap = self._do_package_update(name, version, flavor,
-                                                      apply=False)
-
+                updJob, suggMap = self._get_package_update(name, version,
+                                                           flavor)
                 for what, need in suggMap:
                     id = self.get_package_id(need[0], need[1], need[2])
                     depInstalled = self.check_installed(need[0])
@@ -250,7 +266,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.allow_cancel(True)
         updateItems = self.client.fullUpdateItemList()
         applyList = [ (x[0], (None, None), x[1:], True) for x in updateItems ]
-        updJob, suggMap = self._do_update(applyList, apply=True)
+        updJob, suggMap = self._do_update(applyList)
 
     @ExceptionHandler
     def refresh_cache(self):
@@ -271,7 +287,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         for package in packages.split(" "):
             name, version, flavor, installed = self._findPackage(package)
             if name:
-                self._do_package_update(name, version, flavor, apply=True)
+                self._do_package_update(name, version, flavor)
             else:
                 self.error(ERROR_PACKAGE_ALREADY_INSTALLED,
                     'No available updates')
@@ -293,7 +309,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                     'Package already installed')
 
             self.status(STATUS_INSTALL)
-            self._do_package_update(name, version, flavor, apply=True)
+            self._do_package_update(name, version, flavor)
         else:
             self.error(ERROR_PACKAGE_ALREADY_INSTALLED,
                 'Package was not found')
@@ -314,7 +330,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
             self.status(STATUS_REMOVE)
             name = '-%s' % name
-            self._do_package_update(name, version, flavor, apply=True)
+            self._do_package_update(name, version, flavor)
         else:
             self.error(ERROR_PACKAGE_ALREADY_INSTALLED,
                 'Package was not found')
@@ -457,7 +473,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         updateItems = self.client.fullUpdateItemList()
         applyList = [ (x[0], (None, None), x[1:], True) for x in updateItems ]
-        updJob, suggMap = self._do_update(applyList, apply=False)
+        updJob, suggMap = self._get_update(applyList)
 
         jobLists = updJob.getJobs()
 
@@ -564,11 +580,14 @@ class Cache(object):
     #else:
     #    dbPath = '/var/cache/conary/'
     dbPath = '/var/cache/conary/'
+    jobPath = dbPath + 'jobs'
 
     """ Class to retrieve and cache package information from label. """
     def __init__(self):
         if not os.path.isdir(self.dbPath):
             os.makedirs(self.dbPath)
+        if not os.path.isdir(self.jobPath):
+            os.mkdir(self.jobPath)
 
         self.conn = dbstore.connect(os.path.join(self.dbPath, self.dbName))
         self.cursor = self.conn.cursor()
@@ -601,6 +620,24 @@ class Cache(object):
                 self.populate_database()
                 return True
 
+    def _getJobCachePath(self, applyList):
+        from conary.lib import sha1helper
+        applyStr = '\0'.join(['%s=%s[%s]--%s[%s]%s' % (x[0], x[1][0], x[1][1], x[2][0], x[2][1], x[3]) for x in applyList])
+        return self.jobPath + '/' + sha1helper.sha1ToString(sha1helper.sha1String(applyStr))
+
+    def checkCachedUpdateJob(self, applyList):
+        jobPath = self._getJobCachePath(applyList)
+        if os.path.exists(jobPath):
+            return jobPath
+
+    def cacheUpdateJob(self, applyList, updJob):
+        jobPath = self._getJobCachePath(applyList)
+        if os.path.exists(jobPath):
+            from conary.lib import util
+            util.rmtree(jobPath)
+        os.mkdir(jobPath)
+        updJob.freeze(jobPath)
+
     def conaryquery(self):
         self.cfg = conarycfg.ConaryConfiguration()
         self.client = conaryclient.ConaryClient(self.cfg)
@@ -648,6 +685,8 @@ class Cache(object):
         return connection.cursor()
 
     def _create_database(self):
+        #FIXME: delete the category column. it's not useful
+
         """ Creates a blank database. """
         sql = '''CREATE TABLE conary_packages (
             packageId INTEGER,
@@ -675,6 +714,18 @@ class Cache(object):
 
         self.cursor.execute(sql)
 
+        sql = '''CREATE TABLE conary_lienses (
+            licenseId INTEGER,
+            licenseName text)'''
+
+        self.cursor.execute(sql)
+
+        sql = '''CREATE TABLE conary_license_package_map (
+            licenseId INTEGER,
+            packageId INTEGER)'''
+
+        self.cursor.execute(sql)
+
         #self.conn.createIndex('conary_catagories', 'conary_category_name_idx', ['categoryName'])
         #self.conn.createIndex('conary_catagories', 'conary_category_id_idx', ['categoryId'])
 
@@ -808,7 +859,7 @@ class Cache(object):
         self.cursor.execute("INSERT INTO conary_category_package_map VALUES(?, ?)", catId, pkgId)
         self.conn.commit()
 
-    def populate_categories(self, csList):
+    def populate_metadata(self, csList):
         for cs in csList:
             for troveCS in cs.iterNewTroveList():
                 trv = trove.Trove(troveCS)
@@ -819,3 +870,6 @@ class Cache(object):
                 categories = metadata.get('categories', [])
                 for category in categories:
                     self._addPackageCategory(trv, category)
+                #licenses = metadata.get('licenses', [])
+                #for license in licenses:
+                #    self._addPackageLicense(trv, license)
commit 5fc68055eab71746c9606462944d838a2ca27794
Merge: 8c4a5ef... 8579e86...
Author: Richard Hughes <richard at hughsie.com>
Date:   Sun Apr 20 20:08:17 2008 +0100

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

commit 8c4a5efbf356a9886cc7dea4893b07dae4bd94c6
Author: Richard Hughes <richard at hughsie.com>
Date:   Sun Apr 20 20:00:38 2008 +0100

    correct an error enum when we failed to install a local file. rh#443235

diff --git a/backends/yum/helpers/yumBackend.py b/backends/yum/helpers/yumBackend.py
index 31d9146..d0f829a 100644
--- a/backends/yum/helpers/yumBackend.py
+++ b/backends/yum/helpers/yumBackend.py
@@ -943,7 +943,7 @@ class PackageKitYumBackend(PackageKitBaseBackend):
                     if len(self.yumbase.tsInfo) > 0:
                         self._runYumTransaction()
                 else:
-                    self.error(ERROR_PACKAGE_ALREADY_INSTALLED,"Can't install %s " % inst_file)
+                    self.error(ERROR_LOCAL_INSTALL_FAILED,"Can't install %s " % inst_file)
             except yum.Errors.InstallError,e:
                 msgs = ';'.join(e)
                 self.error(ERROR_LOCAL_INSTALL_FAILED, msgs)
commit 8579e86b4ae9ddfad346a02cd07f07cf1395fb83
Merge: 13ea0a3... f119c38...
Author: Robin Norwood <rnorwood at redhat.com>
Date:   Sun Apr 20 14:48:29 2008 -0400

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

commit 13ea0a3f90797ee3421bee78d14fed6ed3c660bb
Author: Robin Norwood <rnorwood at redhat.com>
Date:   Sun Apr 20 14:47:32 2008 -0400

    Another pass at adding group searching.

diff --git a/backends/conary/helpers/conaryBackend.py b/backends/conary/helpers/conaryBackend.py
index 43d50f0..fd446cd 100644
--- a/backends/conary/helpers/conaryBackend.py
+++ b/backends/conary/helpers/conaryBackend.py
@@ -19,6 +19,73 @@ from conary import dbstore, queryrep, versions, updatecmd
 from packagekit.backend import *
 from conaryCallback import UpdateCallback
 
+groupMap = {
+    '2DGraphics'          : GROUP_GRAPHICS,
+    'Accessibility'       : GROUP_ACCESSIBILITY,
+    'AdvancedSettings'    : GROUP_ADMIN_TOOLS,
+    'Application'         : GROUP_OTHER,
+    'ArcadeGame'          : GROUP_GAMES,
+    'Audio'               : GROUP_MULTIMEDIA,
+    'AudioVideo'          : GROUP_MULTIMEDIA,
+    'BlocksGame'          : GROUP_GAMES,
+    'BoardGame'           : GROUP_GAMES,
+    'Calculator'          : GROUP_ACCESSORIES,
+    'Calendar'            : GROUP_ACCESSORIES,
+    'CardGame'            : GROUP_GAMES,
+    'Compiz'              : GROUP_SYSTEM,
+    'ContactManagement'   : GROUP_ACCESSORIES,
+    'Core'                : GROUP_SYSTEM,
+    'Database'            : GROUP_SERVERS,
+    'DesktopSettings'     : GROUP_ADMIN_TOOLS,
+    'Development'         : GROUP_PROGRAMMING,
+    'Email'               : GROUP_INTERNET,
+    'FileTransfer'        : GROUP_INTERNET,
+    'Filesystem'          : GROUP_SYSTEM,
+    'GNOME'               : GROUP_DESKTOP_GNOME,
+    'GTK'                 : GROUP_DESKTOP_GNOME,
+    'GUIDesigner'         : GROUP_PROGRAMMING,
+    'Game'                : GROUP_GAMES,
+    'Graphics'            : GROUP_GRAPHICS,
+    'HardwareSettings'    : GROUP_ADMIN_TOOLS,
+    'IRCClient'           : GROUP_INTERNET,
+    'InstantMessaging'    : GROUP_INTERNET,
+    'LogicGame'           : GROUP_GAMES,
+    'Monitor'             : GROUP_ADMIN_TOOLS,
+    'Music'               : GROUP_MULTIMEDIA,
+    'Network'             : GROUP_INTERNET,
+    'News'                : GROUP_INTERNET,
+    'Office'              : GROUP_OFFICE,
+    'P2P'                 : GROUP_INTERNET,
+    'PackageManager'      : GROUP_ADMIN_TOOLS,
+    'Photography'         : GROUP_MULTIMEDIA,
+    'Player'              : GROUP_MULTIMEDIA,
+    'Presentation'        : GROUP_OFFICE,
+    'Publishing'          : GROUP_OFFICE,
+    'RasterGraphics'      : GROUP_GRAPHICS,
+    'Security'            : GROUP_SECURITY,
+    'Settings'            : GROUP_ADMIN_TOOLS,
+    'Spreadsheet'         : GROUP_OFFICE,
+    'System'              : GROUP_SYSTEM,
+    'Telephony'           : GROUP_COMMUNICATION,
+    'TerminalEmulator'    : GROUP_ACCESSORIES,
+    'TextEditor'          : GROUP_ACCESSORIES,
+    'Utility'             : GROUP_ACCESSORIES,
+    'VectorGraphics'      : GROUP_GRAPHICS,
+    'Video'               : GROUP_MULTIMEDIA,
+    'Viewer'              : GROUP_MULTIMEDIA,
+    'WebBrowser'          : GROUP_INTERNET,
+    'WebDevelopment'      : GROUP_PROGRAMMING,
+    'WordProcessor'       : GROUP_OFFICE
+}
+
+revGroupMap = {}
+
+for (con_cat, pk_group) in groupMap.items():
+    if revGroupMap.has_key(pk_group):
+        revGroupMap[pk_group].append(con_cat)
+    else:
+        revGroupMap[pk_group] = [con_cat]
+       
 #from conary.lib import util
 #sys.excepthook = util.genExcepthook()
 
@@ -166,14 +233,40 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         return installed
 
     @ExceptionHandler
-    def search_group(self, options, searchterms):
+    def search_group(self, filters, key):
         '''
         Implement the {backend}-search-name functionality
+        FIXME: Ignoring filters for now.
         '''
         self.allow_cancel(True)
         self.percentage(None)
         self.status(STATUS_QUERY)
-        pass
+
+        fltlist = filters.split(';')
+        cache = Cache()
+
+        try:
+            troveTupleList = cache.searchByGroups([key])
+        finally:
+            pass
+
+        troveTupleList.sort()
+        troveTupleList.reverse()
+        
+        for troveTuple in troveTupleList:
+            troveTuple = tuple([item.encode('UTF-8') for item in troveTuple[0:2]])
+            name = troveTuple[0]
+            version = versions.ThawVersion(troveTuple[1])
+            flavor = deps.ThawFlavor(troveTuple[2])
+            id = self.get_package_id(name, version, flavor)
+            summary = self._get_metadata(id, 'shortDesc') or " "
+            category = troveTuple[3][0]
+            category = category.encode('UTF-8')
+            troveTuple = tuple([name, version, flavor])
+            installed = self.check_installed(troveTuple)
+            
+            if self._do_filtering(name,fltlist,installed):
+                self.package(id, installed, summary)
 
     @ExceptionHandler
     def search_name(self, options, searchlist):
@@ -692,9 +785,9 @@ class Cache(object):
             print str(e)
             return None
 
-    def searchByGroup(self, groups):
+    def searchByGroups(self, groups):
         """
-        Returns all troves for given groups. (trove, version, flavor)
+        Returns all troves for given group. (trove, version, flavor)
         Needs filtering capability.
         ['all'] means all packages
         FIXME: No filtering done on group text - SQL injection
@@ -705,6 +798,8 @@ class Cache(object):
         if "all" in groups:
             stmt = ("SELECT DISTINCT CP.trove, CP.version, CP.flavor, CC.category_name"
                     "           FROM conary_packages CP, conary_categories CC, conary_category_package_map CCMap"
+                    "          WHERE CCMap.package_id = CP.id"
+                    "            AND CCMap.category_id = CC.id"
                     "       GROUP BY CP.trove, CP.version, CP.flavor"
                     "       ORDER BY CP.trove, CP.version DESC, CP.flavor")
         else:
@@ -712,6 +807,8 @@ class Cache(object):
             stmt = ("SELECT DISTINCT CP.trove, CP.version, CP.flavor, CC.category_name"
                     "           FROM conary_packages CP, conary_categories CC, conary_category_package_map CCMap"
                     "          WHERE CC.category_name IN (%s)"
+                    "            AND CCMap.package_id = CP.id"
+                    "            AND CCMap.category_id = CC.id"
                     "       GROUP BY CP.trove, CP.version, CP.flavor"
                     "       ORDER BY CP.trove, CP.version DESC, CP.flavor" % group_string)
         
commit f119c38c12cba01d7e70730434c5696cb24513fc
Author: Stu Gott <smg at localhost.localdomain>
Date:   Sun Apr 20 13:59:02 2008 -0400

    Fixups for category code

diff --git a/backends/conary/helpers/conaryBackend.py b/backends/conary/helpers/conaryBackend.py
index 9c67705..94e55f5 100644
--- a/backends/conary/helpers/conaryBackend.py
+++ b/backends/conary/helpers/conaryBackend.py
@@ -585,6 +585,10 @@ class Cache(object):
         self.cursor.execute(stmt)
         # List of all tables with names that start with "conary_"
         tbllist = self.cursor.fetchall()
+        if tbllist == [('conary_packages',)]:
+            self.cursor.execute('DROP TABLE conary_packages')
+            self.conn.commit()
+            tbllist = []
         if tbllist != []:
             return True
             #print "Verified packages table"
@@ -661,7 +665,7 @@ class Cache(object):
 
         sql = '''CREATE TABLE conary_categories (
             categoryId INTEGER,
-            catergoryName text)'''
+            categoryName text)'''
 
         self.cursor.execute(sql)
 
@@ -746,6 +750,10 @@ class Cache(object):
         """
         Insert trove into database.
         """
+        res = self.cursor.execute("SELECT COALESCE(max(packageId), 0) + 1 FROM conary_packages")
+        pkgId = res.fetchone()[0] + 1
+        trove = [pkgId] + trove[:]
+
         values = [str(field) for field in trove]
         cols = ",".join("?" * len(trove))
         sql = "INSERT INTO conary_packages VALUES (%s)" % cols
@@ -758,18 +766,16 @@ class Cache(object):
 
     def _clear_table(self, tableName='conary_packages'):
         """
-        Sorta deletes * records from table.
-        Just drop table for now.
+        Deletes * records from table.
         """
-        stmt = "DROP TABLE %s" % tableName
+        stmt = "DELETE FROM %s" % tableName
         try:
             self.cursor.execute(stmt)
         except dbstore.sqlerrors.InvalidTable:
             pass
 
     def populate_database(self):
-        #packages = self.conaryquery()
-        packages = []
+        packages = self.conaryquery()
         # Clear table first
         for tblName in ('conary_packages', 'conary_category_package_map',
                 'conary_categories'):
@@ -780,6 +786,7 @@ class Cache(object):
     def _addPackageCategory(self, trv, category):
         res = self.cursor.execute( \
                 'SELECT packageId FROM conary_packages WHERE trove=? and version=? and flavor = ?', trv.getName(), trv.getVersion().freeze(), trv.getFlavor().freeze())
+        res = res.fetchone()
         if res:
             # we have a packageID
             pkgId = res[0]
@@ -789,15 +796,17 @@ class Cache(object):
 
         # now look up/make the categoryId
         res = self.cursor.execute('SELECT categoryId FROM conary_categories WHERE categoryName=?', category)
+        res = res.fetchone()
         if not res:
-            res = self.cursor.execute('SELECT MAX(COALESCE(categoryId, 0)) + 1 FROM conary_categories')
-            catId = res[0]
-            self.cursor.execute('INSERT INTO CATEGORIES VALUES(?, ?)',
+            res = self.cursor.execute('SELECT COALESCE(MAX(categoryId), 0) + 1 FROM conary_categories')
+            catId = res.fetchone()[0]
+            self.cursor.execute('INSERT INTO conary_categories VALUES(?, ?)',
                     catId, category)
         else:
             catId = category
 
         self.cursor.execute("INSERT INTO conary_category_package_map VALUES(?, ?)", catId, pkgId)
+        self.conn.commit()
 
     def populate_categories(self, csList):
         for cs in csList:
commit fe5b05d61007c4dfdc7f2c92e8ee666172f27154
Merge: 6fb3122... 407301b...
Author: Stu Gott <smg at localhost.localdomain>
Date:   Sun Apr 20 13:10:35 2008 -0400

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

commit 6fb3122ca2988a07c4f34a9157568c9bf4e459f4
Author: Stu Gott <smg at localhost.localdomain>
Date:   Sun Apr 20 13:10:17 2008 -0400

    alter db schema. add categories from changesets.

diff --git a/backends/conary/helpers/conaryBackend.py b/backends/conary/helpers/conaryBackend.py
index 31d5e92..02d5016 100644
--- a/backends/conary/helpers/conaryBackend.py
+++ b/backends/conary/helpers/conaryBackend.py
@@ -15,6 +15,8 @@ from conary import errors
 from conary.deps import deps
 from conary import conarycfg, conaryclient
 from conary import dbstore, queryrep, versions, updatecmd
+from conary.local import database
+from conary import trove
 
 from packagekit.backend import *
 from conaryCallback import UpdateCallback
@@ -627,6 +629,7 @@ class Cache(object):
     def _create_database(self):
         """ Creates a blank database. """
         sql = '''CREATE TABLE conary_packages (
+            packageId INTEGER,
             trove text,
             component text,
             version text,
@@ -639,6 +642,23 @@ class Cache(object):
 
         self.cursor.execute(sql)
 
+        sql = '''CREATE TABLE conary_categories (
+            categoryId INTEGER,
+            catergoryName text)'''
+
+        self.cursor.execute(sql)
+
+        sql = '''CREATE TABLE conary_category_package_map (
+            categoryId INTEGER,
+            packageId INTEGER)'''
+
+        self.cursor.execute(sql)
+
+        #self.conn.createIndex('conary_catagories', 'conary_category_name_idx', ['categoryName'])
+        #self.conn.createIndex('conary_catagories', 'conary_category_id_idx', ['categoryId'])
+
+
+
     def commit(self):
         self.cursor.commit()
 
@@ -691,14 +711,55 @@ class Cache(object):
 
     def _clear_table(self, tableName='conary_packages'):
         """
-        Deletes * records from table.
+        Sorta deletes * records from table.
+        Just drop table for now.
         """
-        stmt = "DELETE FROM %s" % tableName
-        self.cursor.execute(stmt)
+        stmt = "DROP TABLE %s" % tableName
+        try:
+            self.cursor.execute(stmt)
+        except dbstore.sqlerrors.InvalidTable:
+            pass
 
     def populate_database(self):
-        packages = self.conaryquery()
+        #packages = self.conaryquery()
+        packages = []
         # Clear table first
-        self._clear_table()
+        for tblName in ('conary_packages', 'conary_category_package_map',
+                'conary_categories'):
+            self._clear_table(tblName)
         for package in packages:
             self._insert(package)
+
+    def _addPackageCategory(self, trv, category):
+        res = self.cursor.execute( \
+                'SELECT packageId FROM conary_packages WHERE trove=? and version=? and flavor = ?', trv.getName(), trv.getVersion().freeze(), trv.getFlavor().freeze())
+        if res:
+            # we have a packageID
+            pkgId = res[0]
+        else:
+            # we really should have had this data
+            raise RuntimeError
+
+        # now look up/make the categoryId
+        res = self.cursor.execute('SELECT categoryId FROM conary_categories WHERE categoryName=?', category)
+        if not res:
+            res = self.cursor.execute('SELECT MAX(COALESCE(categoryId, 0)) + 1 FROM conary_categories')
+            catId = res[0]
+            self.cursor.execute('INSERT INTO CATEGORIES VALUES(?, ?)',
+                    catId, category)
+        else:
+            catId = category
+
+        self.cursor.execute("INSERT INTO conary_category_package_map VALUES(?, ?)", catId, pkgId)
+
+    def populate_categories(self, csList):
+        for cs in csList:
+            for troveCS in cs.iterNewTroveList():
+                trv = trove.Trove(troveCS)
+                if ':' in trv.getName():
+                    # components aren't tracked at the moment
+                    continue
+                metadata = trv.getMetadata()
+                categories = metadata.get('categories', [])
+                for category in categories:
+                    self._addPackageCategory(trv, category)
commit 407301b8eac99afe9d6cdbcb9564858cfe2ceddd
Merge: 747c3e7... 806a17e...
Author: Robin Norwood <rnorwood at redhat.com>
Date:   Sun Apr 20 12:08:20 2008 -0400

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

commit 747c3e78d8e5d9dddc963af060116296e19eb5c6
Author: Robin Norwood <rnorwood at redhat.com>
Date:   Sun Apr 20 12:08:15 2008 -0400

    First stab at searchByGroup using DB.

diff --git a/backends/conary/helpers/conaryBackend.py b/backends/conary/helpers/conaryBackend.py
index 31d5e92..241ab00 100644
--- a/backends/conary/helpers/conaryBackend.py
+++ b/backends/conary/helpers/conaryBackend.py
@@ -675,6 +675,36 @@ class Cache(object):
             print str(e)
             return None
 
+    def searchByGroup(self, groups):
+        """
+        Returns all troves for given groups. (trove, version, flavor)
+        Needs filtering capability.
+        ['all'] means all packages
+        FIXME: No filtering done on group text - SQL injection
+        """
+        if not groups:
+            groups = ["all"]
+
+        if "all" in groups:
+            stmt = ("SELECT DISTINCT CP.trove, CP.version, CP.flavor, CC.category_name"
+                    "           FROM conary_packages CP, conary_categories CC, conary_category_package_map CCMap"
+                    "       GROUP BY CP.trove, CP.version, CP.flavor"
+                    "       ORDER BY CP.trove, CP.version DESC, CP.flavor")
+        else:
+            group_string = ", ".join(groups)
+            stmt = ("SELECT DISTINCT CP.trove, CP.version, CP.flavor, CC.category_name"
+                    "           FROM conary_packages CP, conary_categories CC, conary_category_package_map CCMap"
+                    "          WHERE CC.category_name IN (%s)"
+                    "       GROUP BY CP.trove, CP.version, CP.flavor"
+                    "       ORDER BY CP.trove, CP.version DESC, CP.flavor" % group_string)
+        
+        try:
+            self.cursor.execute(stmt)
+            return self.cursor.fetchall()
+        except Exception, e:
+            print str(e)
+            return None
+        
     def _insert(self, trove):
         """
         Insert trove into database.
commit 806a17e6e21552580d11d451ceaa9a4c10427567
Author: Ken VanDine <ken at vandine.org>
Date:   Sun Apr 20 11:58:15 2008 -0400

    added repo stuff

diff --git a/backends/conary/helpers/conaryBackend.py b/backends/conary/helpers/conaryBackend.py
index 31d5e92..d78c011 100644
--- a/backends/conary/helpers/conaryBackend.py
+++ b/backends/conary/helpers/conaryBackend.py
@@ -535,6 +535,23 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         installed = self.check_installed(troveTuple)
         return name, version, flavor, installed
 
+    def repo_set_data(self, repoid, parameter, value):
+        '''
+        Implement the {backend}-repo-set-data functionality
+        '''
+        pass
+
+    def get_repo_list(self, filters):
+        '''
+        Implement the {backend}-get-repo-list functionality
+        '''
+        pass
+
+    def repo_enable(self, repoid, enable):
+        '''
+        Implement the {backend}-repo-enable functionality
+        '''
+
 
 class Cache(object):
     # Database name and path
commit d14d7bf233e0e305ceb35b511c3d40eaa436a0fc
Author: Ken VanDine <ken at vandine.org>
Date:   Sun Apr 20 11:57:33 2008 -0400

    updated copyright

diff --git a/backends/conary/helpers/get-repo-list.py b/backends/conary/helpers/get-repo-list.py
index cdf587e..4c7eda5 100755
--- a/backends/conary/helpers/get-repo-list.py
+++ b/backends/conary/helpers/get-repo-list.py
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 #
-# Copyright (C) 2007 Richard Hughes <richard at hughsie.com>
+# Copyright (C) 2007-2008 Richard Hughes <richard at hughsie.com>
 #
 # Licensed under the GNU General Public License Version 2
 #
diff --git a/backends/conary/helpers/repo-enable.py b/backends/conary/helpers/repo-enable.py
index 2ceb6c8..09f0f4c 100755
--- a/backends/conary/helpers/repo-enable.py
+++ b/backends/conary/helpers/repo-enable.py
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 #
-# Copyright (C) 2007 Richard Hughes <richard at hughsie.com>
+# Copyright (C) 2007-2008 Richard Hughes <richard at hughsie.com>
 #
 # Licensed under the GNU General Public License Version 2
 #
diff --git a/backends/conary/helpers/repo-set-data.py b/backends/conary/helpers/repo-set-data.py
index 3c29f8b..4ba6671 100755
--- a/backends/conary/helpers/repo-set-data.py
+++ b/backends/conary/helpers/repo-set-data.py
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 #
-# Copyright (C) 2007 Richard Hughes <richard at hughsie.com>
+# Copyright (C) 2007-2008 Richard Hughes <richard at hughsie.com>
 #
 # Licensed under the GNU General Public License Version 2
 #
commit 87bbfc90b150d2082183710d8f49da0674f209a3
Author: Ken VanDine <ken at vandine.org>
Date:   Sun Apr 20 11:56:01 2008 -0400

    Added stubs for repo stuff

diff --git a/backends/conary/helpers/get-repo-list.py b/backends/conary/helpers/get-repo-list.py
new file mode 100755
index 0000000..cdf587e
--- /dev/null
+++ b/backends/conary/helpers/get-repo-list.py
@@ -0,0 +1,19 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2007 Richard Hughes <richard at hughsie.com>
+#
+# Licensed under the GNU General Public License Version 2
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+import sys
+
+from conaryBackend import PackageKitConaryBackend
+filters = sys.argv[1]
+
+backend = PackageKitConaryBackend(sys.argv[2:])
+backend.get_repo_list(filters)
+sys.exit(0)
diff --git a/backends/conary/helpers/repo-enable.py b/backends/conary/helpers/repo-enable.py
new file mode 100755
index 0000000..2ceb6c8
--- /dev/null
+++ b/backends/conary/helpers/repo-enable.py
@@ -0,0 +1,19 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2007 Richard Hughes <richard at hughsie.com>
+#
+# Licensed under the GNU General Public License Version 2
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+import sys
+
+from conaryBackend import PackageKitConaryBackend
+repoid = sys.argv[1]
+state=sys.argv[2]
+backend = PackageKitConaryBackend(sys.argv[2:])
+backend.repo_enable(repoid,state)
+sys.exit(0)
diff --git a/backends/conary/helpers/repo-set-data.py b/backends/conary/helpers/repo-set-data.py
new file mode 100755
index 0000000..3c29f8b
--- /dev/null
+++ b/backends/conary/helpers/repo-set-data.py
@@ -0,0 +1,20 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2007 Richard Hughes <richard at hughsie.com>
+#
+# Licensed under the GNU General Public License Version 2
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+
+import sys
+
+from conaryBackend import PackageKitConaryBackend
+repoid = sys.argv[1]
+para = sys.argv[2]
+value=sys.argv[3]
+backend = PackageKitConaryBackend(sys.argv[2:])
+backend.repo_set_data(repoid,para,value)
+sys.exit(0)


More information about the PackageKit-commit mailing list