Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 5 Sep 2013 20:48:23 GMT
From:      mattbw@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r256967 - soc2013/mattbw/backend/jobs
Message-ID:  <201309052048.r85KmNRJ063153@socsvn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mattbw
Date: Thu Sep  5 20:48:23 2013
New Revision: 256967
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=256967

Log:
  Split out the jobs checking function a little.
  

Modified:
  soc2013/mattbw/backend/jobs/check.c

Modified: soc2013/mattbw/backend/jobs/check.c
==============================================================================
--- soc2013/mattbw/backend/jobs/check.c	Thu Sep  5 19:25:36 2013	(r256966)
+++ soc2013/mattbw/backend/jobs/check.c	Thu Sep  5 20:48:23 2013	(r256967)
@@ -33,7 +33,8 @@
 #include "../query.h"		/* query_... */
 #include "check.h"		/* jobs_check_... */
 
-static bool jobs_check_id_on_package(struct pkg *pkg, struct query_id *query_id, const char *namever);
+static bool	check_package(struct pkg *pkg, struct query_id *query_ids, guint count, bool reject_non_updates);
+static bool	jobs_check_id_on_package(struct pkg *pkg, struct query_id *query_id, const char *namever);
 static struct pkg *jobs_check_query_ids(struct pkg_jobs *jobs, struct query_id *query_ids, guint count, bool reject_non_updates);
 
 /* Checks a solved job against a string vector of PackageIDs to ensure any
@@ -94,55 +95,77 @@
     guint count, bool reject_non_updates)
 {
 	bool		success;
-	guint		i;
 	int		err;
-	char	       *namever;
 	struct pkg     *package;
 
 	assert(jobs != NULL);
 	assert(query_ids != NULL);
 	assert(0 < count);
 
-
 	package = NULL;
 	success = true;
 	while (success) {
 		err = pkg_jobs(jobs, &package);
-		if (err != EPKG_OK) {
-			/* Did we reach the end of the job iterator? */
-			if (err != EPKG_END) {
-				success = false;
-			}
+		if (err == EPKG_OK) {
+			success = check_package(package, query_ids,
+			    count, reject_non_updates);
+		} else if (err == EPKG_END) {
+			/*
+			 * Only return a package if it failed to match.
+			 * If we've reached this far all of them have
+			 * matched, so don't return one!
+			 */
+			package = NULL;
 			break;
+		} else {
+			/* Abnormal termination */
+			success = false;
 		}
+	}
 
-		assert(package != NULL);
+	return package;
+}
 
-		namever = namever_from_package(package);
-		if (namever == NULL) {
-			success = false;
-		}
+/*
+ * Checks a single job target package against a set of candidate
+ * query IDs to make sure that the originally requested packages in
+ * the job have been resolved properly.
+ */ 
+static bool
+check_package(struct pkg *package, struct query_id *query_ids,
+    guint count, bool reject_non_updates)
+{
+	bool		success;
+	guint		i;
+	char	       *namever;
+
+	assert(package != NULL);
+
+	success = true;
+
+	namever = namever_from_package(package);
+	if (namever == NULL) {
+		success = false;
+	}
 
-		for (i = 0; i < count; i++) {
-			if (!success) {
-				/* Leave the for loop, not the while loop. */
-				break;
-			}
-
-			assert(success);
-			success = jobs_check_id_on_package(package,
-			    query_ids + i,
-			    namever);
-
-			if (success && reject_non_updates &&
-			    pkgutils_pkg_install_state(package) !=
-			    PK_INFO_ENUM_UPDATING) {
-				success = false;
-			}
+	for (i = 0; i < count; i++) {
+		if (!success) {
+			break;
 		}
 
-		/* Do not free the struct pkg, we actually don't own it. */
+		assert(success);
+		success = jobs_check_id_on_package(package,
+		    query_ids + i,
+		    namever);
+
+		if (success && reject_non_updates &&
+		    pkgutils_pkg_install_state(package) !=
+		    PK_INFO_ENUM_UPDATING) {
+			success = false;
+		}
 	}
 
-	return success ? NULL : package;
+	/* Do not free the struct pkg, we actually don't own it. */
+
+	return success;
 }



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