socsvn commit: r253461 - in soc2013/mattbw: backend dummy tests tests/licence
mattbw at FreeBSD.org
mattbw at FreeBSD.org
Tue Jun 25 00:08:27 UTC 2013
Author: mattbw
Date: Tue Jun 25 00:08:26 2013
New Revision: 253461
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=253461
Log:
get rid of dummy; add in testing for the licence part of get-details
Added:
soc2013/mattbw/tests/
soc2013/mattbw/tests/licence/
soc2013/mattbw/tests/licence/Makefile
soc2013/mattbw/tests/licence/lictest.c
Deleted:
soc2013/mattbw/dummy/
Modified:
soc2013/mattbw/backend/get-details.c
soc2013/mattbw/backend/groups.c
Modified: soc2013/mattbw/backend/get-details.c
==============================================================================
--- soc2013/mattbw/backend/get-details.c Mon Jun 24 23:41:16 2013 (r253460)
+++ soc2013/mattbw/backend/get-details.c Tue Jun 25 00:08:26 2013 (r253461)
@@ -29,6 +29,7 @@
#include "get-details.h" /* get_details_thread prototype */
/* TODO: move out of get-details? */
+const char *null_if_empty(const char *in);
gboolean string_match(const char *left, const char *right);
static gboolean
get_details_query(const gchar *name,
@@ -190,6 +191,18 @@
return success;
}
+/*
+ * If the input pointer points to a string that is empty, return the null
+ * pointer; else pass through the pointer unmolested.
+ *
+ * This does NOT free anything!
+ */
+const char *
+null_if_empty(const char *in)
+{
+ return (in != NULL && strlen(in) == 0) ? NULL : in;
+}
+
gboolean
get_details_for(gchar *package_id, PkBackend *backend, struct pkgdb *db)
{
@@ -205,28 +218,19 @@
"invalid package id");
else {
/* Parts of the package ID */
- gchar *name;
- gchar *version;
- gchar *arch;
- gchar *data;
-
- name = parts[PK_PACKAGE_ID_NAME];
- if (name != NULL && strlen(name) == 0)
- name = NULL;
-
- version = parts[PK_PACKAGE_ID_VERSION];
- if (version != NULL && strlen(version) == 0)
- version = NULL;
-
- arch = parts[PK_PACKAGE_ID_ARCH];
- if (arch != NULL && strlen(arch) == 0)
- arch = NULL;
-
- data = parts[PK_PACKAGE_ID_DATA];
- if (data != NULL && strlen(data) == 0)
- data = NULL;
-
+ const gchar *name;
+ const gchar *version;
+ const gchar *arch;
+ const gchar *data;
+ /*
+ * Make really really REALLY sure that the PackageID fields
+ * either have sensible data in them, or are NULL.
+ */
+ name = null_if_empty(parts[PK_PACKAGE_ID_NAME]);
+ version = null_if_empty(parts[PK_PACKAGE_ID_VERSION]);
+ arch = null_if_empty(parts[PK_PACKAGE_ID_ARCH]);
+ data = null_if_empty(parts[PK_PACKAGE_ID_DATA]);
/*
* If the PackageID has a repository specified (even if it's
Modified: soc2013/mattbw/backend/groups.c
==============================================================================
--- soc2013/mattbw/backend/groups.c Mon Jun 24 23:41:16 2013 (r253460)
+++ soc2013/mattbw/backend/groups.c Tue Jun 25 00:08:26 2013 (r253461)
@@ -26,7 +26,7 @@
#include "groups.h" /* prototypes */
-const char ORIGIN_SEPARATOR = '/';
+const char ORIGIN_SEPARATOR = '/';
struct group_mapping {
const char *dir;
@@ -39,6 +39,10 @@
*
* Some of these mappings are a bit iffy, peer review would be greatly
* appreciated.
+ *
+ * These should ALWAYS be in alphabetical order of ports directories. This is
+ * in case anything relies on this property when searching this list (for
+ * example binary searching)
*/
static struct group_mapping group_mappings[] = {
{"accessibility", PK_GROUP_ENUM_ACCESSIBILITY},
@@ -142,16 +146,17 @@
group_from_origin(const char *origin)
{
char *dir;
- char *sep;
+ char *sep;
PkGroupEnum group;
/* Find the separation between dir and port name */
sep = strchr(origin, ORIGIN_SEPARATOR);
- /* Is this a valid origin (did it have a separator)?
- * If not, we want the default group.
- * If so, then the number of chars between the origin start and the
- * separator mark the port directory name we want to use.
+ /*
+ * Is this a valid origin (did it have a separator)? If not, we want
+ * the default group. If so, then the number of chars between the
+ * origin start and the separator mark the port directory name we
+ * want to use.
*/
dir = (sep == NULL ? NULL : strndup(origin, sep - origin));
group = group_from_port_dir(dir);
Added: soc2013/mattbw/tests/licence/Makefile
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2013/mattbw/tests/licence/Makefile Tue Jun 25 00:08:26 2013 (r253461)
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+PROG= lictest
+CFLAGS+= `pkgconf --cflags pkg`
+LDFLAGS+= `pkgconf --libs pkg`
+
+.include <bsd.prog.mk>
Added: soc2013/mattbw/tests/licence/lictest.c
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2013/mattbw/tests/licence/lictest.c Tue Jun 25 00:08:26 2013 (r253461)
@@ -0,0 +1,97 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "pkg.h"
+
+void handle_it(struct pkgdb_it *it);
+int getdb(struct pkgdb **db);
+
+int
+getdb(struct pkgdb **db)
+{
+ int err;
+
+ /* err = pkgdb_access(PKGDB_MODE_READ, PKGDB_DB_REPO);
+
+ if (err == EPKG_ENOACCESS)
+ fprintf(stderr, "check your privilege\n", err);
+ else if (err != EPKG_OK)
+ fprintf(stderr, "access error: %i\n", err);
+ else */{
+ err = pkgdb_open(db, PKGDB_REMOTE);
+ if (err != EPKG_OK)
+ fprintf(stderr, "open error: %i\n", err);
+ }
+ return err;
+}
+
+int
+main(int argc, char **argv)
+{
+ struct pkgdb *db;
+ int err;
+
+ db = NULL;
+
+ err = (argc == 2 ? EPKG_OK : EPKG_FATAL);
+ if (err == EPKG_OK) {
+ err = pkg_init(NULL);
+ if (err != EPKG_OK)
+ fprintf(stderr, "could not parse config file\n");
+ } else
+ fprintf(stderr, "usage: %s name\n", argv[0]);
+
+ if (err == EPKG_OK)
+ err = getdb(&db);
+
+ if (err == EPKG_OK) {
+ struct pkgdb_it *it;
+
+ it = pkgdb_query(db, argv[1], MATCH_EXACT);
+ if (it == NULL)
+ printf("no local matches!\n");
+ else handle_it(it);
+
+ it = pkgdb_rquery(db, argv[1], MATCH_EXACT, NULL);
+ if (it == NULL)
+ printf("no remote matches!\n");
+ else handle_it(it);
+
+ printf("shutting down\n");
+ pkgdb_it_free(it);
+ pkgdb_close(db);
+ pkg_shutdown();
+ printf("shutdown\n");
+ }
+}
+
+
+void
+handle_it(struct pkgdb_it *it)
+{
+ int err;
+ struct pkg *match;
+
+ match = NULL;
+ do {
+ err = pkgdb_it_next(it, &match, PKG_LOAD_BASIC | PKG_LOAD_LICENSES);
+ if (err == EPKG_OK) {
+ const char *name;
+ struct pkg_license *lic;
+ int err2;
+
+ lic = NULL;
+
+ pkg_get(match, PKG_NAME, &name);
+ printf("name: %s\n", name);
+
+ do {
+ err2 = pkg_licenses(match, &lic);
+ if (err2 == EPKG_OK)
+ printf(" licence: %s\n", pkg_license_name(lic));
+ } while (err2 == EPKG_OK);
+ }
+
+ } while (err == EPKG_OK);
+
+ pkg_free(match);
+}
More information about the svn-soc-all
mailing list