Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Added logic to conditionally show messages.
Vsevolod Stakhov committed 10 years ago
commit d2a08f9e5db4b2cde4514d22af9c446a9d922859
parent ef497f0
9 files changed +43 -14
modified libpkg/libpkg.ver
@@ -51,6 +51,7 @@ global:
	pkg_has_dir;
	pkg_has_file;
	pkg_has_message;
+
	pkg_need_message;
	pkg_ini;
	pkg_init;
	pkg_initialized;
modified libpkg/pkg.c
@@ -1609,6 +1609,25 @@ pkg_is_installed(struct pkgdb *db, const char *name)
}

bool
+
pkg_need_message(struct pkg *p, struct pkg *old)
+
{
+
	bool ret = true;
+

+
	if (old != NULL) {
+
		if (p->message->maximum_version) {
+
			ret = (pkg_version_cmp(old->version, p->message->maximum_version)
+
					<= 0);
+
		}
+
		if (ret && p->message->minimum_version) {
+
			ret = (pkg_version_cmp(old->version, p->message->maximum_version)
+
								>= 0);
+
		}
+
	}
+

+
	return (ret);
+
}
+

+
bool
pkg_has_message(struct pkg *p)
{
	return (p->message != NULL);
modified libpkg/pkg.h.in
@@ -1311,6 +1311,7 @@ struct pkg_event {
		} e_install_begin;
		struct {
			struct pkg *pkg;
+
      struct pkg *old;
		} e_install_finished;
		struct {
			struct pkg *pkg;
@@ -1598,6 +1599,7 @@ struct sbuf *pkg_sbuf_vprintf(struct sbuf * restrict sbuf,
	const char * restrict format, va_list ap);

bool pkg_has_message(struct pkg *p);
+
bool pkg_need_message(struct pkg *p, struct pkg *old);
bool pkg_is_locked(const struct pkg * restrict p);


modified libpkg/pkg_add.c
@@ -688,12 +688,12 @@ pkg_add_common(struct pkgdb *db, const char *path, unsigned flags,

	if (retcode == EPKG_OK) {
		if ((flags & PKG_ADD_UPGRADE) == 0)
-
			pkg_emit_install_finished(pkg);
+
			pkg_emit_install_finished(pkg, local);
		else {
			if (local != NULL)
				pkg_emit_upgrade_finished(pkg, local);
			else
-
				pkg_emit_install_finished(pkg);
+
				pkg_emit_install_finished(pkg, local);
		}
	}

modified libpkg/pkg_event.c
@@ -539,13 +539,14 @@ pkg_emit_install_begin(struct pkg *p)
}

void
-
pkg_emit_install_finished(struct pkg *p)
+
pkg_emit_install_finished(struct pkg *p, struct pkg *old)
{
	struct pkg_event ev;
	bool syslog_enabled = false;

	ev.type = PKG_EVENT_INSTALL_FINISHED;
	ev.e_install_finished.pkg = p;
+
	ev.e_install_finished.old = old;

	syslog_enabled = pkg_object_bool(pkg_config_get("SYSLOG"));
	if (syslog_enabled) {
modified libpkg/pkg_ports.c
@@ -1318,7 +1318,7 @@ pkg_add_port(struct pkgdb *db, struct pkg *pkg, const char *input_path,
	}

	if (rc == EPKG_OK)
-
		pkg_emit_install_finished(pkg);
+
		pkg_emit_install_finished(pkg, NULL);

cleanup:
	pkgdb_register_finale(db, rc);
modified libpkg/pkgdb.c
@@ -2303,7 +2303,7 @@ pkgdb_register_ports(struct pkgdb *db, struct pkg *pkg)

	ret = pkgdb_register_pkg(db, pkg, 0, 0);
	if (ret == EPKG_OK)
-
		pkg_emit_install_finished(pkg);
+
		pkg_emit_install_finished(pkg, NULL);

	pkgdb_register_finale(db, ret);

modified libpkg/private/event.h
@@ -39,7 +39,7 @@ void pkg_emit_fetch_finished(const char *url);
void pkg_emit_update_add(int total, int done);
void pkg_emit_update_remove(int total, int done);
void pkg_emit_install_begin(struct pkg *p);
-
void pkg_emit_install_finished(struct pkg *p);
+
void pkg_emit_install_finished(struct pkg *p, struct pkg *old);
void pkg_emit_deinstall_begin(struct pkg *p);
void pkg_emit_deinstall_finished(struct pkg *p);
void pkg_emit_upgrade_begin(struct pkg *new, struct pkg *old);
modified src/event.c
@@ -631,10 +631,13 @@ event_callback(void *data, struct pkg_event *ev)
			break;
		pkg = ev->e_install_finished.pkg;
		if (pkg_has_message(pkg)) {
-
			if (messages == NULL)
-
				messages = sbuf_new_auto();
-
			pkg_sbuf_printf(messages, "Message for %n-%v:\n%M\n",
-
			    pkg, pkg, pkg);
+

+
			if (pkg_need_message(pkg, ev->e_install_finished.old)) {
+
				if (messages == NULL)
+
					messages = sbuf_new_auto();
+
				pkg_sbuf_printf(messages, "Message for %n-%v:\n%M\n",
+
						pkg, pkg, pkg);
+
			}
		}
		break;
	case PKG_EVENT_EXTRACT_BEGIN:
@@ -740,10 +743,13 @@ event_callback(void *data, struct pkg_event *ev)
			break;
		pkg_new = ev->e_upgrade_finished.n;
		if (pkg_has_message(pkg_new)) {
-
			if (messages == NULL)
-
				messages = sbuf_new_auto();
-
			pkg_sbuf_printf(messages, "Message for %n-%v:\n %M\n",
-
				pkg_new, pkg_new, pkg_new);
+

+
			if (pkg_need_message(pkg_new, ev->e_upgrade_finished.o)) {
+
				if (messages == NULL)
+
					messages = sbuf_new_auto();
+
				pkg_sbuf_printf(messages, "Message for %n-%v:\n%M\n",
+
						pkg_new, pkg_new, pkg_new);
+
			}
		}
		break;
	case PKG_EVENT_LOCKED: