socsvn commit: r256842 - soc2013/mattbw/backend/jobs

mattbw at FreeBSD.org mattbw at FreeBSD.org
Mon Sep 2 19:03:40 UTC 2013


Author: mattbw
Date: Mon Sep  2 19:03:40 2013
New Revision: 256842
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=256842

Log:
  Output exact package that failed a suitability check.
  
  This is mainly for debugging purposes.
  

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

Modified: soc2013/mattbw/backend/jobs/check.c
==============================================================================
--- soc2013/mattbw/backend/jobs/check.c	Mon Sep  2 18:25:18 2013	(r256841)
+++ soc2013/mattbw/backend/jobs/check.c	Mon Sep  2 19:03:40 2013	(r256842)
@@ -34,33 +34,36 @@
 #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 jobs_check_query_ids(struct pkg_jobs *jobs, struct query_id *query_ids, guint count, bool reject_non_updates);
+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
  * packages that match the PackageIDs match them fully.
+ *
+ * Returns NULL if the check succeeded, and a struct pkg if that package
+ * failed the check.
  */
-bool
+struct pkg *
 jobs_check_package_ids(struct pkg_jobs *jobs, gchar **package_ids,
     guint count, bool reject_non_updates)
 {
-	bool		success;
+	struct pkg      *package;
 	struct query_id *query_ids;
 
 	assert(jobs != NULL);
 	assert(package_ids != NULL);
 	assert(0 < count);
 
-	success = false;
+	package = NULL;
 
 	query_ids = query_id_array_from_package_ids(package_ids, count);
 	if (query_ids != NULL) {
 
 		/* Now do the actual checking, per package. */
-		success = jobs_check_query_ids(jobs, query_ids, count,
+		package = jobs_check_query_ids(jobs, query_ids, count,
 		    reject_non_updates);
 	}
 
-	return success;
+	return package;
 }
 
 static bool
@@ -86,7 +89,7 @@
 }
 
 
-static bool
+static struct pkg *
 jobs_check_query_ids(struct pkg_jobs *jobs, struct query_id *query_ids,
     guint count, bool reject_non_updates)
 {
@@ -141,5 +144,5 @@
 		/* Do not free the struct pkg, we actually don't own it. */
 	}
 
-	return success;
+	return success ? NULL : package;
 }

Modified: soc2013/mattbw/backend/jobs/check.h
==============================================================================
--- soc2013/mattbw/backend/jobs/check.h	Mon Sep  2 18:25:18 2013	(r256841)
+++ soc2013/mattbw/backend/jobs/check.h	Mon Sep  2 19:03:40 2013	(r256842)
@@ -25,6 +25,6 @@
 #include <stdbool.h>		/* bool */
 #include "../pkg.h"		/* pkg_... */
 
-bool		jobs_check_package_ids(struct pkg_jobs *jobs, gchar **package_ids, guint count, bool reject_non_updates);
+struct pkg     *jobs_check_package_ids(struct pkg_jobs *jobs, gchar **package_ids, guint count, bool reject_non_updates);
 
 #endif				/* !_PKGNG_BACKEND_JOBS_CHECK_H_ */

Modified: soc2013/mattbw/backend/jobs/do.c
==============================================================================
--- soc2013/mattbw/backend/jobs/do.c	Mon Sep  2 18:25:18 2013	(r256841)
+++ soc2013/mattbw/backend/jobs/do.c	Mon Sep  2 19:03:40 2013	(r256842)
@@ -28,6 +28,7 @@
 
 #include "../db.h"		/* db_... */
 #include "../namever.h"		/* namever_array_free */
+#include "../pkgutils.h"	/* pkgutils_... */
 #include "../utils.h"		/* get_package_ids */
 #include "check.h"		/* jobs_check_... */
 #include "core.h"		/* jobs_... */
@@ -103,28 +104,39 @@
 jobs_do_check(const struct jobs_spec *spec, struct pkg_jobs *jobs,
     gchar **package_ids, guint count)
 {
-	bool		success;
+	struct pkg     *failed_package;
 
 	assert(spec != NULL);
 	assert(jobs != NULL);
 	assert(package_ids != NULL || 0 == count);
 	assert(package_ids == NULL || 0 < count);
 
-	success = true;
+	failed_package = NULL;
 
 	if (package_ids != NULL) {
-		success = jobs_check_package_ids(jobs, package_ids, count,
-		    spec->reject_non_updates);
+		failed_package = jobs_check_package_ids(jobs, package_ids,
+		    count, spec->reject_non_updates);
 	}
-	if (!success) {
+	if (failed_package != NULL) {
+		char	       *message;
+		char	       *package_id;
+
+		package_id = pkgutils_pkg_to_id(failed_package);
+		message = NULL;
+		(void)asprintf(&message,
+		    "(internal error) package %s failed suitability check.",
+		    package_id);
 		ERR(spec->backend,
 		    PK_ERROR_ENUM_DEP_RESOLUTION_FAILED,
-		    "packages failed suitability check");
+		    message);
+
+		g_free(package_id);
+		free(message);
 	}
 
-	assert(0 < count || success);
+	assert(0 < count || failed_package == NULL);
 
-	return success;
+	return (failed_package == NULL);
 }
 
 static bool


More information about the svn-soc-all mailing list