socsvn commit: r254997 - in soc2013/mattbw/backend: . actions

mattbw at FreeBSD.org mattbw at FreeBSD.org
Sun Jul 21 12:06:05 UTC 2013


Author: mattbw
Date: Sun Jul 21 12:06:05 2013
New Revision: 254997
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=254997

Log:
  (untested) implement barebones and possibly broken GetUpdateDetail; need a good repo to test this on

Modified:
  soc2013/mattbw/backend/actions/get_update_detail.c
  soc2013/mattbw/backend/pkgutils.c
  soc2013/mattbw/backend/pkgutils.h
  soc2013/mattbw/backend/search.c

Modified: soc2013/mattbw/backend/actions/get_update_detail.c
==============================================================================
--- soc2013/mattbw/backend/actions/get_update_detail.c	Sun Jul 21 11:59:41 2013	(r254996)
+++ soc2013/mattbw/backend/actions/get_update_detail.c	Sun Jul 21 12:06:05 2013	(r254997)
@@ -18,16 +18,71 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#include <glib.h>	/* gboolean */
+#include <assert.h>		/* assert */
+#include <glib.h>		/* gboolean */
+#include "pkg.h"		/* pkg... */
+#include "../pk-backend.h"	/* pk_..., Pk... */
 
-#include "../actions.h"	/* Prototype */
-#include "../utils.h"	/* ERR */
+#include "../actions.h"		/* Prototype */
+#include "../pkgutils.h"	/* pkgutils_... */
+#include "../query.h"		/* query_..., struct query */
+#include "../utils.h"		/* ERR */
+
+static bool	emit(struct pkg *pkg, const gchar *id, struct query *q);
 
 gboolean
 get_update_detail_thread(PkBackend *backend)
 {
+	bool		success;
 
-	ERR(backend, PK_ERROR_ENUM_NOT_SUPPORTED, "todo");
+	success = query_match_id_to_emitter(backend, PKG_LOAD_BASIC, emit);
 	(void)pk_backend_finished(backend);
-	return FALSE;
+	return success ? TRUE : FALSE;
+}
+
+static bool
+emit(struct pkg *pkg, const gchar *id, struct query *q)
+{
+	bool		success;
+	const char     *origin;
+	PkBackend      *backend;
+	struct pkg     *old;
+	struct pkgdb   *db;
+
+	assert(pkg != NULL);
+	assert(id != NULL);
+	assert(q != NULL);
+
+	db = query_db(q);
+	backend = query_backend(q);
+	success = FALSE;
+
+	/* See if there's a version of this package already installed */
+	origin = NULL;
+	pkg_get(pkg, PKG_ORIGIN, &origin);
+
+	old = NULL;
+	pkgutils_add_old_version(db, pkg, &old);
+	if (old != NULL && pkg_version_change(old) == PKG_UPGRADE) {
+		const char     *update_text;
+		gchar	       *old_id;
+
+		old_id = pkgutils_pkg_to_id(pkg);
+
+		/* TODO: elaborate on this */
+		update_text = "new version";
+
+		(void)pk_backend_update_detail(backend, id, old_id, NULL, NULL,
+		    NULL, NULL, PK_RESTART_ENUM_NONE, update_text, NULL,
+		    PK_UPDATE_STATE_ENUM_UNKNOWN, NULL, NULL);
+		/* Phew */
+
+		g_free(old_id);
+
+		success = TRUE;
+	}
+
+	pkg_free(old);
+
+	return success;
 }

Modified: soc2013/mattbw/backend/pkgutils.c
==============================================================================
--- soc2013/mattbw/backend/pkgutils.c	Sun Jul 21 11:59:41 2013	(r254996)
+++ soc2013/mattbw/backend/pkgutils.c	Sun Jul 21 12:06:05 2013	(r254997)
@@ -171,9 +171,12 @@
 
 /*
  * Adds any old version of the given package to itself as PKG_OLD_VERSION.
+ *
+ * If old_p is given, the package representing the old version is retained and
+ * pointed to through old_p; else it is freed.
  */
 void
-pkgutils_add_old_version(struct pkgdb *db, struct pkg *pkg)
+pkgutils_add_old_version(struct pkgdb *db, struct pkg *pkg, struct pkg **old_p)
 {
 	const char     *origin;
 	struct pkg     *pkg2;
@@ -190,8 +193,12 @@
 		pkg_get(pkg2, PKG_VERSION, &version);
 		pkg_set(pkg, PKG_OLD_VERSION, version);
 
-		pkg_free(pkg2);
 	}
+
+	if (old_p != NULL)
+		*old_p = pkg2;
+	else
+		pkg_free(pkg2);
 }
 
 /*

Modified: soc2013/mattbw/backend/pkgutils.h
==============================================================================
--- soc2013/mattbw/backend/pkgutils.h	Sun Jul 21 11:59:41 2013	(r254996)
+++ soc2013/mattbw/backend/pkgutils.h	Sun Jul 21 12:06:05 2013	(r254997)
@@ -31,7 +31,7 @@
 const char     *pkgutils_pk_repo_of(struct pkg *pkg);
 gchar          *pkgutils_pkg_to_id(struct pkg *pkg);
 gchar          *pkgutils_pkg_to_id_through(struct pkg *pkg, const gchar **strv);
-void		pkgutils_add_old_version(struct pkgdb *db, struct pkg *pkg);
+void		pkgutils_add_old_version(struct pkgdb *db, struct pkg *pkg, struct pkg **old_p);
 void		pkgutils_emit(struct pkg *pkg, PkBackend *backend, PkInfoEnum info);
 void		pkgutils_emit_filtered(struct pkg *pkg, PkBackend *backend, PkBitfield filters, PkInfoEnum info);
 

Modified: soc2013/mattbw/backend/search.c
==============================================================================
--- soc2013/mattbw/backend/search.c	Sun Jul 21 11:59:41 2013	(r254996)
+++ soc2013/mattbw/backend/search.c	Sun Jul 21 12:06:05 2013	(r254997)
@@ -47,7 +47,7 @@
 
 		pkg = NULL;
 		while (pkgdb_it_next(it, &pkg, PKG_LOAD_BASIC) == EPKG_OK) {
-			pkgutils_add_old_version(search->db, pkg);
+			pkgutils_add_old_version(search->db, pkg, NULL);
 			pkgutils_emit_filtered(pkg,
 			    search->backend,
 			    search->filters,


More information about the svn-soc-all mailing list