Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Merge branch 'master' of etoilebsd.net:pkgng
jlaffaye committed 15 years ago
commit 513095ebe3577fec1a9e63765ca6d62863a3de10
parent 1acd7ff
6 files changed +51 -19
modified AUTHORS
@@ -1,2 +1,3 @@
Baptiste Daroussin <bapt@FreeBSD.org>
Julien Laffaye <jlaffaye@FreeBSD.org>
+
Philippe Pepiot <phil@philpep.org>
modified docs/cache_db.txt
@@ -21,6 +21,7 @@ note that packages are 0-indexed
(char*)$Nc				(char*)package N comment
(char*)$Nd				(char*)package N desc
(char*)$No				(char*)package N origin
+
(char*)$ND				(char**)[dep0_version, dep1_version ...]

__future__

@@ -28,8 +29,6 @@ __future__
		--> fetch from $PACKAGESITE/$path etc (useless ?)

(char*)$Ns				(char*)package N checksum (for a package)
-
(char*)$ND				(char*)"$dep0-$dep0_version $dep0-$dep0_version..." package N deps
-
						} multiple values for on key ? --> TODO benchmark
(char*)$NC				(char*)"$conflict0 $conflict1 ..." package N conflicts

Why N -> name
modified libpkg/pkg.h
@@ -4,6 +4,9 @@
#include <cdb.h>
#include <stdio.h> /* for size_t */

+
#define PKGERR_NOT_INSTALLED    (1<<0) /* dep not register */
+
#define PKGERR_VERSION_MISMATCH (1<<1) /* dep_version != require version */
+

struct pkg {
	char name_version[FILENAME_MAX];
	const char *name;
@@ -12,6 +15,7 @@ struct pkg {
	const char *comment;
	const char *desc;
	struct pkg **deps; /* null-terminated */
+
	unsigned char errors; /* PKGERR_* */
};

struct pkgdb {
modified libpkg/pkgdb_cache.c
@@ -179,13 +179,13 @@ static void
pkgdb_cache_rebuild(const char *pkg_dbdir, const char *cache_path)
{
	int fd;
-
	char *value;
	char tmppath[MAXPATHLEN];
	struct cdb_make cdb_make;
	DIR *dir;
	struct dirent *portsdir;
-
	cJSON *manifest, *node;
-
	int idx = 0;
+
	cJSON *manifest, *node, *array;
+
	int idx = 0, array_size, i;
+
	struct pkg pkg;

	snprintf(tmppath, sizeof(tmppath), "%s/pkgdb.cache-XXXXX", pkg_dbdir);

@@ -212,28 +212,45 @@ pkgdb_cache_rebuild(const char *pkg_dbdir, const char *cache_path)
				if (manifest == 0)
					continue;

-
				value = cJSON_GetObjectItem(manifest, "name")->valuestring;
+
				if ((node = cJSON_GetObjectItem(manifest, "name")) == NULL || node->valuestring == NULL)
+
					continue;
+
				pkg.name = node->valuestring;
+

+
				if ((node = cJSON_GetObjectItem(manifest, "version")) == NULL || node->valuestring == NULL)
+
					continue;
+
				pkg.version = node->valuestring;
+

+
				if ((node = cJSON_GetObjectItem(manifest, "comment")) == NULL || node->valuestring == NULL)
+
					continue;
+
				pkg.comment = node->valuestring;
+

+
				if ((node = cJSON_GetObjectItem(manifest, "origin")) == NULL || node->valuestring == NULL)
+
					continue;
+
				pkg.origin = node->valuestring;

				/* index -> name */
-
				cdb_make_add(&cdb_make, &idx, sizeof(idx),
-
						value, strlen(value)+1);
+
				cdb_make_add(&cdb_make, &idx, sizeof(idx), pkg.name, strlen(pkg.name)+1);
				/* name -> index */
-
				cdb_make_add(&cdb_make, value, strlen(value), &idx, sizeof(idx));
-

-
				value = cJSON_GetObjectItem(manifest, "version")->valuestring;
-
				db_add(&cdb_make, value, PKGDB_VERSION, idx);
+
				cdb_make_add(&cdb_make, pkg.name, strlen(pkg.name), &idx, sizeof(idx));

-
				if ((node = cJSON_GetObjectItem(manifest, "comment")) != NULL)
-
					db_add(&cdb_make, node->valuestring, PKGDB_COMMENT, idx);
+
				db_add(&cdb_make, pkg.version, PKGDB_VERSION, idx);
+
				db_add(&cdb_make, pkg.comment, PKGDB_COMMENT, idx);
+
				db_add(&cdb_make, pkg.origin, PKGDB_ORIGIN, idx);

-
				if ((node = cJSON_GetObjectItem(manifest, "desc")) != NULL)
+
				if ((node = cJSON_GetObjectItem(manifest, "desc")) != NULL && node->valuestring != NULL)
					db_add(&cdb_make, node->valuestring, PKGDB_DESC, idx);

-
				if ((node = cJSON_GetObjectItem(manifest, "origin")) != NULL)
-
					db_add(&cdb_make, node->valuestring, PKGDB_ORIGIN, idx);
+
				array = cJSON_GetObjectItem(manifest, "deps");

-
				cJSON_Delete(manifest);
+
				if (array && (array_size = cJSON_GetArraySize(array)) > 0) {
+
					for (i = 0; i < array_size; i++) {
+
						if ((node = cJSON_GetArrayItem(array, i)) != NULL && node->valuestring != NULL) {
+
							db_add(&cdb_make, node->valuestring, PKGDB_DEPS, idx);
+
						}
+
					}
+
				}

+
				cJSON_Delete(manifest);
				idx++;
			}
		}
modified libpkg/pkgdb_cache.h
@@ -6,6 +6,7 @@
#define PKGDB_COMMENT "%dc"
#define PKGDB_DESC    "%dd"
#define PKGDB_ORIGIN  "%do"
+
#define PKGDB_DEPS    "%dD"
#define PKGDB_COUNT   "count"

/* quick db_get */
modified pkg/create.c
@@ -4,7 +4,17 @@
#include <pkgdb.h>

#include "create.h"
-
#define args
+

+
/*
+
 * options:
+
 * -x: regex
+
 * -g: globbing
+
 * -b: backup (create from installed pkg)
+
 * -r: rootdir for the package
+
 * -m: path to dir where to find the +MANIFEST
+
 * -f <format>: format could be txz, tgz, tbz or tar
+
 * -o: output directory where to create packages by default ./ is used
+
 */

int
cmd_create(int argc, char **argv)