Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Add new schema for provides and conflicts.
Vsevolod Stakhov committed 12 years ago
commit c385c9b351217ca674322ba7d49be538042daed6
parent 8a25c92
5 files changed +95 -4
modified libpkg/pkg_repo.c
@@ -859,6 +859,13 @@ pkg_finish_repo(char *path, pem_password_cb *password_cb, char *rsa_key_path, bo
		goto cleanup;
	}

+
	snprintf(repo_path, sizeof(repo_path), "%s/%s", path, repo_conflicts_file);
+
	snprintf(repo_archive, sizeof(repo_archive), "%s/%s", path, repo_conflicts_archive);
+
	if (pack_db(repo_conflicts_file, repo_archive, repo_path, rsa) != EPKG_OK) {
+
		ret = EPKG_FATAL;
+
		goto cleanup;
+
	}
+

	/* Now we need to set the equal mtime for all archives in the repo */
	snprintf(repo_archive, sizeof(repo_archive), "%s/%s.txz", path, repo_db_archive);
	if (stat(repo_archive, &st) == 0) {
modified libpkg/pkgdb.c
@@ -71,7 +71,7 @@
*/

#define DB_SCHEMA_MAJOR	0
-
#define DB_SCHEMA_MINOR	19
+
#define DB_SCHEMA_MINOR	20

#define DBVERSION (DB_SCHEMA_MAJOR * 1000 + DB_SCHEMA_MINOR)

@@ -600,6 +600,23 @@ pkgdb_init(sqlite3 *sdb)
		      " ON DELETE CASCADE ON UPDATE RESTRICT,"
		"UNIQUE (package_id, tag_id)"
	");"
+
	"CREATE TABLE pkg_conflicts ("
+
	    "package_id INTEGER NOT NULL REFERENCES packages(id)"
+
	    "  ON DELETE CASCADE ON UPDATE CASCADE,"
+
	    "conflict_id INTEGER NOT NULL,"
+
	    "UNIQUE(package_id, conflict_id)"
+
	");"
+
	"CREATE TABLE provides("
+
	"    id INTEGER PRIMARY KEY,"
+
	"    provide TEXT NOT NULL"
+
	");"
+
	"CREATE TABLE pkg_provides ("
+
	    "package_id INTEGER NOT NULL REFERENCES packages(id)"
+
	    "  ON DELETE CASCADE ON UPDATE CASCADE,"
+
	    "provide_id INTEGER NOT NULL REFERENCES provides(id)"
+
	    "  ON DELETE RESTRICT ON UPDATE RESTRICT,"
+
	    "UNIQUE(package_id, provide_id)"
+
	");"

	/* Mark the end of the array */

@@ -618,6 +635,8 @@ pkgdb_init(sqlite3 *sdb)
	"CREATE INDEX pkg_directories_directory_id ON pkg_directories (directory_id);"
	"CREATE INDEX pkg_annotation_package_id ON pkg_annotation(package_id);"
	"CREATE INDEX pkg_digest_id ON packages(origin, manifestdigest);"
+
	"CREATE INDEX pkg_conflicts_id ON pkg_conflicts(package_id);"
+
	"CREATE INDEX pkg_provides_id ON pkg_provides(package_id);"

	"CREATE VIEW pkg_shlibs AS SELECT * FROM pkg_shlibs_required;"
	"CREATE TRIGGER pkg_shlibs_update "
modified libpkg/pkgdb_repo.c
@@ -60,7 +60,7 @@
/* The package repo schema minor revision.
   Minor schema changes don't prevent older pkgng
   versions accessing the repo. */
-
#define REPO_SCHEMA_MINOR 5
+
#define REPO_SCHEMA_MINOR 6

#define REPO_SCHEMA_VERSION (REPO_SCHEMA_MAJOR * 1000 + REPO_SCHEMA_MINOR)

modified libpkg/private/db_upgrades.h
@@ -402,6 +402,25 @@ static struct db_upgrades {
		"FROM oldpkgs;"
	"DROP TABLE oldpkgs;"
	},
+
	{20,
+
	"CREATE TABLE pkg_conflicts ("
+
	    "package_id INTEGER NOT NULL REFERENCES packages(id)"
+
	    "  ON DELETE CASCADE ON UPDATE CASCADE,"
+
	    "conflict_id INTEGER NOT NULL,"
+
	    "UNIQUE(package_id, conflict_id)"
+
	");"
+
	"CREATE TABLE provides("
+
	"    id INTEGER PRIMARY KEY,"
+
	"    provide TEXT NOT NULL"
+
	");"
+
	"CREATE TABLE pkg_provides ("
+
	    "package_id INTEGER NOT NULL REFERENCES packages(id)"
+
	    "  ON DELETE CASCADE ON UPDATE CASCADE,"
+
	    "provide_id INTEGER NOT NULL REFERENCES provides(id)"
+
	    "  ON DELETE RESTRICT ON UPDATE RESTRICT,"
+
	    "UNIQUE(package_id, provide_id)"
+
	");"
+
	},

	/* Mark the end of the array */
	{ -1, NULL }
modified libpkg/private/repodb.h
@@ -2,6 +2,7 @@
 * Copyright (c) 2011-2012 Baptiste Daroussin <bapt@FreeBSD.org>
 * Copyright (c) 2011-2012 Julien Laffaye <jlaffaye@FreeBSD.org>
 * Copyright (c) 2013 Matthew Seaman <matthew@FreeBSD.org>
+
 * Copyright (c) 2013 Vsevolod Stakhov <vsevolod@FreeBSD.org>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
@@ -202,6 +203,23 @@ static const char initsql[] = ""
	    " ON DELETE CASCADE ON UPDATE RESTRICT,"
	    "UNIQUE (package_id, tag_id)"
	");"
+
	"CREATE TABLE pkg_conflicts ("
+
	    "package_id INTEGER NOT NULL REFERENCES packages(id)"
+
	    "  ON DELETE CASCADE ON UPDATE CASCADE,"
+
	    "conflict_id INTEGER NOT NULL,"
+
	    "UNIQUE(package_id, conflict_id)"
+
	");"
+
	"CREATE TABLE provides("
+
	"    id INTEGER PRIMARY KEY,"
+
	"    provide TEXT NOT NULL"
+
	");"
+
	"CREATE TABLE pkg_provides ("
+
	    "package_id INTEGER NOT NULL REFERENCES packages(id)"
+
	    "  ON DELETE CASCADE ON UPDATE CASCADE,"
+
	    "provide_id INTEGER NOT NULL REFERENCES provides(id)"
+
	    "  ON DELETE RESTRICT ON UPDATE RESTRICT,"
+
	    "UNIQUE(package_id, provide_id)"
+
	");"
	"PRAGMA user_version=%d;"
	;

@@ -281,6 +299,27 @@ static const struct repo_changes repo_upgrades[] = {
	 "DROP TABLE pkg_abstract;"
	 "DROP TABLE abstract;"
	},
+
	{2005,
+
	 2006,
+
	 "Add conflicts and provides",
+
	"CREATE TABLE %Q.pkg_conflicts ("
+
	    "package_id INTEGER NOT NULL REFERENCES packages(id)"
+
	    "  ON DELETE CASCADE ON UPDATE CASCADE,"
+
	    "conflict_id INTEGER NOT NULL,"
+
	    "UNIQUE(package_id, conflict_id)"
+
	");"
+
	"CREATE TABLE %Q.provides("
+
	"    id INTEGER PRIMARY KEY,"
+
	"    provide TEXT NOT NULL"
+
	");"
+
	"CREATE TABLE %Q.pkg_provides ("
+
	    "package_id INTEGER NOT NULL REFERENCES packages(id)"
+
	    "  ON DELETE CASCADE ON UPDATE CASCADE,"
+
	    "provide_id INTEGER NOT NULL REFERENCES provides(id)"
+
	    "  ON DELETE RESTRICT ON UPDATE RESTRICT,"
+
	    "UNIQUE(package_id, provide_id)"
+
	");"
+
	},
	/* Mark the end of the array */
	{ -1, -1, NULL, NULL, }

@@ -289,6 +328,13 @@ static const struct repo_changes repo_upgrades[] = {
/* How to downgrade a newer repo to match what the current system
   expects */
static const struct repo_changes repo_downgrades[] = {
+
	{2006,
+
	 2005,
+
	 "Revert conflicts and provides creation",
+
	 "DROP TABLE %Q.pkg_provides;"
+
	 "DROP TABLE %Q.provides;"
+
	 "DROP TABLE %Q.conflicts;"
+
	},
	{2005,
	 2004,
	 "Revert rename of 'abstract metadata' to 'annotations'",
@@ -309,8 +355,8 @@ static const struct repo_changes repo_downgrades[] = {
	        " SELECT annotation_id, annotation FROM %Q.annotation;"
	 "INSERT INTO %Q.pkg_abstract (package_id,key_id,value_id)"
	        " SELECT package_id,tag_id,value_id FROM %Q.pkg_annotation;"
-
	 "DROP TABLE pkg_annotation;"
-
	 "DROP TABLE annotation;"
+
	 "DROP TABLE %Q.pkg_annotation;"
+
	 "DROP TABLE %Q.annotation;"
	},
	{2004,
	 2003,