Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Another upgrade fix.
Vsevolod Stakhov committed 12 years ago
commit 74b2b864cc8090cf4ebe6500220f0c1048351386
parent db9afc7
7 files changed +51 -39
modified libpkg/pkg.h.in
@@ -1455,10 +1455,12 @@ struct pkg_event {
			struct pkg *pkg;
		} e_deinstall_finished;
		struct {
-
			struct pkg *pkg;
+
			struct pkg *new;
+
			struct pkg *old;
		} e_upgrade_begin;
		struct {
-
			struct pkg *pkg;
+
			struct pkg *new;
+
			struct pkg *old;
		} e_upgrade_finished;
		struct {
			struct pkg *pkg;
modified libpkg/pkg_delete.c
@@ -3,6 +3,7 @@
 * Copyright (c) 2011-2012 Julien Laffaye <jlaffaye@FreeBSD.org>
 * Copyright (c) 2011 Will Andrews <will@FreeBSD.org>
 * Copyright (c) 2011 Philippe Pepiot <phil@philpep.org>
+
 * Copyright (c) 2014 Vsevolod Stakhov <vsevolod@FreeBSD.org>
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
@@ -69,9 +70,7 @@ pkg_delete(struct pkg *pkg, struct pkgdb *db, unsigned flags)
	if ((ret = pkgdb_load_mtree(db, pkg)) != EPKG_OK)
		return (ret);

-
	if (flags & PKG_DELETE_UPGRADE)
-
		pkg_emit_upgrade_begin(pkg);
-
	else
+
	if (flags & PKG_DELETE_UPGRADE == 0)
		pkg_emit_deinstall_begin(pkg);

	/* If the package is locked */
modified libpkg/pkg_event.c
@@ -187,23 +187,23 @@ pipeevent(struct pkg_event *ev)
		pkg_sbuf_printf(msg, "{ \"type\": \"INFO_UPGRADE_BEGIN\", "
		    "\"data\": { "
		    "\"pkgname\": \"%n\", "
-
		    "\"pkgversion\": \"%V\" ,"
+
		    "\"pkgversion\": \"%v\" ,"
		    "\"pkgnewversion\": \"%v\""
		    "}}",
-
		    ev->e_upgrade_begin.pkg,
-
		    ev->e_upgrade_begin.pkg,
-
		    ev->e_upgrade_begin.pkg);
+
		    ev->e_upgrade_begin.old,
+
		    ev->e_upgrade_begin.old,
+
		    ev->e_upgrade_begin.new);
		break;
	case PKG_EVENT_UPGRADE_FINISHED:
		pkg_sbuf_printf(msg, "{ \"type\": \"INFO_UPGRADE_FINISHED\", "
		    "\"data\": { "
		    "\"pkgname\": \"%n\", "
-
		    "\"pkgversion\": \"%V\" ,"
+
		    "\"pkgversion\": \"%v\" ,"
		    "\"pkgnewversion\": \"%v\""
		    "}}",
-
		    ev->e_upgrade_begin.pkg,
-
		    ev->e_upgrade_begin.pkg,
-
		    ev->e_upgrade_begin.pkg);
+
		    ev->e_upgrade_begin.old,
+
		    ev->e_upgrade_begin.old,
+
		    ev->e_upgrade_begin.new);
		break;
	case PKG_EVENT_LOCKED:
		pkg_sbuf_printf(msg, "{ \"type\": \"ERROR_LOCKED\", "
@@ -524,25 +524,27 @@ pkg_emit_deinstall_finished(struct pkg *p)
}

void
-
pkg_emit_upgrade_begin(struct pkg *p)
+
pkg_emit_upgrade_begin(struct pkg *new, struct pkg *old)
{
	struct pkg_event ev;

	ev.type = PKG_EVENT_UPGRADE_BEGIN;
-
	ev.e_upgrade_begin.pkg = p;
+
	ev.e_upgrade_begin.new = new;
+
	ev.e_upgrade_begin.old = old;

	pkg_emit_event(&ev);
}

void
-
pkg_emit_upgrade_finished(struct pkg *p)
+
pkg_emit_upgrade_finished(struct pkg *new, struct pkg *old)
{
	struct pkg_event ev;
	bool syslog_enabled = false;
-
	char *name, *version, *newversion;
+
	char *name, *oldversion, *version;

	ev.type = PKG_EVENT_UPGRADE_FINISHED;
-
	ev.e_upgrade_finished.pkg = p;
+
	ev.e_upgrade_finished.new = new;
+
	ev.e_upgrade_finished.old = old;

	pkg_config_bool(PKG_CONFIG_SYSLOG, &syslog_enabled);
	if (syslog_enabled) {
@@ -553,14 +555,14 @@ pkg_emit_upgrade_finished(struct pkg *p)
		};
		pkg_change_t action;

-
		pkg_get(p, PKG_NAME, &name, PKG_OLD_VERSION, &version,
-
		    PKG_VERSION, &newversion);
-
		action = pkg_version_change(p);
+
		pkg_get(new, PKG_NAME, &name, PKG_VERSION, &version);
+
		pkg_get(old, PKG_VERSION, &oldversion);
+
		action = pkg_version_change_between(new, old);
		syslog(LOG_NOTICE, "%s %s: %s %s %s ",
		    name, actions[action],
-
		    version != NULL ? version : newversion,
-
		    version != NULL ? "->" : "",
-
		    version != NULL ? newversion : "");
+
		    oldversion != NULL ? oldversion : version,
+
		    oldversion != NULL ? "->" : "",
+
		    oldversion != NULL ? version : "");
	}

	pkg_emit_event(&ev);
modified libpkg/pkg_jobs.c
@@ -1125,7 +1125,7 @@ pkg_jobs_handle_install(struct pkg *new, struct pkg *old, struct pkg_jobs *j, bo

	if (oldversion != NULL) {
		pkg_set(newpkg, PKG_OLD_VERSION, oldversion);
-
		pkg_emit_upgrade_begin(old);
+
		pkg_emit_upgrade_begin(new, old);
	} else {
		pkg_emit_install_begin(newpkg);
	}
@@ -1138,6 +1138,12 @@ pkg_jobs_handle_install(struct pkg *new, struct pkg *old, struct pkg_jobs *j, bo
	if (automatic)
		flags |= PKG_ADD_AUTOMATIC;

+
	if (old != NULL) {
+
		if ((retcode = pkg_delete(old, j->db, PKG_DELETE_UPGRADE)) != EPKG_OK) {
+
			pkgdb_transaction_rollback(j->db->sqlite, "upgrade");
+
			goto cleanup;
+
		}
+
	}
	if ((retcode = pkg_add(j->db, path, flags, keys)) != EPKG_OK) {
		pkgdb_transaction_rollback(j->db->sqlite, "upgrade");
		goto cleanup;
@@ -1148,7 +1154,7 @@ pkg_jobs_handle_install(struct pkg *new, struct pkg *old, struct pkg_jobs *j, bo
	}

	if (oldversion != NULL)
-
		pkg_emit_upgrade_finished(newpkg);
+
		pkg_emit_upgrade_finished(new, old);
	else
		pkg_emit_install_finished(newpkg);

modified libpkg/pkg_version.c
@@ -1,5 +1,6 @@
/*-
 * Copyright (c) 2011 Philippe Pepiot <phil@philpep.org>
+
 * Copyright (c) 2014 Vsevolod Stakhov <vsevolod@FreeBSD.org>
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
modified libpkg/private/event.h
@@ -1,6 +1,7 @@
/*-
 * Copyright (c) 2011-2012 Baptiste Daroussin <bapt@FreeBSD.org>
 * Copyright (c) 2011-2012 Julien Laffaye <jlaffaye@FreeBSD.org>
+
 * Copyright (c) 2014 Vsevolod Stakhov <vsevolod@FreeBSD.org>
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
@@ -37,8 +38,8 @@ void pkg_emit_install_begin(struct pkg *p);
void pkg_emit_install_finished(struct pkg *p);
void pkg_emit_deinstall_begin(struct pkg *p);
void pkg_emit_deinstall_finished(struct pkg *p);
-
void pkg_emit_upgrade_begin(struct pkg *p);
-
void pkg_emit_upgrade_finished(struct pkg *p);
+
void pkg_emit_upgrade_begin(struct pkg *new, struct pkg *old);
+
void pkg_emit_upgrade_finished(struct pkg *new, struct pkg *old);
void pkg_emit_missing_dep(struct pkg *p, struct pkg_dep *d);
void pkg_emit_locked(struct pkg *p);
void pkg_emit_required(struct pkg *p, int force);
modified pkg/event.c
@@ -3,6 +3,7 @@
 * Copyright (c) 2011-2012 Julien Laffaye <jlaffaye@FreeBSD.org>
 * Copyright (c) 2011 Will Andrews <will@FreeBSD.org>
 * Copyright (c) 2011-2012 Marin Atanasov Nikolov <dnaeon@gmail.com>
+
 * Copyright (c) 2014 Vsevolod Stakhov <vsevolod@FreeBSD.org>
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
@@ -61,7 +62,7 @@ print_status_begin(struct sbuf *msg)
int
event_callback(void *data, struct pkg_event *ev)
{
-
	struct pkg *pkg = NULL;
+
	struct pkg *pkg = NULL, *pkg_new, *pkg_old;
	int *debug = data;
	const char *filename;
	struct pkg_event_conflict *cur_conflict;
@@ -206,7 +207,8 @@ event_callback(void *data, struct pkg_event *ev)
		else {
			struct sbuf	*msg;

-
			pkg = ev->e_upgrade_begin.pkg;
+
			pkg_new = ev->e_upgrade_begin.new;
+
			pkg_old = ev->e_upgrade_begin.old;
			nbdone++;

			msg = sbuf_new_auto();
@@ -217,20 +219,20 @@ event_callback(void *data, struct pkg_event *ev)

			print_status_begin(msg);

-
			switch (pkg_version_change(pkg)) {
+
			switch (pkg_version_change_between(pkg_new, pkg_old)) {
			case PKG_DOWNGRADE:
				pkg_sbuf_printf(msg,
-
				    "Downgrading %n from %V to %v...",
-
				    pkg, pkg, pkg);
+
				    "Downgrading %n from %v to %v...",
+
				    pkg_new, pkg_new, pkg_old);
				break;
			case PKG_REINSTALL:
				pkg_sbuf_printf(msg, "Reinstalling %n-%V...",
-
				    pkg, pkg);
+
				    pkg_old, pkg_old);
				break;
			case PKG_UPGRADE:
				pkg_sbuf_printf(msg,
				    "Upgrading %n from %V to %v...",
-
						pkg, pkg, pkg);
+
						pkg_old, pkg_old, pkg_new);
				break;
			}
			print_status_end(msg);
@@ -240,13 +242,12 @@ event_callback(void *data, struct pkg_event *ev)
		if (quiet)
			break;
		printf(" done\n");
-
		if (pkg_has_message(ev->e_upgrade_finished.pkg)) {
+
		pkg_new = ev->e_upgrade_begin.new;
+
		if (pkg_has_message(pkg_new)) {
			if (messages == NULL)
				messages = sbuf_new_auto();
			pkg_sbuf_printf(messages, "Message for %n-%v:\n %M\n",
-
			    ev->e_install_finished.pkg,
-
			    ev->e_install_finished.pkg,
-
			    ev->e_upgrade_finished.pkg);
+
				pkg_new, pkg_new, pkg_new);
		}
		break;
	case PKG_EVENT_LOCKED: