Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 1 Jul 2013 09:53:06 GMT
From:      mattbw@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r253789 - in soc2013/mattbw/backend: . actions
Message-ID:  <201307010953.r619r6fE077346@socsvn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mattbw
Date: Mon Jul  1 09:53:06 2013
New Revision: 253789
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=253789

Log:
  (fixed build, untested) finished rehashing the iterator logic ready for supporting jobs, next step is to merge query relaed code into one file

Modified:
  soc2013/mattbw/backend/actions/install-packages.c
  soc2013/mattbw/backend/db.c
  soc2013/mattbw/backend/db.h
  soc2013/mattbw/backend/iterate.c
  soc2013/mattbw/backend/iterate.h

Modified: soc2013/mattbw/backend/actions/install-packages.c
==============================================================================
--- soc2013/mattbw/backend/actions/install-packages.c	Mon Jul  1 09:02:18 2013	(r253788)
+++ soc2013/mattbw/backend/actions/install-packages.c	Mon Jul  1 09:53:06 2013	(r253789)
@@ -51,12 +51,12 @@
 	jobs = NULL;
 	err = pkg_jobs_new(&jobs, PKG_JOBS_INSTALL, db);
 
-	if (err != E_OK) 
+	if (err != EPKG_OK) 
 		pk_backend_error_code(backend,
 				      PK_ERROR_ENUM_INTERNAL_ERROR,
 				      "pkg_jobs_new failed");
 	else
-		err = db_query_to_job(id, backend, db, LOAD_FLAGS, jobs);
+		err = db_query_to_job(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 09:02:18 2013	(r253788)
+++ soc2013/mattbw/backend/db.c	Mon Jul  1 09:53:06 2013	(r253789)
@@ -43,7 +43,6 @@
 	       PkBackend *backend,
 	       struct pkgdb *db,
 	       int load_flags,
-	       pkg_func_ptr emitter,
 	       gchar **match_id_p,
 	       struct pkg **match_pkg_p);
 
@@ -111,25 +110,28 @@
 				 &match_id,
 				 &match_pkg);
 	if (success == TRUE && match_id != NULL && match_pkg != NULL)
-		emitter(pkg, match_id, backend);
+		emitter(match_pkg, match_id, backend);
 
-	pkg_free(pkg);
+	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,
-		int load_flags,
 		struct pkg_jobs *jobs)
 {
 	gboolean	success;
@@ -139,20 +141,21 @@
 	success = db_query_match(id,
 				 backend,
 				 db,
-				 load_flags,
+				 PKG_LOAD_BASIC,
 				 &match_id,
 				 &match_pkg);
 	if (success == TRUE && match_id != NULL && match_pkg != NULL) {
-		gchar *name[1];
+		gchar          *name[1];
 
 		name[0] = NULL;
-		pkg_get(PKG_NAME, &(name[0]));
-		
+		pkg_get(match_pkg, PKG_NAME, &(name[0]));
+
 		pkg_jobs_add(jobs, MATCH_EXACT, name, 1);
 	}
-
-	pkg_free(pkg);
+	pkg_free(match_pkg);
 	g_free(match_id);
+
+	return success;
 }
 
 /*
@@ -166,7 +169,6 @@
 	       PkBackend *backend,
 	       struct pkgdb *db,
 	       int load_flags,
-	       pkg_func_ptr emitter,
 	       gchar **match_id_p,
 	       struct pkg **match_pkg_p)
 {
@@ -243,7 +245,8 @@
 	       PkBackend *backend,
 	       struct pkgdb *db,
 	       int load_flags,
-	       pkg_func_ptr emitter)
+	       gchar **match_id_p,
+	       struct pkg **match_pkg_p)
 {
 	struct pkgdb_it *it;
 	gboolean	success;
@@ -267,13 +270,14 @@
 
 
 	if (it != NULL)
-		success = iterate_id_matches(it,
-					     backend,
-					     name,
-					     version,
-					     arch,
-					     reponame,
-					     load_flags,
-					     emitter);
+		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 09:02:18 2013	(r253788)
+++ soc2013/mattbw/backend/db.h	Mon Jul  1 09:53:06 2013	(r253789)
@@ -35,5 +35,10 @@
 		 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_ */

Modified: soc2013/mattbw/backend/iterate.c
==============================================================================
--- soc2013/mattbw/backend/iterate.c	Mon Jul  1 09:02:18 2013	(r253788)
+++ soc2013/mattbw/backend/iterate.c	Mon Jul  1 09:53:06 2013	(r253789)
@@ -37,52 +37,48 @@
 
 
 gboolean
-iterate_id_matches(struct pkgdb_it *iterator,
-		   PkBackend *backend,
-		   const char *name,
-		   const char *version,
-		   const char *arch,
-		   const char *data,
-		   int fetch_flags,
-		   pkg_func_ptr iterate_f)
+match_id_in_it(struct pkgdb_it *iterator,
+	       PkBackend *backend,
+	       const char *name,
+	       const char *version,
+	       const char *arch,
+	       const char *data,
+	       int load_flags,
+	       gchar **match_id_p,
+	       struct pkg **match_pkg_p)
 {
 	/* TODO: Filters */
 	gboolean	found;
 	int		err;
-	struct pkg     *pkg;
-	gchar          *match_id;
 
 	found = FALSE;
-	pkg = NULL;
-	match_id = NULL;
+	*match_pkg_p = NULL;
+	*match_id_p = NULL;
 
 	/*
 	 * Stop pkg from catching fire if we try to load files from
 	 * non-installed packages.
 	 */
-	if ((fetch_flags & PKG_LOAD_FILES) && g_strcmp0(data,
-							"installed") != 0) {
+	if ((load_flags & PKG_LOAD_FILES) && g_strcmp0(data,
+						       "installed") != 0) {
 		pk_backend_error_code(backend,
 				      PK_ERROR_ENUM_CANNOT_GET_FILELIST,
 			       "Cannot get files for non-installed package."
 			);
 		err = EPKG_FATAL;
 	} else {
-		for (HASH_FOR(err, pkgdb_it_next, iterator, &pkg, fetch_flags)) {
-			if (try_id_match(pkg,
+		for (HASH_FOR(err, pkgdb_it_next, iterator, match_pkg_p, load_flags)) {
+			if (try_id_match(*match_pkg_p,
 					 name,
 					 version,
 					 arch,
 					 data,
-					 &match_id) == TRUE) {
+					 match_id_p) == TRUE) {
 				found = TRUE;
-				iterate_f(pkg, match_id, backend);
+				break;
 			}
-			if (match_id != NULL)
-				g_free(match_id);
 		}
 	}
-	pkg_free(pkg);
 
 	return found;
 }

Modified: soc2013/mattbw/backend/iterate.h
==============================================================================
--- soc2013/mattbw/backend/iterate.h	Mon Jul  1 09:02:18 2013	(r253788)
+++ soc2013/mattbw/backend/iterate.h	Mon Jul  1 09:53:06 2013	(r253789)
@@ -31,14 +31,15 @@
 typedef gboolean (*ids_func_ptr) (const gchar *id, PkBackend *backend, struct pkgdb *db);
 
 gboolean
-iterate_id_matches(struct pkgdb_it *iterator,
-		   PkBackend *backend,
-		   const gchar *name,
-		   const gchar *version,
-		   const gchar *arch,
-		   const gchar *data,
-		   int fetch_flags,
-		   pkg_func_ptr iterate_f);
+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);
 gboolean	iterate_ids(PkBackend *backend, ids_func_ptr iterate_f);
 
 #endif				/* !_PKGNG_BACKEND_ITERATE_H_ */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201307010953.r619r6fE077346>