From owner-svn-soc-all@FreeBSD.ORG Sun Sep 1 15:47:14 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id DEF42702 for ; Sun, 1 Sep 2013 15:47:14 +0000 (UTC) (envelope-from mattbw@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id BBF2D2414 for ; Sun, 1 Sep 2013 15:47:14 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r81FlES9094021 for ; Sun, 1 Sep 2013 15:47:14 GMT (envelope-from mattbw@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r81FlEAg094015 for svn-soc-all@FreeBSD.org; Sun, 1 Sep 2013 15:47:14 GMT (envelope-from mattbw@FreeBSD.org) Date: Sun, 1 Sep 2013 15:47:14 GMT Message-Id: <201309011547.r81FlEAg094015@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: r256802 - soc2013/mattbw/backend 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, 01 Sep 2013 15:47:14 -0000 Author: mattbw Date: Sun Sep 1 15:47:14 2013 New Revision: 256802 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=256802 Log: Move namever-related jobs/pkgutils functions to namever. namever now depends on PackageKit, but not the packagekit backend. Modified: soc2013/mattbw/backend/jobs.c soc2013/mattbw/backend/namever.c soc2013/mattbw/backend/namever.h soc2013/mattbw/backend/pkgutils.c soc2013/mattbw/backend/pkgutils.h Modified: soc2013/mattbw/backend/jobs.c ============================================================================== --- soc2013/mattbw/backend/jobs.c Sun Sep 1 14:28:12 2013 (r256801) +++ soc2013/mattbw/backend/jobs.c Sun Sep 1 15:47:14 2013 (r256802) @@ -30,12 +30,11 @@ #include "db.h" /* db_... */ #include "emit.h" /* emit_package */ #include "event.h" /* event_cb */ -#include "utils.h" /* ERR, type_of_repo_name */ #include "jobs.h" /* jobs_... */ #include "jobs/check.h" /* jobs_check_... */ +#include "namever.h" /* namever_* */ #include "pkgutils.h" /* pkgutils_... */ - -static char **namevers_from_package_ids(gchar **package_ids, guint count); +#include "utils.h" /* ERR, type_of_repo_name */ static const char *APPLY_ERRORS[] = { "This shouldn't occur and is a bug.", /* EPKG_OK */ @@ -122,11 +121,11 @@ if (count > 0) { int err; - namevers = namevers_from_package_ids(package_ids, count); + namevers = namever_array_from_package_ids(package_ids, count); err = pkg_jobs_add(jobs, MATCH_EXACT, namevers, (int)count); if (err != EPKG_OK) { - jobs_free_namevers(&namevers, count); + namever_array_free(&namevers, count); } } @@ -151,21 +150,6 @@ } } -void -jobs_free_namevers(char ***namevers_p, guint count) -{ - unsigned int i; - - assert(namevers_p != NULL); - - if (*namevers_p != NULL) { - for (i = 0; i < count; i++) - free(*namevers_p[i]); - free(*namevers_p); - *namevers_p = NULL; - } -} - /* Overly safe wrapper around pkg_jobs_new. */ struct pkg_jobs * jobs_allocate(pkg_jobs_t type, struct pkgdb *db) @@ -196,24 +180,3 @@ pkg_jobs_free(*jobs_p); *jobs_p = NULL; } - -static char ** -namevers_from_package_ids(gchar **package_ids, guint count) -{ - char **namevers; - unsigned int i; - - namevers = calloc(count, sizeof(char *)); - if (namevers != NULL) { - for (i = 0; i < count; i++) { - namevers[i] = pkgutils_package_id_namever( - package_ids[i]); - if (namevers[i] == NULL) { - jobs_free_namevers(&namevers, count); - break; - } - } - } - - return namevers; -} Modified: soc2013/mattbw/backend/namever.c ============================================================================== --- soc2013/mattbw/backend/namever.c Sun Sep 1 14:28:12 2013 (r256801) +++ soc2013/mattbw/backend/namever.c Sun Sep 1 15:47:14 2013 (r256802) @@ -19,15 +19,17 @@ */ #include /* assert */ +#include /* gchar, guint */ #include /* asprintf */ #include "pkg.h" /* pkg_... */ +#include "pk-backend.h" /* pk_* */ #include "namever.h" /* namever_... */ /* * Functions for dealing with "namevers" (name-version strings). * - * This file CANNOT depend on PackageKit. + * This file CANNOT depend on the PackageKit backend. */ /* @@ -64,3 +66,68 @@ (void)pkg_asprintf(&result, "%n-%v", package, package); return result; } + +/* + * Allocates and returns a string of the form "name-version" that contains + * the name and version elements of a PackageID. + * + * To be freed using free(3). + */ +char * +namever_from_package_id(gchar *package_id) +{ + char *result; + gchar **id_splits; + + assert(package_id != NULL); + + id_splits = pk_package_id_split(package_id); + assert(id_splits != NULL); + + result = namever_from_name_and_version(id_splits[PK_PACKAGE_ID_NAME], + id_splits[PK_PACKAGE_ID_VERSION]); + + g_strfreev(id_splits); + return result; +} + +char ** +namever_array_from_package_ids(gchar **package_ids, guint count) +{ + char **namevers; + unsigned int i; + + assert(package_ids != NULL); + + namevers = calloc(count, sizeof(char *)); + if (namevers != NULL) { + for (i = 0; i < count; i++) { + namevers[i] = namever_from_package_id(package_ids[i]); + if (namevers[i] == NULL) { + namever_array_free(&namevers, count); + break; + } + } + } + + return namevers; +} + +/* Frees an array of name-version strings. */ +void +namever_array_free(char ***namevers_p, guint count) +{ + unsigned int i; + + assert(namevers_p != NULL); + + if (*namevers_p != NULL) { + for (i = 0; i < count; i++) { + free(*namevers_p[i]); + } + free(*namevers_p); + *namevers_p = NULL; + } + + assert(*namevers_p == NULL); +} Modified: soc2013/mattbw/backend/namever.h ============================================================================== --- soc2013/mattbw/backend/namever.h Sun Sep 1 14:28:12 2013 (r256801) +++ soc2013/mattbw/backend/namever.h Sun Sep 1 15:47:14 2013 (r256802) @@ -23,5 +23,7 @@ char *namever_from_name_and_version(const char *name, const char *version); char *namever_from_package(struct pkg *package); - +char *namever_from_package_id(gchar *package_id); +char **namever_array_from_package_ids(gchar **package_ids, guint count); +void namever_array_free(char ***namevers_p, guint count); #endif /* !_PKGNG_BACKEND_NAMEVER_H_ */ Modified: soc2013/mattbw/backend/pkgutils.c ============================================================================== --- soc2013/mattbw/backend/pkgutils.c Sun Sep 1 14:28:12 2013 (r256801) +++ soc2013/mattbw/backend/pkgutils.c Sun Sep 1 15:47:14 2013 (r256802) @@ -28,10 +28,14 @@ #include "pkgutils.h" /* Prototypes */ #include "utils.h" /* INTENTIONALLY_IGNORE */ +static const char *repo_of_package(struct pkg *pkg); +static const char *repo_of_remote_package(struct pkg *pkg); -static const char *repo_of_remote(struct pkg *pkg); - -/* Package utility functions that do not depend on PackageKit. */ +/* + * Package utility functions. + * + * This file CANNOT depend on the PackageKit backend. + */ /* * Infers the correct PkInfoEnum to emit for this package for its current state. @@ -39,6 +43,8 @@ PkInfoEnum pkgutils_pkg_current_state(struct pkg *pkg) { + bool locally_installed; + bool remote_but_already_installed; PkInfoEnum info; assert(pkg != NULL); @@ -47,11 +53,15 @@ * it is installed if it is the same version as an installed package, * and available if it is not. */ - if ((pkg_type(pkg) == PKG_INSTALLED) || - pkgutils_pkg_install_state(pkg) == PK_INFO_ENUM_REINSTALLING) + locally_installed = (pkg_type(pkg) == PKG_INSTALLED); + remote_but_already_installed = (pkgutils_pkg_install_state(pkg) == + PK_INFO_ENUM_REINSTALLING); + + if (locally_installed || remote_but_already_installed) { info = PK_INFO_ENUM_INSTALLED; - else + } else { info = PK_INFO_ENUM_AVAILABLE; + } return info; } @@ -105,61 +115,6 @@ } /* - * Allocates and returns a string of the form "name-version" that contains - * the name and version elements of a PackageID. - * - * To be freed using free(3). - */ -char * -pkgutils_package_id_namever(gchar *package_id) -{ - char *result; - gchar **id_splits; - - assert(package_id != NULL); - - id_splits = pk_package_id_split(package_id); - assert(id_splits != NULL); - - result = namever_from_name_and_version(id_splits[PK_PACKAGE_ID_NAME], - id_splits[PK_PACKAGE_ID_VERSION]); - - g_strfreev(id_splits); - return result; -} - - - -/* - * Gets the PackageKit repository name for the package. - */ -const char * -pkgutils_pk_repo_of(struct pkg *pkg) -{ - const char *repo; - - assert(pkg != NULL); - - switch (pkg_type(pkg)) { - case PKG_OLD_FILE: - case PKG_FILE: - repo = "local"; - break; - case PKG_INSTALLED: - repo = "installed"; - break; - case PKG_REMOTE: - repo = repo_of_remote(pkg); - break; - case PKG_NONE: - repo = "unknown"; - break; - } - - return repo; -} - -/* * Converts a package to a PackageID. */ gchar * @@ -172,12 +127,9 @@ assert(pkg != NULL); - pkg_get(pkg, - PKG_NAME, &name, - PKG_VERSION, &version, - PKG_ARCH, &arch); + pkg_get(pkg, PKG_NAME, &name, PKG_VERSION, &version, PKG_ARCH, &arch); - repo = pkgutils_pk_repo_of(pkg); + repo = repo_of_package(pkg); return pk_package_id_build(name, version, arch, repo); } @@ -208,13 +160,13 @@ pkg_get(pkg2, PKG_VERSION, &version); pkg_set(pkg, PKG_OLD_VERSION, version); - } - if (old_p != NULL) + if (old_p != NULL) { *old_p = pkg2; - else + } else { pkg_free(pkg2); + } assert (old_p == NULL || pkg2 == NULL || *old_p != NULL); } @@ -244,6 +196,36 @@ } /* + * Gets the PackageKit repository name for the package. + */ +static const char * +repo_of_package(struct pkg *pkg) +{ + const char *repo; + + assert(pkg != NULL); + + switch (pkg_type(pkg)) { + case PKG_OLD_FILE: + case PKG_FILE: + repo = "local"; + break; + case PKG_INSTALLED: + repo = "installed"; + break; + case PKG_REMOTE: + repo = repo_of_remote_package(pkg); + break; + case PKG_NONE: + repo = "unknown"; + break; + } + + assert(repo != NULL); + return repo; +} + +/* * Gets the PackageKit repository name for the (remote) package. * * Currently this is the pkgng repository name (not the ident as was previously @@ -252,7 +234,7 @@ * This does not need to be freed (possibly, TODO: check). */ static const char * -repo_of_remote(struct pkg *pkg) +repo_of_remote_package(struct pkg *pkg) { const char *repo_name; Modified: soc2013/mattbw/backend/pkgutils.h ============================================================================== --- soc2013/mattbw/backend/pkgutils.h Sun Sep 1 14:28:12 2013 (r256801) +++ soc2013/mattbw/backend/pkgutils.h Sun Sep 1 15:47:14 2013 (r256802) @@ -29,8 +29,6 @@ PkInfoEnum pkgutils_pkg_install_state(struct pkg *pkg); PkInfoEnum pkgutils_pkg_remove_state(struct pkg *pkg); bool pkgutils_pkg_matches_filters(struct pkg *pkg, PkBitfield filters); -char *pkgutils_package_id_namever(gchar *package_id); -const char *pkgutils_pk_repo_of(struct pkg *pkg); gchar *pkgutils_pkg_to_id(struct pkg *pkg); void pkgutils_add_old_version(struct pkgdb *db, struct pkg *pkg, struct pkg **old_p);