socsvn commit: r253458 - soc2013/mattbw/backend
mattbw at FreeBSD.org
mattbw at FreeBSD.org
Mon Jun 24 23:00:06 UTC 2013
Author: mattbw
Date: Mon Jun 24 23:00:06 2013
New Revision: 253458
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=253458
Log:
unify get_remote_details and get_local_details
Modified:
soc2013/mattbw/backend/get-details.c
Modified: soc2013/mattbw/backend/get-details.c
==============================================================================
--- soc2013/mattbw/backend/get-details.c Mon Jun 24 22:15:36 2013 (r253457)
+++ soc2013/mattbw/backend/get-details.c Mon Jun 24 23:00:06 2013 (r253458)
@@ -31,19 +31,13 @@
/* TODO: move out of get-details? */
gboolean string_match(const char *left, const char *right);
static gboolean
-get_local_details(const gchar *name,
+get_details_query(const gchar *name,
const gchar *version,
const gchar *arch,
+ const gchar *reponame,
PkBackend *backend,
struct pkgdb *db);
static gboolean
-get_remote_details(const gchar *name,
- const gchar *version,
- const gchar *arch,
- const gchar *reponame,
- PkBackend *backend,
- struct pkgdb *db);
-static gboolean
get_details_for(gchar *package_id,
PkBackend *backend,
struct pkgdb *db);
@@ -160,11 +154,19 @@
return found;
}
-/* Looks the split PackageID up in the local database. */
+/*
+ * 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
-get_local_details(const gchar *name,
+get_details_query(const gchar *name,
const gchar *version,
const gchar *arch,
+ const gchar *reponame,
PkBackend *backend,
struct pkgdb *db)
{
@@ -172,31 +174,12 @@
gboolean success;
success = FALSE;
- it = pkgdb_query(db, name, MATCH_EXACT);
- if (it)
- success = get_details_check_matches(it,
- name,
- version,
- arch,
- "installed",
- backend);
- return success;
-}
-/* Looks the split PackageID up in the remote database. */
-gboolean
-get_remote_details(const gchar *name,
- const gchar *version,
- const gchar *arch,
- const gchar *reponame,
- PkBackend *backend,
- struct pkgdb *db)
-{
- struct pkgdb_it *it;
- gboolean success;
-
- success = FALSE;
- it = pkgdb_rquery(db, name, MATCH_EXACT, reponame);
+ /* Are we doing a local query? */
+ if (g_strcmp0(reponame, "installed") == 0)
+ it = pkgdb_query(db, name, MATCH_EXACT);
+ else
+ it = pkgdb_rquery(db, name, MATCH_EXACT, reponame);
if (it)
success = get_details_check_matches(it,
name,
@@ -246,22 +229,27 @@
/*
- * If the PackageID is for an installed package, do a local
- * query. If it is for a specific repo, do a remote query on
- * it. And if the PackageID has no repository information at
- * all, check both local and repo-generic remote. (TODO:
- * local packages?)
+ * 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 (g_strcmp0(data, "installed") == 0)
- success = get_local_details(name, version, arch, backend, db);
- else if (data != NULL) /* FIXME: treats 'local' as repo */
- success = get_remote_details(name, version, arch, data, backend, db);
- else {
- /* TODO: ensure this is correct behaviour */
- success = get_local_details(name, version, arch, backend, db);
+ if (data == NULL) {
+ /* Try local database first. */
+ success = get_details_query(name,
+ version,
+ arch,
+ "installed",
+ backend,
+ db);
if (success == FALSE)
- success = get_remote_details(name, version, arch, data, backend, db);
- }
+ success = get_details_query(name, version, NULL, data, backend, db);
+ } else
+ success = get_details_query(name, version, arch, data, backend, db);
/*
* Assume any error is due to not finding packages. At time
* of writing this is true, but may change.
More information about the svn-soc-all
mailing list