Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Check for conflicts and provides change.
Vsevolod Stakhov committed 12 years ago
commit c617eb13aaaa110e326e25050b529c656b45e2ed
parent da40ab8
1 file changed +44 -0
modified libpkg/pkg_jobs.c
@@ -701,6 +701,8 @@ newer_than_local_pkg(struct pkg_jobs *j, struct pkg *rp, bool force)
	struct pkg_option *lo = NULL, *ro = NULL;
	struct pkg_dep *ld = NULL, *rd = NULL;
	struct pkg_shlib *ls = NULL, *rs = NULL;
+
	struct pkg_conflict *lc = NULL, *rc = NULL;
+
	struct pkg_provide *lpr = NULL, *rpr = NULL;
	bool automatic;
	int	ret1, ret2;
	pkg_change_t cmp;
@@ -806,6 +808,48 @@ newer_than_local_pkg(struct pkg_jobs *j, struct pkg *rp, bool force)
			break;
	}

+
	/* Conflicts */
+
	for (;;) {
+
		ret1 = pkg_conflicts(rp, &rc);
+
		ret2 = pkg_conflicts(lp, &lc);
+
		if (ret1 != ret2) {
+
			pkg_free(lp);
+
			pkg_set(rp, PKG_REASON, "direct conflict changed");
+
			return (true);
+
		}
+
		if (ret1 == EPKG_OK) {
+
			if (strcmp(pkg_conflict_origin(rc),
+
					pkg_conflict_origin(lc)) != 0) {
+
				pkg_free(lp);
+
				pkg_set(rp, PKG_REASON, "direct conflict changed");
+
				return (true);
+
			}
+
		}
+
		else
+
			break;
+
	}
+

+
	/* Provides */
+
	for (;;) {
+
		ret1 = pkg_provides(rp, &rpr);
+
		ret2 = pkg_provides(lp, &lpr);
+
		if (ret1 != ret2) {
+
			pkg_free(lp);
+
			pkg_set(rp, PKG_REASON, "provides changed");
+
			return (true);
+
		}
+
		if (ret1 == EPKG_OK) {
+
			if (strcmp(pkg_provide_name(rpr),
+
					pkg_provide_name(lpr)) != 0) {
+
				pkg_free(lp);
+
				pkg_set(rp, PKG_REASON, "provides changed");
+
				return (true);
+
			}
+
		}
+
		else
+
			break;
+
	}
+

	/* Finish by the shlibs */
	for (;;) {
		ret1 = pkg_shlibs_required(rp, &rs);