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

mattbw at FreeBSD.org mattbw at FreeBSD.org
Mon Jul 1 22:13:02 UTC 2013


Author: mattbw
Date: Mon Jul  1 22:13:01 2013
New Revision: 253817
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=253817

Log:
  replace iterate.[ch] with query.[ch] and move related functions back in from db.

Added:
  soc2013/mattbw/backend/query.c
     - copied, changed from r253789, soc2013/mattbw/backend/iterate.c
  soc2013/mattbw/backend/query.h
     - copied, changed from r253789, soc2013/mattbw/backend/iterate.h
Deleted:
  soc2013/mattbw/backend/iterate.c
  soc2013/mattbw/backend/iterate.h
Modified:
  soc2013/mattbw/backend/Makefile
  soc2013/mattbw/backend/actions/get-details.c
  soc2013/mattbw/backend/actions/get-files.c
  soc2013/mattbw/backend/actions/install-packages.c
  soc2013/mattbw/backend/db.c
  soc2013/mattbw/backend/db.h

Modified: soc2013/mattbw/backend/Makefile
==============================================================================
--- soc2013/mattbw/backend/Makefile	Mon Jul  1 21:59:17 2013	(r253816)
+++ soc2013/mattbw/backend/Makefile	Mon Jul  1 22:13:01 2013	(r253817)
@@ -2,7 +2,7 @@
 
 LIB=		pk_backend_pkgng
 SHLIB_MAJOR=	1
-SRCS=		pk-backend-pkgng.c groups.c db.c licenses.c iterate.c utils.c
+SRCS=		pk-backend-pkgng.c groups.c db.c licenses.c query.c utils.c
 SRCS+=		actions/get-details.c		\
 		actions/get-files.c		\
 		actions/get-repo-list.c		\

Modified: soc2013/mattbw/backend/actions/get-details.c
==============================================================================
--- soc2013/mattbw/backend/actions/get-details.c	Mon Jul  1 21:59:17 2013	(r253816)
+++ soc2013/mattbw/backend/actions/get-details.c	Mon Jul  1 22:13:01 2013	(r253817)
@@ -22,9 +22,8 @@
 #include "../pk-backend.h"
 #include "pkg.h"
 
-#include "../db.h"		/* db_query_from_id */
 #include "../groups.h"		/* group_from_origin */
-#include "../iterate.h"		/* Package iteration */
+#include "../query.h"		/* Package querying */
 #include "../licenses.h"	/* license_from_pkg */
 
 #include "actions.h"		/* get_details_thread prototype */
@@ -51,7 +50,7 @@
 static gboolean
 get_for(const gchar *id, PkBackend *backend, struct pkgdb *db)
 {
-	return db_query_with_id(id, backend, db, LOAD_FLAGS, emit_pkg);
+	return query_emit_match(id, backend, db, LOAD_FLAGS, emit_pkg);
 }
 
 /*

Modified: soc2013/mattbw/backend/actions/get-files.c
==============================================================================
--- soc2013/mattbw/backend/actions/get-files.c	Mon Jul  1 21:59:17 2013	(r253816)
+++ soc2013/mattbw/backend/actions/get-files.c	Mon Jul  1 22:13:01 2013	(r253817)
@@ -22,10 +22,9 @@
 #include "../pk-backend.h"
 #include "pkg.h"
 
-#include "../db.h"		/* db_query_from_id */
 #include "../groups.h"		/* group_from_origin */
 #include "../hash_traverse.h"	/* HASH_FOR */
-#include "../iterate.h"		/* Package iteration */
+#include "../query.h"		/* Package querying */
 #include "../licenses.h"	/* license_from_pkg */
 
 #include "actions.h"		/* get_files_thread prototype */
@@ -93,5 +92,5 @@
 gboolean
 get_for(const gchar *id, PkBackend *backend, struct pkgdb *db)
 {
-	return db_query_with_id(id, backend, db, LOAD_FLAGS, emit_pkg);
+	return query_emit_match(id, backend, db, LOAD_FLAGS, emit_pkg);
 }

Modified: soc2013/mattbw/backend/actions/install-packages.c
==============================================================================
--- soc2013/mattbw/backend/actions/install-packages.c	Mon Jul  1 21:59:17 2013	(r253816)
+++ soc2013/mattbw/backend/actions/install-packages.c	Mon Jul  1 22:13:01 2013	(r253817)
@@ -22,8 +22,7 @@
 #include "../pk-backend.h"
 #include "pkg.h"
 
-#include "../db.h"		/* db_query_from_id */
-#include "../iterate.h"		/* Package iteration */
+#include "../query.h"		/* Package querying */
 
 #include "actions.h"		/* install_packages_thread prototype */
 
@@ -56,7 +55,7 @@
 				      PK_ERROR_ENUM_INTERNAL_ERROR,
 				      "pkg_jobs_new failed");
 	else
-		err = db_query_to_job(id, backend, db, jobs);
+		err = query_job_match(id, backend, db, jobs);
 
 	/* TODO: actually install */
 	pk_backend_error_code(backend, PK_ERROR_ENUM_NOT_SUPPORTED, NULL);

Modified: soc2013/mattbw/backend/db.c
==============================================================================
--- soc2013/mattbw/backend/db.c	Mon Jul  1 21:59:17 2013	(r253816)
+++ soc2013/mattbw/backend/db.c	Mon Jul  1 22:13:01 2013	(r253817)
@@ -25,26 +25,8 @@
 #include "pkg.h"
 
 #include "db.h"			/* prototypes */
-#include "iterate.h"		/* pkg_func_ptr */
 #include "utils.h"		/* null_if_empty, split_id */
 
-static gboolean
-db_query_split(const gchar *name,
-	       const gchar *version,
-	       const gchar *arch,
-	       const gchar *reponame,
-	       PkBackend *backend,
-	       struct pkgdb *db,
-	       int load_flags,
-	       gchar **match_id_p,
-	       struct pkg **match_pkg_p);
-static gboolean
-db_query_match(const gchar *id,
-	       PkBackend *backend,
-	       struct pkgdb *db,
-	       int load_flags,
-	       gchar **match_id_p,
-	       struct pkg **match_pkg_p);
 
 /*
  * Opens a pkgdb ready for remote operations. This will always return TRUE if
@@ -87,197 +69,3 @@
 
 	return success;
 }
-
-/*
- * Performs a package database query against a PackageID, and then hands the
- * matching results to an emitter function.
- */
-gboolean
-db_query_with_id(const gchar *id,
-		 PkBackend *backend,
-		 struct pkgdb *db,
-		 int load_flags,
-		 pkg_func_ptr emitter)
-{
-	gboolean	success;
-	gchar          *match_id;
-	struct pkg     *match_pkg;
-
-	success = db_query_match(id,
-				 backend,
-				 db,
-				 load_flags,
-				 &match_id,
-				 &match_pkg);
-	if (success == TRUE && match_id != NULL && match_pkg != NULL)
-		emitter(match_pkg, match_id, backend);
-
-	pkg_free(match_pkg);
-	g_free(match_id);
-
-	return success;
-}
-
-/*
- * Performs a package database query against a PackageID, and then adds the
- * matching results to a pkg job.
- * 
- * The round trip through the database seems like a strange idea given that
- * pkg_jobs takes a package name.  At the moment this is done to ensure that
- * the package matches the PackageID fully.
- * 
- * TODO: do something about the redundancy in both this and the emitter variant.
- */
-gboolean
-db_query_to_job(const gchar *id,
-		PkBackend *backend,
-		struct pkgdb *db,
-		struct pkg_jobs *jobs)
-{
-	gboolean	success;
-	gchar          *match_id;
-	struct pkg     *match_pkg;
-
-	success = db_query_match(id,
-				 backend,
-				 db,
-				 PKG_LOAD_BASIC,
-				 &match_id,
-				 &match_pkg);
-	if (success == TRUE && match_id != NULL && match_pkg != NULL) {
-		gchar          *name[1];
-
-		name[0] = NULL;
-		pkg_get(match_pkg, PKG_NAME, &(name[0]));
-
-		pkg_jobs_add(jobs, MATCH_EXACT, name, 1);
-	}
-	pkg_free(match_pkg);
-	g_free(match_id);
-
-	return success;
-}
-
-/*
- * Performs a package database query against a (potentially partial)
- * PackageID, retrieving the matched package and its full PackageID.
- * 
- * The exact type of query depends on the repository given.
- */
-static gboolean
-db_query_match(const gchar *id,
-	       PkBackend *backend,
-	       struct pkgdb *db,
-	       int load_flags,
-	       gchar **match_id_p,
-	       struct pkg **match_pkg_p)
-{
-	gboolean	query_success;
-	gboolean	split_success;
-	const gchar    *arch;
-	const gchar    *data;
-	const gchar    *name;
-	const gchar    *version;
-	gchar         **strv;
-
-	query_success = FALSE;
-	split_success = FALSE;
-	strv = NULL;
-
-	split_success = split_id(id, &strv, &name, &version, &arch, &data);
-	if (split_success == FALSE)
-		pk_backend_error_code(backend,
-				      PK_ERROR_ENUM_PACKAGE_ID_INVALID,
-				      "invalid package id");
-	else {
-		/*
-		 * If the PackageID has a repository specified (even if it's
-		 * "installed" i.e. currently installed package), running
-		 * "get_details_query" directly should handle remote/local
-		 * queries properly.
-		 * 
-		 * If there is no repository specified, however (data is NULL),
-		 * we may need to check both the local and (all) remote
-		 * repositories, in that order. (TODO: local packages?)
-		 */
-		if (data == NULL)
-			/* Try local database first. */
-			query_success = db_query_split(name,
-						       version,
-						       arch,
-						       "installed",
-						       backend,
-						       db,
-						       load_flags,
-						       match_id_p,
-						       match_pkg_p);
-		if (query_success == FALSE)
-			query_success = db_query_split(name, version, arch, data,
-					backend, db, load_flags, match_id_p,
-						       match_pkg_p);
-		/*
-		 * Assume any error is due to not finding packages. At time
-		 * of writing this is true, but may change.
-		 */
-		if (query_success == FALSE)
-			pk_backend_error_code(backend,
-					    PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
-					      "package not found");
-		g_strfreev(strv);
-	}
-
-	return query_success;
-}
-
-/*
- * Looks the split PackageID up in the package databases.
- * 
- * Usually, a remote query will be done on the repository named by "reponame".
- * If reponame is NULL, a remote check will be done against all repostories.
- * If it is "installed", a local check will be done.  (This is in keeping
- * with the special meaning of the "installed" repository in PackageIDs).
- */
-static gboolean
-db_query_split(const gchar *name,
-	       const gchar *version,
-	       const gchar *arch,
-	       const gchar *reponame,
-	       PkBackend *backend,
-	       struct pkgdb *db,
-	       int load_flags,
-	       gchar **match_id_p,
-	       struct pkg **match_pkg_p)
-{
-	struct pkgdb_it *it;
-	gboolean	success;
-
-	success = FALSE;
-	it = NULL;
-
-	/* Are we doing a local query? */
-	/*
-	 * If we got a repository name, then we want to make sure it
-	 * corresponds to a real repository.
-	 */
-	if (g_strcmp0(reponame, "installed") == 0)
-		it = pkgdb_query(db, name, MATCH_EXACT);
-	else if (pkg_repo_find_ident(reponame) != NULL)
-		it = pkgdb_rquery(db, name, MATCH_EXACT, reponame);
-	else
-		pk_backend_error_code(backend,
-				      PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
-				      "no such repository");
-
-
-	if (it != NULL)
-		success = match_id_in_it(it,
-					 backend,
-					 name,
-					 version,
-					 arch,
-					 reponame,
-					 load_flags,
-					 match_id_p,
-					 match_pkg_p);
-	return success;
-}

Modified: soc2013/mattbw/backend/db.h
==============================================================================
--- soc2013/mattbw/backend/db.h	Mon Jul  1 21:59:17 2013	(r253816)
+++ soc2013/mattbw/backend/db.h	Mon Jul  1 22:13:01 2013	(r253817)
@@ -26,19 +26,6 @@
 #include "pk-backend.h"		/* PkBackend */
 #include "pkg.h"		/* struct pkgdb */
 
-#include "iterate.h"		/* pk_func_ptr */
-
 gboolean	open_remote_db(struct pkgdb **db, PkBackend *backend);
-gboolean
-db_query_with_id(const gchar *package_id,
-		 PkBackend *backend,
-		 struct pkgdb *db,
-		 int load_flags,
-		 pkg_func_ptr emitter);
-gboolean
-db_query_to_job(const gchar *id,
-		PkBackend *backend,
-		struct pkgdb *db,
-		struct pkg_jobs *jobs);
 
 #endif				/* !_PKGNG_BACKEND_DETAILS_H_ */

Copied and modified: soc2013/mattbw/backend/query.c (from r253789, soc2013/mattbw/backend/iterate.c)
==============================================================================
--- soc2013/mattbw/backend/iterate.c	Mon Jul  1 09:53:06 2013	(r253789, copy source)
+++ soc2013/mattbw/backend/query.c	Mon Jul  1 22:13:01 2013	(r253817)
@@ -23,7 +23,7 @@
 #include "pk-backend.h"
 #include "pkg.h"
 
-#include "iterate.h"		/* Prototypes */
+#include "query.h"		/* Prototypes */
 
 #include "db.h"			/* open_remote_db */
 #include "hash_traverse.h"	/* HASH_FOR */
@@ -34,7 +34,23 @@
 static gboolean
 try_id_match(struct pkg *pkg, const gchar *name, const gchar *version, const
 	     gchar *arch, const gchar *data, gchar **match_id);
-
+static gboolean
+query_split(const gchar *name,
+	    const gchar *version,
+	    const gchar *arch,
+	    const gchar *reponame,
+	    PkBackend *backend,
+	    struct pkgdb *db,
+	    int load_flags,
+	    gchar **match_id_p,
+	    struct pkg **match_pkg_p);
+static gboolean
+match(const gchar *id,
+      PkBackend *backend,
+      struct pkgdb *db,
+      int load_flags,
+      gchar **match_id_p,
+      struct pkg **match_pkg_p);
 
 gboolean
 match_id_in_it(struct pkgdb_it *iterator,
@@ -203,3 +219,187 @@
 
 	return no_error_yet;
 }
+
+/*
+ * Performs a package database query against a PackageID, and then hands the
+ * matching result to an emitter function.
+ */
+gboolean
+query_emit_match(const gchar *id,
+		 PkBackend *backend,
+		 struct pkgdb *db,
+		 int load_flags,
+		 emit_ptr emitter)
+{
+	gboolean	success;
+	gchar          *match_id;
+	struct pkg     *match_pkg;
+
+	success = match(id, backend, db, load_flags, &match_id, &match_pkg);
+	if (success == TRUE && match_id != NULL && match_pkg != NULL)
+		emitter(match_pkg, match_id, backend);
+
+	pkg_free(match_pkg);
+	g_free(match_id);
+
+	return success;
+}
+
+/*
+ * Performs a package database query against a PackageID, and then adds the
+ * matching results to a pkg job.
+ * 
+ * The round trip through the database seems like a strange idea given that
+ * pkg_jobs takes a package name.  At the moment this is done to ensure that
+ * the package matches the PackageID fully.
+ * 
+ * TODO: do something about the redundancy in both this and the emitter variant.
+ */
+gboolean
+query_job_match(const gchar *id,
+		PkBackend *backend,
+		struct pkgdb *db,
+		struct pkg_jobs *jobs)
+{
+	gboolean	success;
+	gchar          *match_id;
+	struct pkg     *match_pkg;
+
+	success = match(id, backend, db, PKG_LOAD_BASIC, &match_id, &match_pkg);
+	if (success == TRUE && match_id != NULL && match_pkg != NULL) {
+		gchar          *name[1];
+
+		name[0] = NULL;
+		pkg_get(match_pkg, PKG_NAME, &(name[0]));
+
+		pkg_jobs_add(jobs, MATCH_EXACT, name, 1);
+	}
+	pkg_free(match_pkg);
+	g_free(match_id);
+
+	return success;
+}
+
+/*
+ * Performs a package database query against a (potentially partial)
+ * PackageID, retrieving the matched package and its full PackageID.
+ * 
+ * The exact type of query depends on the repository given.
+ */
+static gboolean
+match(const gchar *id,
+      PkBackend *backend,
+      struct pkgdb *db,
+      int load_flags,
+      gchar **match_id_p,
+      struct pkg **match_pkg_p)
+{
+	gboolean	query_success;
+	gboolean	split_success;
+	const gchar    *arch;
+	const gchar    *data;
+	const gchar    *name;
+	const gchar    *version;
+	gchar         **strv;
+
+	query_success = FALSE;
+	split_success = FALSE;
+	strv = NULL;
+
+	split_success = split_id(id, &strv, &name, &version, &arch, &data);
+	if (split_success == FALSE)
+		pk_backend_error_code(backend,
+				      PK_ERROR_ENUM_PACKAGE_ID_INVALID,
+				      "invalid package id");
+	else {
+		/*
+		 * If the PackageID has a repository specified (even if it's
+		 * "installed" i.e. currently installed package), running
+		 * "get_details_query" directly should handle remote/local
+		 * queries properly.
+		 * 
+		 * If there is no repository specified, however (data is NULL),
+		 * we may need to check both the local and (all) remote
+		 * repositories, in that order. (TODO: local packages?)
+		 */
+		if (data == NULL)
+			/* Try local database first. */
+			query_success = query_split(name,
+						    version,
+						    arch,
+						    "installed",
+						    backend,
+						    db,
+						    load_flags,
+						    match_id_p,
+						    match_pkg_p);
+		if (query_success == FALSE)
+			query_success = query_split(name, version, arch, data,
+					backend, db, load_flags, match_id_p,
+						    match_pkg_p);
+		/*
+		 * Assume any error is due to not finding packages. At time
+		 * of writing this is true, but may change.
+		 */
+		if (query_success == FALSE)
+			pk_backend_error_code(backend,
+					    PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+					      "package not found");
+		g_strfreev(strv);
+	}
+
+	return query_success;
+}
+
+/*
+ * Looks the split PackageID up in the package databases.
+ * 
+ * Usually, a remote query will be done on the repository named by "reponame".
+ * If reponame is NULL, a remote check will be done against all repostories.
+ * If it is "installed", a local check will be done.  (This is in keeping
+ * with the special meaning of the "installed" repository in PackageIDs).
+ */
+static gboolean
+query_split(const gchar *name,
+	    const gchar *version,
+	    const gchar *arch,
+	    const gchar *reponame,
+	    PkBackend *backend,
+	    struct pkgdb *db,
+	    int load_flags,
+	    gchar **match_id_p,
+	    struct pkg **match_pkg_p)
+{
+	struct pkgdb_it *it;
+	gboolean	success;
+
+	success = FALSE;
+	it = NULL;
+
+	/* Are we doing a local query? */
+	/*
+	 * If we got a repository name, then we want to make sure it
+	 * corresponds to a real repository.
+	 */
+	if (g_strcmp0(reponame, "installed") == 0)
+		it = pkgdb_query(db, name, MATCH_EXACT);
+	else if (pkg_repo_find_ident(reponame) != NULL)
+		it = pkgdb_rquery(db, name, MATCH_EXACT, reponame);
+	else
+		pk_backend_error_code(backend,
+				      PK_ERROR_ENUM_PACKAGE_NOT_FOUND,
+				      "no such repository");
+
+
+	if (it != NULL)
+		success = match_id_in_it(it,
+					 backend,
+					 name,
+					 version,
+					 arch,
+					 reponame,
+					 load_flags,
+					 match_id_p,
+					 match_pkg_p);
+	return success;
+}

Copied and modified: soc2013/mattbw/backend/query.h (from r253789, soc2013/mattbw/backend/iterate.h)
==============================================================================
--- soc2013/mattbw/backend/iterate.h	Mon Jul  1 09:53:06 2013	(r253789, copy source)
+++ soc2013/mattbw/backend/query.h	Mon Jul  1 22:13:01 2013	(r253817)
@@ -18,28 +18,29 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#ifndef _PKGNG_BACKEND_ITERATE_H_
-#define _PKGNG_BACKEND_ITERATE_H_
+#ifndef _PKGNG_BACKEND_QUERY_H_
+#define _PKGNG_BACKEND_QUERY_H_
 
 #include <glib.h>
 #include "pk-backend.h"
 #include "pkg.h"
 
-typedef void    (*pkg_func_ptr) (struct pkg *pkg,
-				 		const		gchar *id,
-				 		PkBackend    *backend);
+typedef void    (*emit_ptr) (struct pkg *pkg,
+			     		const		gchar *id,
+			     		PkBackend    *backend);
 typedef gboolean (*ids_func_ptr) (const gchar *id, PkBackend *backend, struct pkgdb *db);
 
 gboolean
-match_id_in_it(struct pkgdb_it *iterator,
-	       PkBackend *backend,
-	       const gchar *name,
-	       const gchar *version,
-	       const gchar *arch,
-	       const gchar *data,
-	       int load_flags,
-	       gchar **match_id_p,
-	       struct pkg **match_pkg_p);
+query_emit_match(const gchar *id,
+		 PkBackend *backend,
+		 struct pkgdb *db,
+		 int load_flags,
+		 emit_ptr emitter);
+gboolean
+query_job_match(const gchar *id,
+		PkBackend *backend,
+		struct pkgdb *db,
+		struct pkg_jobs *jobs);
 gboolean	iterate_ids(PkBackend *backend, ids_func_ptr iterate_f);
 
-#endif				/* !_PKGNG_BACKEND_ITERATE_H_ */
+#endif				/* !_PKGNG_BACKEND_QUERY_H_ */


More information about the svn-soc-all mailing list