Radish alpha
H
HardenedBSD Package Manager
Radicle
Git (anonymous pull)
Log in to clone via SSH
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 13b2b31993e004a3ac6a12ced23f4ca8ee72f7f6
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);