From owner-svn-soc-all@FreeBSD.ORG Sun Jul 21 12:06:05 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id E0E64E9C for ; Sun, 21 Jul 2013 12:06:05 +0000 (UTC) (envelope-from mattbw@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) by mx1.freebsd.org (Postfix) with ESMTP id C29F17D1 for ; Sun, 21 Jul 2013 12:06:05 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r6LC65A2039115 for ; Sun, 21 Jul 2013 12:06:05 GMT (envelope-from mattbw@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r6LC653Y039096 for svn-soc-all@FreeBSD.org; Sun, 21 Jul 2013 12:06:05 GMT (envelope-from mattbw@FreeBSD.org) Date: Sun, 21 Jul 2013 12:06:05 GMT Message-Id: <201307211206.r6LC653Y039096@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mattbw@FreeBSD.org using -f From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r254997 - in soc2013/mattbw/backend: . actions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jul 2013 12:06:05 -0000 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 /* gboolean */ +#include /* assert */ +#include /* 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,