Radish alpha
H
HardenedBSD Package Manager
Radicle
Git (anonymous pull)
Log in to clone via SSH
Fix upgrade for real
Baptiste Daroussin committed 14 years ago
commit abfe4019d04e3d46c8d8099a3fa58ae64447e750
parent a5f0e5f66abed323fb294d52ae6bdb36e7480016
2 files changed +20 -11
modified libpkg/pkg_jobs.c
@@ -97,6 +97,9 @@ pkg_jobs_install(struct pkg_jobs *j)
	cachedir = pkg_config("PKG_CACHEDIR");
	p = NULL;
	while (pkg_jobs(j, &p) == EPKG_OK) {
+
		/* no need to reinstall package already installed */
+
		if (p->type == PKG_INSTALLED)
+
			continue;
		snprintf(path, sizeof(path), "%s/%s", cachedir,
				 pkg_get(p, PKG_REPOPATH));

@@ -127,11 +130,14 @@ pkg_jobs_upgrade(struct pkg_jobs *j)
	cachedir = pkg_config("PKG_CACHEDIR");
	p = NULL;
	while (pkg_jobs(j, &p) == EPKG_OK) {
+
		/* no need to reinstall package already installed */
+
		if (p->type == PKG_INSTALLED)
+
			continue;
		/* get the installed pkg if any */
		it = pkgdb_query(j->db, pkg_get(p, PKG_ORIGIN), MATCH_EXACT);
+
		snprintf(path, sizeof(path), "%s/%s", cachedir,
+
				pkg_get(p, PKG_REPOPATH));
		if (pkgdb_it_next(it, &oldpkg, PKG_LOAD_BASIC) == EPKG_OK) {
-
			snprintf(path, sizeof(path), "%s/%s", cachedir,
-
					pkg_get(p, PKG_REPOPATH));
			retcode = pkg_upgrade(j->db, oldpkg, path);
		} else {
			retcode = pkg_upgrade(j->db, NULL, path);
@@ -222,6 +228,7 @@ add_dep(struct pkg_jobs *j, struct pkg_jobs_node *n)
	while (pkg_deps(n->pkg, &dep) != EPKG_END) {
		ndep = get_node(j, pkg_dep_origin(dep), 1);
		if (ndep->pkg == NULL) {
+
			/* get it from remote */
			if ((it = pkgdb_rquery(j->db, pkg_dep_origin(dep), MATCH_EXACT, FIELD_ORIGIN)) == NULL) {
				pkg_emit_missing_dep(n->pkg, dep);
			} else {
@@ -297,6 +304,8 @@ pkg_jobs_resolv(struct pkg_jobs *j)

	/* Add dependencies into nodes */
	LIST_FOREACH(n, &j->nodes, entries) {
+
		if (j->type == PKG_JOBS_UPGRADE)
+
			add_dep(j, n);
		if (j->type == PKG_JOBS_INSTALL)
			add_dep(j, n);
		if (j->type == PKG_JOBS_DEINSTALL)
modified libpkg/pkgdb.c
@@ -751,17 +751,17 @@ pkgdb_loaddeps(struct pkgdb *db, struct pkg *pkg)
	int ret;
	const char *sql;
	if (pkg->type == PKG_UPGRADE || pkg->type == PKG_REMOTE) {
-
		 sql = ""
-
			"SELECT p.name, p.origin, p.version "
-
			"FROM remote.packages AS p, remote.deps AS d "
-
			"WHERE p.origin = d.origin "
-
			"AND d.package_id = ?1;";
+
		sql = ""
+
			"SELECT d.name, d.origin, d.version "
+
			"FROM remote.deps AS d "
+
			"WHERE d.package_id = ?1 "
+
			"AND NOT EXISTS (SELECT 1 FROM main.packages AS p "
+
			"WHERE p.origin = d.origin);";
	} else {
		sql = ""
-
			"SELECT p.name, p.origin, p.version "
-
			"FROM mainpackages AS p, main.deps AS d "
-
			"WHERE p.origin = d.origin "
-
			"AND d.package_id = ?1;";
+
			"SELECT d.name, d.origin, d.version "
+
			"FROM main.deps AS d "
+
			"WHERE d.package_id = ?1;";
	}

	if (pkg->flags & PKG_LOAD_DEPS)