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