Radish alpha
H
HardenedBSD Package Manager
Radicle
Git (anonymous pull)
Log in to clone via SSH
Fix jobs resolving, remove already installed packages, works with install, need testing with upgrades
Baptiste Daroussin committed 14 years ago
commit f4f9a489e527bac34f123eb6b6e139d9668be7c0
parent abfe4019d04e3d46c8d8099a3fa58ae64447e750
2 files changed +24 -5
modified libpkg/pkg_jobs.c
@@ -59,7 +59,9 @@ pkg_jobs_empty(struct pkg_jobs *j)
{
	assert(j != NULL);

-
	return (STAILQ_FIRST(&j->jobs) == NULL ? true : false);
+
	pkg_jobs_resolv(j);
+

+
	return (STAILQ_EMPTY(&j->jobs));
}

int
@@ -285,7 +287,8 @@ int
pkg_jobs_resolv(struct pkg_jobs *j)
{
	struct pkg_jobs_node *n, *tmp;
-
	struct pkg *p;
+
	struct pkg *p, *ptemp, *localp;
+
	struct pkgdb_it *it = NULL;

	assert(j != NULL);

@@ -321,5 +324,23 @@ pkg_jobs_resolv(struct pkg_jobs *j)
	} while (!LIST_EMPTY(&j->nodes));

	j->resolved = 1;
+

+
	if (j->type == PKG_JOBS_DEINSTALL)
+
		return (EPKG_OK);
+

+
	/* Now remove packages that are already installed */
+
	STAILQ_FOREACH_SAFE(p, &j->jobs, next, ptemp) {
+
		localp = NULL;
+
		it = NULL;
+
		if ((it = pkgdb_query(j->db, pkg_get(p, PKG_ORIGIN), MATCH_EXACT)) == NULL)
+
			continue;
+
		if (pkgdb_it_next(it, &localp, PKG_LOAD_BASIC) == EPKG_OK)
+
			if (!strcmp(pkg_get(localp, PKG_NAME), pkg_get(p, PKG_NAME)) &&
+
						!strcmp(pkg_get(localp, PKG_VERSION), pkg_get(p, p->type == PKG_UPGRADE ? PKG_NEWVERSION : PKG_VERSION)))
+
				STAILQ_REMOVE(&j->jobs, p, pkg, next);
+

+
		pkgdb_it_free(it);
+
	}
+

	return (EPKG_OK);
}
modified libpkg/pkgdb.c
@@ -754,9 +754,7 @@ pkgdb_loaddeps(struct pkgdb *db, struct pkg *pkg)
		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);";
+
			"WHERE d.package_id = ?1;";
	} else {
		sql = ""
			"SELECT d.name, d.origin, d.version "