Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Disable pinning for pkg itself when and only when looking for a new version of pkg
Baptiste Daroussin committed 9 years ago
commit 4835b2793e815a521c510d11b306b1756072cb6d
parent 517a174
4 files changed +16 -17
modified libpkg/pkg_jobs.c
@@ -92,6 +92,7 @@ pkg_jobs_new(struct pkg_jobs **j, pkg_jobs_t t, struct pkgdb *db)
	(*j)->db = db;
	(*j)->type = t;
	(*j)->solved = 0;
+
	(*j)->pinning = true;
	(*j)->flags = PKG_FLAG_NONE;
	(*j)->conservative = pkg_object_bool(pkg_config_get("CONSERVATIVE_UPGRADE"));

@@ -700,7 +701,6 @@ new_pkg_version(struct pkg_jobs *j)
	const char *uid = "pkg";
	pkg_flags old_flags;
	bool ret = false;
-
	const char *lrepo;
	struct pkg_job_universe_item *nit, *cit;

	/* Disable -f for pkg self-check, and restore at end. */
@@ -721,8 +721,6 @@ new_pkg_version(struct pkg_jobs *j)
		goto end;
	}

-
	lrepo = pkg_kv_get(&p->annotations, "repository");
-

	/* Use maximum priority for pkg */
	if (pkg_jobs_find_upgrade(j, uid, MATCH_EXACT) == EPKG_OK) {
		/*
@@ -735,12 +733,8 @@ new_pkg_version(struct pkg_jobs *j)
			DL_FOREACH(nit, cit) {
				if (pkg_version_change_between (cit->pkg, p) == PKG_UPGRADE) {
					/* We really have newer version which is not installed */
-
					/* Preserve repo pinning logic */
-
					if ((j->reponame && strcmp (cit->pkg->reponame, j->reponame) == 0) ||
-
							(!j->reponame && (!lrepo ||
-
									strcmp (cit->pkg->reponame, lrepo) == 0))) {
-
						ret = true;
-
					}
+
					ret = true;
+
					break;
				}
			}
		}
@@ -1555,6 +1549,7 @@ jobs_solve_install_upgrade(struct pkg_jobs *j)
		if (new_pkg_version(j)) {
			j->flags &= ~PKG_FLAG_PKG_VERSION_TEST;
			j->conservative = false;
+
			j->pinning = false;
			pkg_emit_newpkgversion();
			goto order;
		}
modified libpkg/pkg_jobs_universe.c
@@ -1005,7 +1005,8 @@ pkg_jobs_universe_select_same_repo(struct pkg_job_universe_item *chain,

struct pkg_job_universe_item *
pkg_jobs_universe_select_candidate(struct pkg_job_universe_item *chain,
-
	struct pkg_job_universe_item *local, bool conservative, const char *reponame)
+
    struct pkg_job_universe_item *local, bool conservative,
+
    const char *reponame, bool pinning)
{
	struct pkg_job_universe_item *res = NULL;

@@ -1013,7 +1014,7 @@ pkg_jobs_universe_select_candidate(struct pkg_job_universe_item *chain,
		/* New package selection */
		if (conservative) {
			/* Check same repo */
-
			if (reponame) {
+
			if (reponame && pinning) {
				res =  pkg_jobs_universe_select_same_repo(chain, NULL, reponame);
			}

@@ -1026,7 +1027,7 @@ pkg_jobs_universe_select_candidate(struct pkg_job_universe_item *chain,
			}
		}
		else {
-
			if (reponame) {
+
			if (reponame && pinning) {
				res =  pkg_jobs_universe_select_same_repo(chain, NULL, reponame);
			}

@@ -1042,7 +1043,8 @@ pkg_jobs_universe_select_candidate(struct pkg_job_universe_item *chain,
	else {
		if (conservative) {
			/* same -> prio -> version */
-
			res = pkg_jobs_universe_select_same_repo(chain, local, reponame);
+
			if (pinning)
+
				res = pkg_jobs_universe_select_same_repo(chain, local, reponame);
			if (res == NULL) {
				res = pkg_jobs_universe_select_max_prio(chain);
			}
@@ -1052,7 +1054,8 @@ pkg_jobs_universe_select_candidate(struct pkg_job_universe_item *chain,
		}
		else {
			/* same -> version -> prio */
-
			res = pkg_jobs_universe_select_same_repo(chain, local, reponame);
+
			if (pinning)
+
				res = pkg_jobs_universe_select_same_repo(chain, local, reponame);
			if (res == NULL) {
				res = pkg_jobs_universe_select_max_ver(chain);
			}
@@ -1111,7 +1114,7 @@ pkg_jobs_universe_process_upgrade_chains(struct pkg_jobs *j)
			struct pkg_job_universe_item *selected;

			selected = pkg_jobs_universe_select_candidate(unit, local,
-
				j->conservative, NULL);
+
				j->conservative, NULL, j->pinning);
			/*
			 * Now remove all requests but selected from the requested
			 * candidates
modified libpkg/pkg_solve.c
@@ -1039,7 +1039,7 @@ pkg_solve_set_initial_assumption(struct pkg_solve_problem *problem,
		}
		else {
			selected = pkg_jobs_universe_select_candidate(first, local,
-
					conservative, assumed_reponame);
+
			    conservative, assumed_reponame, true);

			if (local && strcmp (selected->pkg->digest, local->pkg->digest) == 0) {
				selected = local;
modified libpkg/private/pkg_jobs.h
@@ -118,6 +118,7 @@ struct pkg_jobs {
	TREE_HEAD(, pkg_jobs_conflict_item) *conflict_items;
	struct job_pattern *patterns;
	bool conservative;
+
	bool pinning;
};

struct job_pattern {
@@ -247,7 +248,7 @@ pkg_jobs_universe_get_upgrade_candidates(struct pkg_jobs_universe *universe,
struct pkg_job_universe_item *
pkg_jobs_universe_select_candidate(struct pkg_job_universe_item *chain,
	struct pkg_job_universe_item *local, bool conservative,
-
	const char *reponame);
+
	const char *reponame, bool pinning);

/*
 * Free job request (with all candidates)