Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Really handle correctly upgrading a package when no files are shared between the old and the new version, avoid the slow upgrade of the previous attempt
Baptiste Daroussin committed 14 years ago
commit 620d292b5d14b139a4538ef9f4d254b11de000c3
parent 13b2b31
3 files changed +15 -6
modified libpkg/pkg_jobs.c
@@ -205,11 +205,20 @@ pkg_jobs_install(struct pkg_jobs *j)

		pkg_get(p, PKG_ORIGIN, &pkgorigin, PKG_REPOPATH, &pkgrepopath,
		    PKG_NEWVERSION, &newversion, PKG_AUTOMATIC, &automatic);
+

		if (newversion != NULL) {
-
				STAILQ_INSERT_TAIL(&pkg_queue, p, next);
-
				pkg_script_run(p, PKG_SCRIPT_PRE_DEINSTALL);
-
				pkg_get(pkg, PKG_ORIGIN, &origin);
-
				pkgdb_unregister_pkg(j->db, origin);
+
			pkg = NULL;
+
			it = pkgdb_query(j->db, pkgorigin, MATCH_EXACT);
+
			if (it != NULL) {
+
				if (pkgdb_it_next(it, &pkg, PKG_LOAD_BASIC|PKG_LOAD_FILES|PKG_LOAD_SCRIPTS|PKG_LOAD_DIRS) == EPKG_OK) {
+
					STAILQ_INSERT_TAIL(&pkg_queue, pkg, next);
+
					pkg_script_run(pkg, PKG_SCRIPT_PRE_DEINSTALL);
+
					pkg_get(pkg, PKG_ORIGIN, &origin);
+
					pkgdb_unregister_pkg(j->db, origin);
+
					pkg = NULL;
+
				}
+
				pkgdb_it_free(it);
+
			}
		}

		it = pkgdb_integrity_conflict_local(j->db, pkgorigin);
modified pkg/install.c
@@ -87,6 +87,7 @@ exec_install(int argc, char **argv)
		pkg_jobs_add(jobs, pkg);
		pkg = NULL;
	}
+
	pkgdb_it_free(it);

	if (pkg_jobs_is_empty(jobs)) {
		printf("Nothing to do\n");
@@ -139,7 +140,6 @@ exec_install(int argc, char **argv)

	cleanup:
	pkg_jobs_free(jobs);
-
	pkgdb_it_free(it);
	pkgdb_close(db);

	return (retcode);
modified pkg/upgrade.c
@@ -78,6 +78,7 @@ exec_upgrade(int argc, char **argv)
		pkg_jobs_add(jobs, pkg);
		pkg = NULL;
	}
+
	pkgdb_it_free(it);

	if (pkg_jobs_is_empty(jobs)) {
		printf("Nothing to do\n");
@@ -128,7 +129,6 @@ exec_upgrade(int argc, char **argv)
	retcode = 0;

	cleanup:
-
	pkgdb_it_free(it);
	pkg_jobs_free(jobs);
	pkgdb_close(db);