Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
CASCADE delete packages when doing incremental pkg-repo
Bryan Drewery committed 13 years ago
commit ad86b8cdafb1b96807deacfebe7c9c60fa17e3c3
parent b88b4bc
1 file changed +10 -2
modified libpkg/pkg_repo.c
@@ -330,8 +330,16 @@ pkg_create_repo(char *path, void (progress)(struct pkg *pkg, void *data), void *
		goto cleanup;

	/* remove everything that is not anymore in the repository */
-
	if (incremental)
-
		sql_exec(sqlite, "delete from packages where not file_exists(path);");
+
	if (incremental) {
+
		sql_exec(sqlite, "DELETE FROM packages WHERE NOT FILE_EXISTS(path);");
+
		sql_exec(sqlite, "DELETE FROM deps WHERE package_id NOT IN (SELECT package_id FROM packages);");
+
		sql_exec(sqlite, "DELETE FROM pkg_categories WHERE package_id NOT IN (SELECT package_id FROM packages);");
+
		sql_exec(sqlite, "DELETE FROM categories WHERE id NOT IN (SELECT category_id FROM pkg_categories);");
+
		sql_exec(sqlite, "DELETE FROM pkg_licenses WHERE package_id NOT IN (SELECT package_id FROM packages);");
+
		sql_exec(sqlite, "DELETE FROM licenses WHERE id NOT IN (SELECT license_id FROM pkg_licenses);");
+
		sql_exec(sqlite, "DELETE FROM options WHERE package_id NOT IN (SELECT package_id FROM packages);");
+
		sql_exec(sqlite, "DELETE FROM pkg_shlibs WHERE package_id NOT IN (SELECT package_id FROM packages);");
+
	}

	if (sqlite3_prepare_v2(sqlite, pkgsql, -1, &stmt_pkg, NULL) != SQLITE_OK) {
		ERROR_SQLITE(sqlite);