socsvn commit: r256802 - soc2013/mattbw/backend
mattbw at FreeBSD.org
mattbw at FreeBSD.org
Sun Sep 1 15:47:14 UTC 2013
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.h> /* assert */
+#include <glib.h> /* gchar, guint */
#include <stdio.h> /* 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);
More information about the svn-soc-all
mailing list