Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Merge branch 'master' of etoilebsd.net:pkgng
Baptiste Daroussin committed 15 years ago
commit 9314810c1323faaddaa3f344a7351c7c28bed7a5
parent 7134c97
6 files changed +37 -55
modified libpkg/pkg.c
@@ -14,10 +14,10 @@

#define METADATA_GLOB "+{DEINSTALL,INSTALL,MTREE_DIRS}"

-
static int pkg_create_from_dir(char *, char *, struct archive *);
+
static int pkg_create_from_dir(char *, const char *, struct archive *);

static int
-
pkg_create_from_dir(char *path, char *root, struct archive *pkg_archive)
+
pkg_create_from_dir(char *path, const char *root, struct archive *pkg_archive)
{
	struct archive_entry *entry;
	char glob_pattern[MAXPATHLEN + sizeof(METADATA_GLOB)];
@@ -25,12 +25,10 @@ pkg_create_from_dir(char *path, char *root, struct archive *pkg_archive)
	int fd, j;
	size_t len, i = 0;
	char buf[BUFSIZ];
-
	struct stat st;
	cJSON *manifest, *files, *file;
	char *buffer;
	char manifestpath[MAXPATHLEN], fpath[MAXPATHLEN];
	char *filepath;
-
	void *filebuf;
	struct archive *ar;

	ar = archive_read_disk_new();
@@ -121,7 +119,7 @@ pkg_create_from_dir(char *path, char *root, struct archive *pkg_archive)
}

int
-
pkg_create(char *pkgname, pkg_formats format, char *outdir, char *rootdir)
+
pkg_create(char *pkgname, pkg_formats format, const char *outdir, const char *rootdir)
{
	struct pkgdb db;
	struct pkg *pkg;
@@ -159,10 +157,10 @@ pkg_create(char *pkgname, pkg_formats format, char *outdir, char *rootdir)
		return (-1);
	}

-
	TAILQ_FOREACH(pkg, &db.pkgs, entry) {
-
		printf("Creating package %s/%s-%s.%s\n", outdir, pkg->name, pkg->version, ext);
-
		snprintf(pkgpath, sizeof(pkgpath), "%s/%s-%s/", pkgdb_dir ? pkgdb_dir : PKG_DBDIR, pkg->name, pkg->version);
-
		snprintf(archive_path, sizeof(archive_path), "%s/%s-%s.%s", outdir, pkg->name, pkg->version, ext);
+
	PKGDB_FOREACH(pkg, &db) {
+
		printf("Creating package %s/%s.%s\n", outdir, pkg->name_version, ext);
+
		snprintf(pkgpath, sizeof(pkgpath), "%s/%s/", pkgdb_dir ? pkgdb_dir : PKG_DBDIR, pkg->name_version);
+
		snprintf(archive_path, sizeof(archive_path), "%s/%s.%s", outdir, pkg->name_version, ext);

		pkg_archive = archive_write_new();

modified libpkg/pkg.h
@@ -3,24 +3,27 @@

#include <cdb.h>
#include <stdio.h> /* for size_t */
-
#include <sys/queue.h>

struct pkg {
+
	char name_version[FILENAME_MAX];
	const char *name;
	const char *version;
	const char *origin;
	const char *comment;
	const char *desc;
-
	TAILQ_ENTRY(pkg) entry;
-
	TAILQ_HEAD(, pkg) deps;
+
	struct pkg **deps; /* null-terminated */
};

struct pkgdb {
-
	TAILQ_HEAD(, pkg) pkgs;
+
	struct pkg **pkgs; /* null-terminated */
	size_t count;
+
	size_t i;
	struct cdb db;
};

+
#define PKGDB_FOREACH(pkg, db) for ((db)->i = 0, (pkg) = (db)->pkgs[0]; \
+
		(pkg) != NULL; (pkg) = (db)->pkgs[++(db)->i])
+

typedef enum pkg_formats { TAR, TGZ, TBZ, TXZ } pkg_formats;
-
int pkg_create(char *, pkg_formats, char *, char *);
+
int pkg_create(char *, pkg_formats, const char *, const char *);
#endif
modified libpkg/pkgdb.c
@@ -22,11 +22,10 @@ pkgdb_free(struct pkgdb *db)
	cdb_free(&db->db);
	close(fd);

-
	while (!TAILQ_EMPTY(&db->pkgs)) {
-
		pkg = TAILQ_FIRST(&db->pkgs);
-
		TAILQ_REMOVE(&db->pkgs, pkg, entry);
+
	PKGDB_FOREACH(pkg, db)
		free(pkg);
-
	}
+

+
	free(db->pkgs);
}

size_t
modified libpkg/pkgdb_cache.c
@@ -104,7 +104,6 @@ pkg_idx_query(struct cdb *db, int idx)
		return NULL;

	pkg = malloc(sizeof(*pkg));
-
	TAILQ_INIT(&pkg->deps);
	db_get(pkg->name, db);

	pkg->version = db_query(db, PKGDB_VERSION, idx);
@@ -236,6 +235,7 @@ pkgdb_cache_rebuild(const char *pkg_dbdir, const char *cache_path)
				idx++;
			}
		}
+
		closedir(dir);
	}

	/* record packages len */
@@ -298,13 +298,9 @@ void
pkgdb_cache_init(struct pkgdb *db, const char *pattern)
{
	int count, i;
+
	size_t patlen = 0;
	struct pkg *pkg;
-
	struct pkg **pkgs;
-
	TAILQ_HEAD(, pkg) head;
-
	char *name;

-
	TAILQ_INIT(&head);
-
	TAILQ_INIT(&db->pkgs);
	db->count = 0;

	if (pkgdb_open(&db->db, O_RDONLY) == -1)
@@ -317,39 +313,28 @@ pkgdb_cache_init(struct pkgdb *db, const char *pattern)

	cdb_read(&db->db, &count, sizeof(count), cdb_datapos(&db->db));

+
	db->pkgs = calloc(count+1, sizeof(struct pkg *));
+

+
	if (pattern)
+
		patlen = strlen(pattern);
+

	for (i = 0; i < count; i++) {
		/* get package */
		if ((pkg = pkg_idx_query(&db->db, i)) == NULL)
			continue;

-
		if (asprintf(&name, "%s-%s", pkg->name, pkg->version) == -1) {
-
			warn("asprintf(%s-%s):", pkg->name, pkg->version);
-
			free(pkg);
-
			continue;
-
		}
+
		snprintf(pkg->name_version, FILENAME_MAX, "%s-%s", pkg->name, pkg->version);

-
		if (!pattern || strncmp(name, pattern, strlen(pattern)) == 0) {
-
			TAILQ_INSERT_TAIL(&head, pkg, entry);
-
			db->count++;
-
		}
+
		if (!pattern || strncmp(pkg->name_version, pattern, patlen) == 0)
+
			db->pkgs[db->count++] = pkg;
		else
			free(pkg);
-

-
		free(name);
	}

	/* sort packages */
-
	pkgs = calloc(db->count, sizeof(struct pkg));
-
	i = 0;
-
	TAILQ_FOREACH(pkg, &head, entry)
-
		pkgs[i++] = pkg;
-

-
	qsort(pkgs, db->count, sizeof(*pkgs), pkg_cmp);
-

-
	for (i = 0; i < (int)db->count; i++)
-
		TAILQ_INSERT_TAIL(&db->pkgs, pkgs[i], entry);
-

-
	free(pkgs);
+
	db->pkgs = realloc(db->pkgs, (db->count+1) * sizeof(struct pkg *));
+
	db->pkgs[db->count] = NULL;
+
	qsort(db->pkgs, db->count, sizeof(struct pkg *), pkg_cmp);

	return;
}
modified pkg/info.c
@@ -16,14 +16,14 @@ cmd_info(int argc, char **argv)

	if (pkgdb_count(&db) == 1) {
		/* one match */
-
		pkg = TAILQ_FIRST(&db.pkgs);
-
		printf("Information for %s-%s\n", pkg->name, pkg->version);
+
		pkg = db.pkgs[0];
+
		printf("Information for %s\n", pkg->name_version);
		printf("Comment:\n%s\n\n", pkg->comment);
		printf("Description:\n%s\n\n", pkg->desc);
	}
	else if (pkgdb_count(&db) > 1) {
-
		TAILQ_FOREACH(pkg, &db.pkgs, entry) {
-
			printf("%s-%s: %s\n", pkg->name, pkg->version, pkg->comment);
+
		PKGDB_FOREACH(pkg, &db) {
+
			printf("%s: %s\n", pkg->name_version, pkg->comment);
		}
	}

modified pkg/main.c
@@ -76,12 +76,9 @@ main(int argc, char **argv)

	if (ambiguous == 1) {
		warnx("Ambiguous command: %s, could be:", argv[1]);
-
		for (i = 0; cmd[i].name != NULL; i++) {
-
			if (strlen(cmd[i].name) < strlen(argv[1]))
-
				continue;
-
			if (strncmp(argv[1], cmd[i].name, strlen(argv[1])) == 0)
+
		for (i = 0; cmd[i].name != NULL; i++)
+
			if (strncmp(argv[1], cmd[i].name, len) == 0)
				warnx("\t%s",cmd[i].name);
-
		}
	}

	return (EX_USAGE);