Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Ordering options fix package with new options detection While here do not report already installed if a new option is detected
Baptiste Daroussin committed 13 years ago
commit 74b6b1d5e50f95c7ecd9068546fd332c91c74069
parent 058a878
1 file changed +13 -11
modified libpkg/pkgdb.c
@@ -2134,7 +2134,9 @@ report_already_installed(sqlite3 *s)
	const char *origin = NULL;
	const char *sql = "SELECT origin FROM pkgjobs WHERE "
		"(SELECT p.origin FROM main.packages AS p WHERE "
-
		"p.origin=pkgjobs.origin AND p.version=pkgjobs.version) IS NOT NULL;";
+
		"p.origin=pkgjobs.origin AND p.version=pkgjobs.version "
+
		"AND (((SELECT group_concat(option) FROM (select option FROM main.options WHERE package_id=p.id AND value='on' ORDER BY option)) IS NULL "
+
		"AND pkgjobs.opts IS NULL) OR (SELECT group_concat(option) FROM (select option FROM main.options WHERE package_id=p.id AND value='on' ORDER BY option)) == pkgjobs.opts)) IS NOT NULL;";

	assert(s != NULL);

@@ -2382,7 +2384,9 @@ pkgdb_query_installs(struct pkgdb *db, match_t match, int nbpkgs, char **pkgs, c
			"cksum, repopath, automatic, opts) "
			"SELECT id, origin, name, version, comment, desc, "
			"arch, maintainer, www, prefix, flatsize, pkgsize, "
-
			"cksum, path, 0, (select group_concat(option) from '%s'.options WHERE package_id=id AND value='on') FROM '%s'.packages WHERE ";
+
			"cksum, path, 0, "
+
			"(select group_concat(option) from (select option from '%s'.options WHERE package_id=id AND value='on' ORDER BY option)) "
+
			"FROM '%s'.packages WHERE ";

	const char deps_sql[] = "INSERT OR IGNORE INTO pkgjobs (pkgid, origin, name, version, comment, desc, arch, "
				"maintainer, www, prefix, flatsize, pkgsize, "
@@ -2438,15 +2442,14 @@ pkgdb_query_installs(struct pkgdb *db, match_t match, int nbpkgs, char **pkgs, c
	sqlite3_finalize(stmt);
	sbuf_clear(sql);

-
	/* Report and remove packages already installed and at the latest version */
+
	/* Report and remove packages already installed and at the latest version and without option change */
	report_already_installed(db->sqlite);
	if (!force) {
		sql_exec(db->sqlite, "DELETE FROM pkgjobs WHERE "
-
		    "(SELECT p.origin FROM main.packages AS p WHERE PKGLT(p.version, pkgjobs.version)) IS NOT NULL; ");
-
		sql_exec(db->sqlite, "DELETE FROM pkgjobs WHERE "
		    "(SELECT p.origin FROM main.packages AS p WHERE "
		    "p.origin=pkgjobs.origin AND PKGLE(p.version,pkgjobs.version) AND p.name = pkgjobs.name "
-
		    "AND ( ((SELECT group_concat(option) FROM main.options WHERE package_id=p.id AND value='on') IS NULL AND pkgjobs.opts IS NULL) OR (SELECT group_concat(option) FROM main.options WHERE package_id=p.id AND value='on') == pkgjobs.opts)) IS NOT NULL;");
+
		    "AND ( ((SELECT group_concat(option) FROM (select option FROM main.options WHERE package_id=p.id AND value='on' ORDER BY option)) IS NULL "
+
		    "AND pkgjobs.opts IS NULL) OR (SELECT group_concat(option) FROM (select option FROM main.options WHERE package_id=p.id AND value='on' ORDER BY option)) == pkgjobs.opts)) IS NOT NULL;");
	}

	/* Append dependencies */
@@ -2520,7 +2523,7 @@ pkgdb_query_upgrades(struct pkgdb *db, const char *repo, bool all)
			"SELECT id, origin, name, version, comment, desc, "
			"arch, maintainer, www, prefix, flatsize, pkgsize, "
			"cksum, path, 0 ,"
-
			"(select group_concat(option) from '%s'.options WHERE package_id=id AND value='on') "
+
			"(select group_concat(option) from (select option from '%s'.options WHERE package_id=id AND value='on' ORDER BY option)) "
			"FROM '%s'.packages WHERE origin IN (select origin from main.packages)";

	const char pkgjobs_sql_2[] = "INSERT OR IGNORE INTO pkgjobs (pkgid, origin, name, version, comment, desc, arch, "
@@ -2529,7 +2532,7 @@ pkgdb_query_upgrades(struct pkgdb *db, const char *repo, bool all)
				"SELECT DISTINCT r.id, r.origin, r.name, r.version, r.comment, r.desc, "
				"r.arch, r.maintainer, r.www, r.prefix, r.flatsize, r.pkgsize, "
				"r.cksum, r.path, 1, "
-
				"(select group_concat(option) from '%s'.options WHERE package_id=r.id AND value='on') "
+
				"(select group_concat(option) from (select option from '%s'.options WHERE package_id=r.id AND value='on' ORDER BY option)) "
				"FROM '%s'.packages AS r where r.origin IN "
				"(SELECT d.origin from '%s'.deps AS d, pkgjobs as j WHERE d.package_id = j.pkgid) "
				"AND (SELECT p.origin from main.packages as p WHERE p.origin=r.origin AND version=r.version) IS NULL;";
@@ -2574,11 +2577,10 @@ pkgdb_query_upgrades(struct pkgdb *db, const char *repo, bool all)
	/* Remove packages already installed and in the latest version */
	if (!all) {
		sql_exec(db->sqlite, "DELETE FROM pkgjobs WHERE "
-
		    "(SELECT p.origin FROM main.packages AS p WHERE PKGLT(p.version, pkgjobs.version)) IS NOT NULL; ");
-
		sql_exec(db->sqlite, "DELETE FROM pkgjobs WHERE "
		    "(SELECT p.origin FROM main.packages AS p WHERE "
		    "p.origin=pkgjobs.origin AND PKGLE(p.version,pkgjobs.version) AND p.name = pkgjobs.name "
-
		    "AND ( ((SELECT group_concat(option) FROM main.options WHERE package_id=p.id AND value='on') IS NULL AND pkgjobs.opts IS NULL) OR (SELECT group_concat(option) FROM main.options WHERE package_id=p.id AND value='on') == pkgjobs.opts)) IS NOT NULL;");
+
		    "AND ( ((SELECT group_concat(option) FROM (select option FROM main.options WHERE package_id=p.id AND value='on' ORDER BY option)) IS NULL "
+
		    "AND pkgjobs.opts IS NULL) OR (SELECT group_concat(option) FROM (select option FROM main.options WHERE package_id=p.id AND value='on' ORDER BY option)) == pkgjobs.opts)) IS NOT NULL;");
	}

	sbuf_reset(sql);