Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Merge branch 'master' into multi-repos
Marin Atanasov Nikolov committed 14 years ago
commit 70f485ec569dd7deedc642452861440cbeadb11a
parent 05199de
3 files changed +99 -15
modified external/sqlite/Makefile
@@ -19,7 +19,20 @@ CFLAGS+= -DSQLITE_OMIT_AUTHORIZATION \
		-DSQLITE_OMIT_PROGRESS_CALLBACK \
		-DSQLITE_OMIT_TCL_VARIABLE \
		-DSQLITE_OMIT_UTF16 \
+
		-DSQLITE_OMIT_CAT \
+
		-DSQLITE_OMIT_CHECK \
+
		-DSQLITE_OMIT_COMPOUND_SELECT \
+
		-DSQLITE_OMIT_AUTOINIT \
+
		-DSQLITE_OMIT_COMPILEOPTION_DIAGS \
+
		-DSQLITE_OMIT_INCRBLOB \
+
		-DSQLITE_OMIT_INTEGRITY_CHECK \
+
		-DSQLITE_OMIT_BLOB_LITERAL \
+
		-DSQLITE_OMIT_BUILTIN_TEST \
+
		-DSQLITE_OMIT_MEMORYDB \
+
		-DSQLITE_OMIT_SHARED_CACHE \
+
		-DSQLITE_OMIT_TEMPDB \
		-DUSE_PREAD \
+
		-DSQLITE_THREADSAFE=1 \
		-DNDEBUG

NO_MAN=		true
modified libpkg/packing.c
@@ -90,8 +90,7 @@ packing_append_file(struct packing *pack, const char *filepath, const char *newp
		retcode = EPKG_FATAL;
		goto cleanup;
	}
-
	retcode = archive_read_disk_entry_from_file(pack->aread, pack->entry, -1,
-
												&st);
+
	retcode = archive_read_disk_entry_from_file(pack->aread, pack->entry, -1, &st);
	if (retcode != ARCHIVE_OK) {
		EMIT_PKG_ERROR("%s: %s", filepath, archive_error_string(pack->aread));
		retcode = EPKG_FATAL;
modified libpkg/pkgdb.c
@@ -17,6 +17,8 @@
#include "pkgdb.h"
#include "pkg_util.h"

+
#define DBVERSION 1
+

static struct pkgdb_it * pkgdb_it_new(struct pkgdb *, sqlite3_stmt *, int);
static void pkgdb_regex(sqlite3_context *, int, sqlite3_value **, int);
static void pkgdb_regex_basic(sqlite3_context *, int, sqlite3_value **);
@@ -25,6 +27,7 @@ static void pkgdb_regex_delete(void *);
static void pkgdb_pkglt(sqlite3_context *, int, sqlite3_value **);
static void pkgdb_pkggt(sqlite3_context *, int, sqlite3_value **);
static int get_pragma(sqlite3 *, const char *, int64_t *);
+
static int pkgdb_upgrade(sqlite3 *);

static void
pkgdb_regex(sqlite3_context *ctx, int argc, sqlite3_value **argv, int reg_type)
@@ -103,6 +106,61 @@ pkgdb_pkggt(sqlite3_context *ctx, int argc, sqlite3_value **argv)
	pkgdb_pkgcmp(ctx, argc, argv, 1);
}

+
static int
+
pkgdb_upgrade(sqlite3 *sdb)
+
{
+
	int64_t db_version;
+
	struct sbuf *sql;
+
	char *errmsg;
+

+
	get_pragma(sdb, "PRAGMA user_version;", &db_version);
+

+
	if (db_version == DBVERSION)
+
		return (EPKG_OK);
+
	else if (db_version > DBVERSION)
+
		return (EPKG_FATAL);
+

+
	sql = sbuf_new_auto();
+

+
	if (db_version < 1) {
+
		/* New in version 1 */
+
		sbuf_cat(sql,
+
			"CREATE TABLE licenses ("
+
				"id INTEGER PRIMARY KEY, "
+
				"license TEXT NOT NULL UNIQUE "
+
			");"
+
			"CREATE TABLE pkg_licenses_assoc ("
+
				"package_id INTEGER REFERENCES packages(id) ON DELETE CASCADE"
+
					" ON UPDATE CASCADE, "
+
				"license_id INTEGER REFERENCES licenses(id) ON DELETE RESTRICT"
+
					" ON UPDATE RESTRICT, "
+
				"PRIMARY KEY (package_id, license_id)"
+
			");"
+
			"CREATE VIEW pkg_licenses AS SELECT origin, license FROM packages "
+
			"INNER JOIN pkg_licenses_assoc ON packages.id = pkg_licenses_assoc.package_id "
+
			"INNER JOIN licenses ON pkg_licenses_assoc.license_id = licenses.id;"
+
			"CREATE TRIGGER license_insert INSTEAD OF INSERT ON pkg_licenses "
+
			"FOR EACH ROW BEGIN "
+
				"INSERT OR IGNORE INTO licenses(license) values (NEW.license);"
+
				"INSERT INTO pkg_licenses_assoc(package_id, category_id) VALUES "
+
					"((SELECT id FROM packages where origin = NEW.origin), "
+
					"(SELECT id FROM categories WHERE name = NEW.name));"
+
			"END;"
+
			"PRAGMA user_version = 1;");
+
		sbuf_finish(sql);
+
	}
+

+

+
	if (sqlite3_exec(sdb, sbuf_data(sql), NULL, NULL, &errmsg) != SQLITE_OK) {
+
		EMIT_PKG_ERROR("sqlite: %s", errmsg);
+
		sqlite3_free(errmsg);
+
		return (EPKG_FATAL);
+
	}
+

+
	return (EPKG_OK);
+

+
}
+

/*
 * in the database : 
 * scripts.type can be:
@@ -237,7 +295,30 @@ pkgdb_init(sqlite3 *sdb)
		"INSERT INTO pkg_categories_assoc (package_id, category_id) VALUES "
			"((SELECT id FROM packages where origin = NEW.origin), "
			"(SELECT id FROM categories WHERE name = NEW.name));"
-
	"END;";
+
	"END;"
+
	"CREATE TABLE licenses ("
+
		"id INTEGER PRIMARY KEY, "
+
		"license TEXT NOT NULL UNIQUE "
+
	");"
+
	"CREATE TABLE pkg_licenses_assoc ("
+
		"package_id INTEGER REFERENCES packages(id) ON DELETE CASCADE"
+
			" ON UPDATE CASCADE, "
+
		"license_id INTEGER REFERENCES licenses(id) ON DELETE RESTRICT"
+
			" ON UPDATE RESTRICT, "
+
		"PRIMARY KEY (package_id, license_id)"
+
	");"
+
	"CREATE VIEW pkg_licenses AS SELECT origin, license FROM packages "
+
	"INNER JOIN pkg_licenses_assoc ON packages.id = pkg_licenses_assoc.package_id "
+
	"INNER JOIN licenses ON pkg_licenses_assoc.license_id = licenses.id;"
+
	"CREATE TRIGGER license_insert INSTEAD OF INSERT ON pkg_licenses "
+
	"FOR EACH ROW BEGIN "
+
		"INSERT OR IGNORE INTO licenses(license) values (NEW.license);"
+
		"INSERT INTO pkg_licenses_assoc(package_id, category_id) VALUES "
+
			"((SELECT id FROM packages where origin = NEW.origin), "
+
			"(SELECT id FROM categories WHERE name = NEW.name));"
+
	"END;"
+
	"PRAGMA user_version = 1;"
+
	;

	if (sqlite3_exec(sdb, sql, NULL, NULL, &errmsg) != SQLITE_OK) {
		EMIT_PKG_ERROR("sqlite: %s", errmsg);
@@ -282,12 +363,14 @@ pkgdb_open(struct pkgdb **db, pkgdb_t type, const char *dbfile)
		}
	}

+
	sqlite3_initialize();
	if (sqlite3_open(localpath, &(*db)->sqlite) != SQLITE_OK) {
		ERROR_SQLITE((*db)->sqlite);
		free(*db);
		return (EPKG_FATAL);
	}

+
	pkgdb_upgrade((*db)->sqlite);
	if (type == PKGDB_REMOTE) {
		snprintf(remotepath, sizeof(remotepath), "%s/%s", dbdir, dbfile);

@@ -353,7 +436,7 @@ pkgdb_close(struct pkgdb *db)

		sqlite3_close(db->sqlite);
	}
-

+
	sqlite3_shutdown();
	free(db);
}

@@ -1126,8 +1209,6 @@ pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg)
			ERROR_SQLITE(s);
			goto cleanup;
		}
-

-
		sqlite3_reset(stmt_dep);
	}

	/*
@@ -1147,8 +1228,6 @@ pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg)
			ERROR_SQLITE(s);
			goto cleanup;
		}
-

-
		sqlite3_reset(stmt_conflict);
	}

	/*
@@ -1175,7 +1254,6 @@ pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg)
			}
			goto cleanup;
		}
-
		sqlite3_reset(stmt_file);
	}

	/*
@@ -1199,7 +1277,6 @@ pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg)
				ERROR_SQLITE(s);
			goto cleanup;
		}
-
		sqlite3_reset(stmt_dirs);
	}

	/*
@@ -1223,7 +1300,6 @@ pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg)
				ERROR_SQLITE(s);
			goto cleanup;
		}
-
		sqlite3_reset(stmt_cat);
	}

	/*
@@ -1244,8 +1320,6 @@ pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg)
			ERROR_SQLITE(s);
			goto cleanup;
		}
-

-
		sqlite3_reset(stmt_script);
	}

	/*
@@ -1266,8 +1340,6 @@ pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg)
			ERROR_SQLITE(s);
			goto cleanup;
		}
-

-
		sqlite3_reset(stmt_option);
	}

	retcode = EPKG_OK;