Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
pkg_manifest abstraction via the pkg struct.
jlaffaye committed 15 years ago
commit df670b867eef2d5e714a04adde62103acce50228
parent 62437a2
5 files changed +68 -44
modified libpkg/pkg.c
@@ -1,22 +1,25 @@
+
#include <assert.h>
+

#include "pkgdb.h"
#include "pkgdb_cache.h"
+
#include "pkg_manifest.h"

static const char *
pkg_getattr(struct pkg *pkg, const char **val, const char *attr)
{
-
	if (*val == NULL)
-
		*val = pkgdb_cache_getattr(pkg, attr);
+
	if (*val == NULL) {
+
		if (pkg->m != NULL)
+
			*val = pkg_manifest_value(pkg->m, attr);
+
		else if (pkg->pdb != NULL)
+
			*val = pkgdb_cache_getattr(pkg, attr);
+
		/*else
+
			TODO: error */
+
	}

	return (*val);
}

const char *
-
pkg_namever(struct pkg *pkg)
-
{
-
	return (pkg_getattr(pkg, &pkg->namever, "namever"));
-
}
-

-
const char *
pkg_name(struct pkg *pkg)
{
	return (pkg_getattr(pkg, &pkg->name, "name"));
@@ -49,14 +52,30 @@ pkg_origin(struct pkg *pkg)
int
pkg_dep(struct pkg *pkg, struct pkg *dep)
{
+
	pkg_reset(dep);
	/* call backend dep query */
-
	return (pkgdb_cache_dep(pkg, dep));
+
	if (pkg-> m != NULL) {
+
		if (pkg->idep == 0) {
+
			pkg_manifest_dep_init(pkg->m);
+
			pkg->idep++;
+
		}
+
		if (pkg_manifest_dep_next(pkg->m) == 0) {
+
			dep->name = pkg_manifest_dep_name(pkg->m);
+
			dep->version = pkg_manifest_dep_version(pkg->m);
+
			return (0);
+
		} else {
+
			return (-1);
+
		}
+
	} else if (pkg->pdb != NULL)
+
		return (pkgdb_cache_dep(pkg, dep));
+
	else
+
		return (-1);
+
 		/*TODO: error */
}

void
pkg_reset(struct pkg *pkg)
{
-
	pkg->namever = NULL;
	pkg->name = NULL;
	pkg->version = NULL;
	pkg->origin = NULL;
@@ -66,4 +85,15 @@ pkg_reset(struct pkg *pkg)
	pkg->idep = 0;
	pkg->irdep = 0;
	pkg->pdb = NULL;
+
	pkg->m = NULL;
+
}
+

+
void
+
pkg_from_manifest(struct pkg *pkg, struct pkg_manifest *m)
+
{
+
	assert(pkg != NULL);
+
	assert(m != NULL);
+

+
	pkg_reset(pkg);
+
	pkg->m = m;
}
modified libpkg/pkg.h
@@ -7,6 +7,7 @@

/* Opaque type */
struct cdb;
+
struct pkg_manifest;

typedef enum _match_t {
	MATCH_ALL,
@@ -28,7 +29,6 @@ struct pkgdb {
};

struct pkg {
-
	const char *namever;
	const char *name;
	const char *version;
	const char *origin;
@@ -38,10 +38,12 @@ struct pkg {
	size_t idep; /* iterator deps */
	size_t irdep; /* iterator rdeps */
	struct pkgdb *pdb;
+
	struct pkg_manifest *m;
};

+
void pkg_from_manifest(struct pkg *, struct pkg_manifest *);
+

void pkg_reset(struct pkg *);
-
const char *pkg_namever(struct pkg *);
const char *pkg_name(struct pkg *);
const char *pkg_version(struct pkg *);
const char *pkg_comment(struct pkg *);
modified libpkg/pkg_create.c
@@ -116,6 +116,7 @@ pkg_create(char *pkgname, pkg_formats format, const char *outdir, const char *ro
	struct pkgdb db;
	struct pkg pkg;
	const char *pkg_dbdir;
+
	char namever[FILENAME_MAX];
	char pkgpath[MAXPATHLEN];
	struct archive *pkg_archive;
	char archive_path[MAXPATHLEN];
@@ -155,9 +156,10 @@ pkg_create(char *pkgname, pkg_formats format, const char *outdir, const char *ro
		return (-1);
	}

-
	printf("Creating package %s/%s.%s\n", outdir, pkg_namever(&pkg), ext);
-
	snprintf(pkgpath, sizeof(pkgpath), "%s/%s/", pkg_dbdir, pkg_namever(&pkg));
-
	snprintf(archive_path, sizeof(archive_path), "%s/%s.%s", outdir, pkg_namever(&pkg), ext);
+
	snprintf(namever, sizeof(namever), "%s-%s", pkg_name(&pkg), pkg_version(&pkg));
+
	printf("Creating package %s/%s.%s\n", outdir, namever, ext);
+
	snprintf(pkgpath, sizeof(pkgpath), "%s/%s/", pkg_dbdir, namever);
+
	snprintf(archive_path, sizeof(archive_path), "%s/%s.%s", outdir, namever, ext);

	pkg_archive = archive_write_new();

modified libpkg/pkgdb_cache.c
@@ -19,7 +19,6 @@
#include "pkg_manifest.h"
#include "pkgdb_cache.h"

-
#define PKGDB_NAMEVER	"%" PRId32 "nv"
#define PKGDB_NAME		"%" PRId32 "n"
#define PKGDB_VERSION	"%" PRId32 "v"
#define PKGDB_COMMENT	"%" PRId32 "c"
@@ -43,7 +42,6 @@ pkgdb_cache_getattr(struct pkg *pkg, const char *attr)
		const char *attr;
		const char *key;
	} attr_key_map[] = {
-
		{"namever", PKGDB_NAMEVER},
		{"name",	PKGDB_NAME},
		{"version",	PKGDB_VERSION},
		{"comment", PKGDB_COMMENT},
@@ -69,7 +67,7 @@ pkgdb_cache_query(struct pkgdb *db, struct pkg *pkg)
	/* If we are looking for an exact match, no needs to loop over all entries */
	if (db->match == MATCH_EXACT) {
		if (db->i == 0 && (idx = pkgdb_cache_vget(db->cdb, "%s", db->pattern)) != NULL) {
-
			pkg->namever = db->pattern;
+
			pkg->name = db->pattern;
			pkg->idx = *idx;
			pkg->pdb = db;
			db->i++;
@@ -78,8 +76,8 @@ pkgdb_cache_query(struct pkgdb *db, struct pkg *pkg)
			return (-1);
	}

-
	while ((pkg->namever = pkgdb_cache_vget(db->cdb, PKGDB_NAMEVER, db->i)) != NULL) {
-
		if (db->match == MATCH_ALL || pkgdb_match(db, pkg->namever) == 0) {
+
	while ((pkg->name = pkgdb_cache_vget(db->cdb, PKGDB_NAME, db->i)) != NULL) {
+
		if (db->match == MATCH_ALL || pkgdb_match(db, pkg->name) == 0) {
			pkg->idx = db->i++;
			pkg->pdb = db;
			return (0);
@@ -166,10 +164,8 @@ pkgdb_cache_dep(struct pkg *pkg, struct pkg *dep)
	const int32_t *idx;
	int ret = -1;

-
	pkg_reset(dep);
-

-
	if ((dep->namever = pkgdb_cache_vget(pkg->pdb->cdb, PKGDB_DEPS, pkg->idx, pkg->idep)) != NULL &&
-
		(idx = pkgdb_cache_vget(pkg->pdb->cdb, "%s", dep->namever)) != NULL) {
+
	if ((dep->name = pkgdb_cache_vget(pkg->pdb->cdb, PKGDB_DEPS, pkg->idx, pkg->idep)) != NULL &&
+
		(idx = pkgdb_cache_vget(pkg->pdb->cdb, "%s", dep->name)) != NULL) {
		dep->idx = *idx;
		dep->pdb = pkg->pdb;
		pkg->idep++;
@@ -184,9 +180,10 @@ pkgdb_cache_rebuild(struct pkgdb *db, const char *pkg_dbdir, const char *cache_p
	int fd;
	char tmppath[MAXPATHLEN];
	char mpath[MAXPATHLEN];
-
	char namever[FILENAME_MAX];
	struct dirent **pkg_dirs;
	struct cdb_make cdb;
+
	struct pkg pkg;
+
	struct pkg dep;
	struct pkg_manifest *m;
	int32_t nb_pkg;
	int32_t idx;
@@ -221,26 +218,19 @@ pkgdb_cache_rebuild(struct pkgdb *db, const char *pkg_dbdir, const char *cache_p
				continue;
			}
		}
+
		pkg_from_manifest(&pkg, m);

-
		snprintf(namever, sizeof(namever), "%s-%s", pkg_manifest_value(m, "name"),
-
				 pkg_manifest_value(m, "version"));
-

-
		pkgdb_cache_add_int(&cdb, namever, idx);
-
		pkgdb_cache_add_int(&cdb, pkg_manifest_value(m, "name"), idx);
+
		pkgdb_cache_add_int(&cdb, pkg_name(&pkg), idx);

-
		pkgdb_cache_add_string(&cdb, namever, PKGDB_NAMEVER, idx);
-
		pkgdb_cache_add_string(&cdb, pkg_manifest_value(m, "name"), PKGDB_NAME, idx);
-
		pkgdb_cache_add_string(&cdb, pkg_manifest_value(m, "version"), PKGDB_VERSION, idx);
-
		pkgdb_cache_add_string(&cdb, pkg_manifest_value(m, "comment"), PKGDB_COMMENT, idx);
-
		pkgdb_cache_add_string(&cdb, pkg_manifest_value(m, "origin"), PKGDB_ORIGIN, idx);
-
		pkgdb_cache_add_string(&cdb, pkg_manifest_value(m, "desc"), PKGDB_DESC, idx);
+
		pkgdb_cache_add_string(&cdb, pkg_name(&pkg), PKGDB_NAME, idx);
+
		pkgdb_cache_add_string(&cdb, pkg_version(&pkg), PKGDB_VERSION, idx);
+
		pkgdb_cache_add_string(&cdb, pkg_comment(&pkg), PKGDB_COMMENT, idx);
+
		pkgdb_cache_add_string(&cdb, pkg_origin(&pkg), PKGDB_ORIGIN, idx);
+
		pkgdb_cache_add_string(&cdb, pkg_desc(&pkg), PKGDB_DESC, idx);

		idep = 0;
-
		pkg_manifest_dep_init(m);
-
		while (pkg_manifest_dep_next(m) == 0) {
-
			snprintf(namever, sizeof(namever), "%s-%s", pkg_manifest_dep_name(m),
-
					 pkg_manifest_dep_version(m));
-
			pkgdb_cache_add_string(&cdb, namever, PKGDB_DEPS, idx, idep);
+
		while (pkg_dep(&pkg, &dep) == 0) {
+
			pkgdb_cache_add_string(&cdb, pkg_name(&dep), PKGDB_DEPS, idx, idep);
			idep++;
		}

modified pkg/info.c
@@ -59,14 +59,14 @@ cmd_info(int argc, char **argv)
	while (pkgdb_query(&db, &pkg) == 0) {
		if (opt & INFO_PRINT_DEP) {

-
			printf("%s depends on:\n", pkg_namever(&pkg));
+
			printf("%s-%s depends on:\n", pkg_name(&pkg), pkg_version(&pkg));

			while (pkg_dep(&pkg, &dep) == 0) {
-
				printf("%s\n", pkg_namever(&dep));
+
				printf("%s-%s\n", pkg_name(&dep), pkg_version(&pkg));
			}

		} else {
-
			printf("%s: %s\n", pkg_namever(&pkg), pkg_comment(&pkg));
+
			printf("%s-%s: %s\n", pkg_name(&pkg), pkg_version(&pkg), pkg_comment(&pkg));
		}
	}