Radish alpha
H
HardenedBSD Package Manager
Radicle
Git (anonymous pull)
Log in to clone via SSH
Use integer fk in repo.db
jlaffaye committed 15 years ago
commit 8d57ac9c12841917d787c580d702499c62e13647
parent fab8b0369112a2a22df4ec19f51a392d5c9edd90
2 files changed +16 -14
modified libpkg/pkg.c
@@ -220,14 +220,16 @@ pkg_open(struct pkg **pkg_p, const char *path)
{
	struct archive *a;
	struct archive_entry *ae;
-
	int retcode;
+
	int ret;

-
	retcode = pkg_open2(pkg_p, &a, &ae, path);
+
	ret = pkg_open2(pkg_p, &a, &ae, path);

-
	if (retcode == EPKG_OK || retcode == EPKG_END)
-
		archive_read_finish(a);
+
	if (ret != EPKG_OK && ret != EPKG_END)
+
		return (EPKG_FATAL);

-
	return (retcode);
+
	archive_read_finish(a);
+

+
	return (EPKG_OK);
}

int
@@ -345,7 +347,7 @@ pkg_open2(struct pkg **pkg_p, struct archive **a, struct archive_entry **ae, con
		retcode = EPKG_END;

	cleanup:
-
	if (retcode != EPKG_OK) {
+
	if (retcode != EPKG_OK && retcode != EPKG_END) {
		if (*a != NULL)
			archive_read_finish(*a);
		*a = NULL;
@@ -423,7 +425,7 @@ pkg_setflatsize(struct pkg *pkg, int64_t size)
	if (pkg == NULL)
		return (ERROR_BAD_ARG("pkg"));

-
	if (size <= 0)
+
	if (size < 0)
		return (ERROR_BAD_ARG("size"));

	pkg->flatsize = size;
@@ -572,10 +574,6 @@ pkg_addfile(struct pkg *pkg, const char *path, const char *sha256)
	if (path == NULL || path[0] == '\0')
		return (ERROR_BAD_ARG("path"));

-
	/* sha256 can be NULL, but if it is defined it must be a valid sha256 */
-
	if (sha256 != NULL && strlen(sha256) != 64)
-
		return (ERROR_BAD_ARG("sha256"));
-

	pkg_file_new(&file);

	strlcpy(file->path, path, sizeof(file->path));
modified libpkg/pkg_repo.c
@@ -27,6 +27,7 @@ pkg_create_repo(char *path, void (progress)(struct pkg *pkg, void *data), void *
	sqlite3 *sqlite = NULL;
	sqlite3_stmt *stmt_deps = NULL;
	sqlite3_stmt *stmt_pkg = NULL;
+
	int64_t package_id;
	char *errmsg = NULL;
	int retcode = EPKG_OK;

@@ -37,7 +38,8 @@ pkg_create_repo(char *path, void (progress)(struct pkg *pkg, void *data), void *

	const char initsql[] = ""
		"CREATE TABLE packages ("
-
			"origin TEXT PRIMARY KEY,"
+
			"id INTEGER PRIMARY KEY,"
+
			"origin TEXT UNIQUE,"
			"name TEXT,"
			"version TEXT,"
			"comment TEXT,"
@@ -54,7 +56,7 @@ pkg_create_repo(char *path, void (progress)(struct pkg *pkg, void *data), void *
			"origin TEXT,"
			"name TEXT,"
			"version TEXT,"
-
			"package_id TEXT REFERENCES packages(origin),"
+
			"package_id INTEGER REFERENCES packages(id),"
			"PRIMARY KEY (package_id, origin)"
		");"
		"CREATE INDEX deps_origin ON deps (origin);"
@@ -158,12 +160,14 @@ pkg_create_repo(char *path, void (progress)(struct pkg *pkg, void *data), void *
		}
		sqlite3_reset(stmt_pkg);

+
		package_id = sqlite3_last_insert_rowid(sqlite);
+

		deps = pkg_deps(pkg);
		for (i = 0; deps[i] != NULL; i++) {
			sqlite3_bind_text(stmt_deps, 1, pkg_get(deps[i], PKG_ORIGIN), -1, SQLITE_STATIC);
			sqlite3_bind_text(stmt_deps, 2, pkg_get(deps[i], PKG_NAME), -1, SQLITE_STATIC);
			sqlite3_bind_text(stmt_deps, 3, pkg_get(deps[i], PKG_VERSION), -1, SQLITE_STATIC);
-
			sqlite3_bind_text(stmt_deps, 4, pkg_get(pkg, PKG_ORIGIN), -1, SQLITE_STATIC);
+
			sqlite3_bind_int64(stmt_deps, 4, package_id);

			if (sqlite3_step(stmt_deps) != SQLITE_DONE) {
				retcode = ERROR_SQLITE(sqlite);