Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Add pkg_version_change_between function.
Vsevolod Stakhov committed 12 years ago
commit 8aca7b7ba2bb45cc3f52b494ee891e98c6da994a
parent f44d865
3 files changed +32 -10
modified libpkg/pkg.h.in
@@ -1354,6 +1354,7 @@ struct pkg_config *pkg_config_lookup(const char *name);
 */
int pkg_version_cmp(const char * const , const char * const);
pkg_change_t pkg_version_change(const struct pkg * restrict);
+
pkg_change_t pkg_version_change_between(const struct pkg * pkg1, const struct pkg *pkg2);

/**
 * Fetch a file.
modified libpkg/pkg_version.c
@@ -285,9 +285,8 @@ pkg_version_cmp(const char * const pkg1, const char * const pkg2)
	assert (v1 != NULL && v2 != NULL);

	/* Check epoch, port version, and port revision, in that order. */
-
	if (e1 != e2) {
+
	if (e1 != e2)
		result = (e1 < e2 ? -1 : 1);
-
	}

	/* Shortcut check for equality before invoking the parsing routines. */
	if (result == 0 &&
@@ -329,10 +328,10 @@ pkg_version_cmp(const char * const pkg1, const char * const pkg2)
	}

	/* Compare FreeBSD revision numbers. */
-
	if (result == 0 && r1 != r2) {
+
	if (result == 0 && r1 != r2)
		result = (r1 < r2 ? -1 : 1);
-
	}
-
	return result;
+

+
	return (result);
}

pkg_change_t
@@ -344,15 +343,37 @@ pkg_version_change(const struct pkg * restrict pkg)
	    PKG_OLD_VERSION, &oldversion);

	if (oldversion == NULL)
-
		return PKG_REINSTALL;
+
		return (PKG_REINSTALL);

	switch (pkg_version_cmp(oldversion, version)) {
	case -1:
-
		return PKG_UPGRADE;
+
		return (PKG_UPGRADE);
	default:		/* placate the compiler */
	case 0:
+
		return (PKG_REINSTALL);
+
	case 1:
+
		return (PKG_DOWNGRADE);
+
	}
+
}
+

+
pkg_change_t
+
pkg_version_change_between(const struct pkg * pkg1, const struct pkg *pkg2)
+
{
+
	const char *version, *oldversion;
+

+
	if (pkg2 == NULL)
		return PKG_REINSTALL;
+

+
	pkg_get(pkg1, PKG_VERSION, &version);
+
	pkg_get(pkg2, PKG_VERSION, &oldversion);
+

+
	switch (pkg_version_cmp(oldversion, version)) {
+
	case -1:
+
		return (PKG_UPGRADE);
+
	default:		/* placate the compiler */
+
	case 0:
+
		return (PKG_REINSTALL);
	case 1:
-
		return PKG_DOWNGRADE;
+
		return (PKG_DOWNGRADE);
	}
}
modified pkg/utils.c
@@ -554,7 +554,7 @@ print_jobs_summary_pkg(struct pkg *new_pkg, struct pkg *old_pkg,
			/* If it's a new install, then it
			 * cannot have been locked yet. */
			if (oldversion != NULL) {
-
				switch(pkg_version_change(new_pkg)) {
+
				switch(pkg_version_change_between(new_pkg, old_pkg)) {
				case PKG_UPGRADE:
					pkg_printf("and may not be upgraded to version %v\n", new_pkg);
					break;
@@ -594,7 +594,7 @@ print_jobs_summary_pkg(struct pkg *new_pkg, struct pkg *old_pkg,
			*dlsize += pkgsize;

		if (old_pkg != NULL) {
-
			switch (pkg_version_change(new_pkg)) {
+
			switch (pkg_version_change_between(new_pkg, old_pkg)) {
			case PKG_DOWNGRADE:
				pkg_printf("\tDowngrading %n: %v -> %v", new_pkg, old_pkg, new_pkg);
				if (pkg_repos_total_count() > 1)