Radish alpha
H
HardenedBSD Package Manager
Radicle
Git (anonymous pull)
Log in to clone via SSH
Record deps in cache, save create cache and add errors to struct pkg
Philippe Pepiot committed 15 years ago
commit baccb555031710548e3277a4c31eeaab71b7f57a
parent 3112b1571c9c03ae965efe2e32077cb3fbdbca54
4 files changed +39 -18
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
@@ -177,13 +177,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);

@@ -210,28 +210,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 */