socsvn commit: r253582 - soc2013/mattbw/backend

mattbw at FreeBSD.org mattbw at FreeBSD.org
Thu Jun 27 00:35:59 UTC 2013


Author: mattbw
Date: Thu Jun 27 00:35:59 2013
New Revision: 253582
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=253582

Log:
  fixed up the repository name matching for pkg1.1, via query test

Modified:
  soc2013/mattbw/backend/iterate.c

Modified: soc2013/mattbw/backend/iterate.c
==============================================================================
--- soc2013/mattbw/backend/iterate.c	Thu Jun 27 00:09:03 2013	(r253581)
+++ soc2013/mattbw/backend/iterate.c	Thu Jun 27 00:35:59 2013	(r253582)
@@ -29,6 +29,8 @@
 #include "hash_traverse.h"	/* HASH_FOR */
 #include "utils.h"		/* string_match */
 
+static const char *get_repo_of(struct pkg *pkg);
+static const char *get_repo_of_remote(struct pkg *pkg);
 static gboolean
 try_id_match(struct pkg *pkg, const gchar *name, const gchar *version, const
 	     gchar *arch, const gchar *data, gchar **match_id);
@@ -61,18 +63,18 @@
 	if ((fetch_flags & PKG_LOAD_FILES) && g_strcmp0(data,
 							"installed") != 0) {
 		pk_backend_error_code(backend,
-				  PK_ERROR_ENUM_CANNOT_GET_FILELIST,
+				      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,
-					   name,
-					   version,
-					   arch,
-					   data,
-					   &match_id) == TRUE) {
+					 name,
+					 version,
+					 arch,
+					 data,
+					 &match_id) == TRUE) {
 				found = TRUE;
 				iterate_f(pkg, match_id, backend);
 			}
@@ -85,6 +87,61 @@
 	return found;
 }
 
+/* Gets the PackageKit repository name for the package. */
+static const char *
+get_repo_of(struct pkg *pkg)
+{
+	const char     *repo;
+
+	switch (pkg_type(pkg)) {
+	case PKG_FILE:
+		repo = "local";
+		break;
+	case PKG_INSTALLED:
+		repo = "installed";
+		break;
+	case PKG_REMOTE:
+		repo = get_repo_of_remote(pkg);
+		break;
+	default:
+		repo = "unknown";
+		break;
+	}
+
+	return repo;
+}
+
+/*
+ * Gets the PackageKit repository name for the (remote) package.
+ * 
+ * Currently this is actually the pkgng repository ident.  This might change.
+ * 
+ * This does not need to be freed (possibly, TODO: check).
+ */
+static const char *
+get_repo_of_remote(struct pkg *pkg)
+{
+	const char     *repo;
+	const char     *repo_name;
+	struct pkg_repo *repo_struct;
+
+	repo = NULL;
+
+	/*
+	 * We can get the repo NAME directly, but we need the repo IDENT.
+	 * Short of chopping bits of the string off in the assumption that
+	 * the name is repo-IDENT, we'll have to grab it from the repo
+	 * structure itself.
+	 */
+	pkg_get(pkg, PKG_REPONAME, &repo_name);
+
+	repo_struct = pkg_repo_find_name(repo_name);
+	if (repo_struct)
+		repo = pkg_repo_ident(repo_struct);
+
+	return repo;
+}
+
 static gboolean
 try_id_match(struct pkg *pkg, const char *name, const char *version, const
 	     char *arch, const char *data, char **match_id)
@@ -99,20 +156,7 @@
 		PKG_NAME, &p_name,
 		PKG_VERSION, &p_version);
 
-	switch (pkg_type(pkg)) {
-	case PKG_FILE:
-		p_data = "local";
-		break;
-	case PKG_INSTALLED:
-		p_data = "installed";
-		break;
-	case PKG_REMOTE:
-		pkg_get(pkg, PKG_REPONAME, &p_data);
-		break;
-	default:
-		p_data = "unknown";
-		break;
-	}
+	p_data = get_repo_of(pkg);
 
 	if (*match_id != NULL)
 		g_free(*match_id);


More information about the svn-soc-all mailing list