Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Count splitted upgrades as one single actions
Baptiste Daroussin committed 10 years ago
commit 218a4362ffd9ac666ba10b8a7b263fca8c8cf9de
parent 85e5a0f
9 files changed +35 -12
modified libpkg/pkg.h.in
@@ -516,7 +516,8 @@ typedef enum {
	PKG_SOLVED_DELETE,
	PKG_SOLVED_UPGRADE,
	PKG_SOLVED_UPGRADE_REMOVE,
-
	PKG_SOLVED_FETCH
+
	PKG_SOLVED_FETCH,
+
	PKG_SOLVED_UPGRADE_INSTALL
} pkg_solved_t;

#define PKG_OPEN_MANIFEST_ONLY 0x1
@@ -1000,6 +1001,7 @@ int pkg_add_from_remote(struct pkgdb *db, const char *path, unsigned flags,
#define PKG_ADD_FORCE			(1U << 3)
#define PKG_ADD_NOSCRIPT		(1U << 4)
#define PKG_ADD_FORCE_MISSING		(1U << 5)
+
#define PKG_ADD_SPLITTED_UPGRADE	(1U << 6)

/**
 * Allocate a new pkg_jobs.
@@ -1276,6 +1278,7 @@ typedef enum {
	PKG_EVENT_PLUGIN_ERROR,
	PKG_EVENT_PLUGIN_INFO,
	PKG_EVENT_NOT_FOUND,
+
	PKG_EVENT_NEW_ACTION,
} pkg_event_t;

struct pkg_event {
modified libpkg/pkg_add.c
@@ -576,6 +576,8 @@ pkg_add_common(struct pkgdb *db, const char *path, unsigned flags,
		retcode = ret;
		goto cleanup;
	}
+
	if ((flags & PKG_ADD_SPLITTED_UPGRADE) != PKG_ADD_SPLITTED_UPGRADE)
+
		pkg_emit_new_action();
	if ((flags & PKG_ADD_UPGRADE) == 0)
		pkg_emit_install_begin(pkg);
	else {
modified libpkg/pkg_delete.c
@@ -67,8 +67,10 @@ pkg_delete(struct pkg *pkg, struct pkgdb *db, unsigned flags)
	if (pkgdb_ensure_loaded(db, pkg, load_flags) != EPKG_OK)
		return (EPKG_FATAL);

-
	if ((flags & PKG_DELETE_UPGRADE) == 0)
+
	if ((flags & PKG_DELETE_UPGRADE) == 0) {
+
		pkg_emit_new_action();
		pkg_emit_deinstall_begin(pkg);
+
	}

	/* If the package is locked */
	if (pkg->locked) {
modified libpkg/pkg_event.c
@@ -1004,3 +1004,13 @@ pkg_emit_progress_tick(int64_t current, int64_t total)
	pkg_emit_event(&ev);

}
+

+
void
+
pkg_emit_new_action(void)
+
{
+
	struct pkg_event ev;
+

+
	ev.type = PKG_EVENT_NEW_ACTION;
+

+
	pkg_emit_event(&ev);
+
}
modified libpkg/pkg_jobs.c
@@ -588,7 +588,7 @@ pkg_jobs_set_execute_priority(struct pkg_jobs *j, struct pkg_solved *solved)
			ts->type = PKG_SOLVED_UPGRADE_REMOVE;
			ts->items[0] = solved->items[1];
			solved->items[1] = NULL;
-
			solved->type = PKG_SOLVED_INSTALL;
+
			solved->type = PKG_SOLVED_UPGRADE_INSTALL;
			DL_APPEND(j->jobs, ts);
			j->count ++;
			solved->already_deleted = true;
@@ -1865,6 +1865,8 @@ pkg_jobs_handle_install(struct pkg_solved *ps, struct pkg_jobs *j,
	if ((j->flags & PKG_FLAG_FORCE_MISSING) == PKG_FLAG_FORCE_MISSING)
		flags |= PKG_ADD_FORCE_MISSING;
	flags |= PKG_ADD_UPGRADE;
+
	if (ps->type == PKG_SOLVED_UPGRADE_INSTALL)
+
		flags |= PKG_ADD_SPLITTED_UPGRADE;
	if (new->automatic || (j->flags & PKG_FLAG_AUTOMATIC) == PKG_FLAG_AUTOMATIC)
		flags |= PKG_ADD_AUTOMATIC;

@@ -1945,6 +1947,7 @@ pkg_jobs_execute(struct pkg_jobs *j)
				goto cleanup;
			break;
		case PKG_SOLVED_INSTALL:
+
		case PKG_SOLVED_UPGRADE_INSTALL:
			retcode = pkg_jobs_handle_install(ps, j, keys);
			if (retcode != EPKG_OK)
				goto cleanup;
modified libpkg/private/event.h
@@ -76,5 +76,6 @@ void pkg_emit_extract_begin(struct pkg *p);
void pkg_emit_extract_finished(struct pkg *p);
void pkg_emit_delete_files_begin(struct pkg *p);
void pkg_emit_delete_files_finished(struct pkg *p);
+
void pkg_emit_new_action(void);

#endif
modified src/event.c
@@ -615,7 +615,6 @@ event_callback(void *data, struct pkg_event *ev)
	case PKG_EVENT_INSTALL_BEGIN:
		if (quiet)
			break;
-
		nbdone++;
		job_status_begin(msg_buf);

		pkg = ev->e_install_begin.pkg;
@@ -685,7 +684,6 @@ event_callback(void *data, struct pkg_event *ev)
	case PKG_EVENT_DEINSTALL_BEGIN:
		if (quiet)
			break;
-
		nbdone++;

		job_status_begin(msg_buf);

@@ -715,7 +713,6 @@ event_callback(void *data, struct pkg_event *ev)
			break;
		pkg_new = ev->e_upgrade_begin.n;
		pkg_old = ev->e_upgrade_begin.o;
-
		nbdone++;

		job_status_begin(msg_buf);

@@ -858,6 +855,9 @@ event_callback(void *data, struct pkg_event *ev)
		sbuf_cat(msg_buf, "Restoring");
		sbuf_finish(msg_buf);
		break;
+
	case PKG_EVENT_NEW_ACTION:
+
		nbdone++;
+
		break;
	default:
		break;
	}
modified src/utils.c
@@ -746,6 +746,7 @@ set_jobs_summary_pkg(struct pkg_jobs *jobs,
		it->display_type = PKG_DISPLAY_DELETE;

		break;
+
	case PKG_SOLVED_UPGRADE_INSTALL:
	case PKG_SOLVED_UPGRADE_REMOVE:
		/* Ignore split-upgrade packages for display */
		free(it);
@@ -794,6 +795,7 @@ display_summary_item(struct pkg_solved_display_item *it, int64_t dlsize)
		switch (it->solved_type) {
		case PKG_SOLVED_INSTALL:
		case PKG_SOLVED_UPGRADE:
+
		case PKG_SOLVED_UPGRADE_INSTALL:
			/* If it's a new install, then it
			 * cannot have been locked yet. */
			pkg_printf("and may not be upgraded to version %v\n", it->new);
modified tests/frontend/conflicts-multirepo.sh
@@ -161,12 +161,12 @@ The following 2 package(s) will be affected (of 0 checked):
Installed packages to be UPGRADED:
	test2: 1 -> 1.1 [local2]
	test: 1 -> 1.1 [local2]
-
${JAILED}[1/3] Deinstalling test2-1...
-
${JAILED}[1/3] Deleting files for test2-1:  done
-
${JAILED}[2/3] Installing test2-1.1...
-
${JAILED}[2/3] Extracting test2-1.1:  done
-
${JAILED}[3/3] Upgrading test from 1 to 1.1...
-
${JAILED}[3/3] Extracting test-1.1:  done
+
${JAILED}[1/2] Deinstalling test2-1...
+
${JAILED}[1/2] Deleting files for test2-1:  done
+
${JAILED}[1/2] Installing test2-1.1...
+
${JAILED}[1/2] Extracting test2-1.1:  done
+
${JAILED}[2/2] Upgrading test from 1 to 1.1...
+
${JAILED}[2/2] Extracting test-1.1:  done
"
	atf_check \
		-o inline:"${OUTPUT}" \