Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Split Installation status messages so there is a separate Extract phase.
Bryan Drewery committed 11 years ago
commit f635ac3f494c9691892873f29460eed3e4533c6e
parent 2248a32
5 files changed +75 -18
modified libpkg/pkg.h.in
@@ -1388,6 +1388,8 @@ typedef enum {
	PKG_EVENT_DEINSTALL_FINISHED,
	PKG_EVENT_UPGRADE_BEGIN,
	PKG_EVENT_UPGRADE_FINISHED,
+
	PKG_EVENT_EXTRACT_BEGIN,
+
	PKG_EVENT_EXTRACT_FINISHED,
	PKG_EVENT_FETCHING,
	PKG_EVENT_FETCH_BEGIN,
	PKG_EVENT_FETCH_FINISHED,
@@ -1478,6 +1480,12 @@ struct pkg_event {
		} e_upgrade_finished;
		struct {
			struct pkg *pkg;
+
		} e_extract_begin;
+
		struct {
+
			struct pkg *pkg;
+
		} e_extract_finished;
+
		struct {
+
			struct pkg *pkg;
			struct pkg_dep *dep;
		} e_missing_dep;
		struct {
modified libpkg/pkg_add.c
@@ -91,11 +91,12 @@ do_extract(struct archive *a, struct archive_entry *ae, const char *location,
	srand(time(NULL));
#endif

+
	if (nfiles == 0)
+
		return (EPKG_OK);
+

	pkg_get(pkg, PKG_NAME, &name);
+
	pkg_emit_extract_begin(pkg);
	pkg_emit_progress_start(NULL);
-
	/* show a progression on package with no files */
-
	if (nfiles == 0)
-
		pkg_emit_progress_tick(1,1);

	do {
		snprintf(pathname, sizeof(pathname), "%s/%s",
@@ -172,6 +173,7 @@ do_extract(struct archive *a, struct archive_entry *ae, const char *location,
cleanup:

	pkg_emit_progress_tick(nfiles, nfiles);
+
	pkg_emit_extract_finished(pkg);

	if (renamed && retcode == EPKG_FATAL)
		unlink(rpath);
@@ -494,13 +496,6 @@ pkg_add_common(struct pkgdb *db, const char *path, unsigned flags,
		pkg_delete_files(pkg, 2);
		pkg_delete_dirs(db, pkg);
		goto cleanup_reg;
-
	} else if (!extract) {
-
		/*
-
		 * Meta packages will have no non-meta files. Still display
-
		 * 100% progress.
-
		 */
-
		pkg_emit_progress_start(NULL);
-
		pkg_emit_progress_tick(1,1);
	}

	/*
modified libpkg/pkg_event.c
@@ -135,6 +135,20 @@ pipeevent(struct pkg_event *ev)
		    "\"pkgversion\": \"%v\""
		    "}}", ev->e_install_begin.pkg, ev->e_install_begin.pkg);
		break;
+
	case PKG_EVENT_EXTRACT_BEGIN:
+
		pkg_sbuf_printf(msg, "{ \"type\": \"INFO_EXTRACT_BEGIN\", "
+
		    "\"data\": { "
+
		    "\"pkgname\": \"%n\", "
+
		    "\"pkgversion\": \"%v\""
+
		    "}}", ev->e_extract_begin.pkg, ev->e_extract_begin.pkg);
+
		break;
+
	case PKG_EVENT_EXTRACT_FINISHED:
+
		pkg_sbuf_printf(msg, "{ \"type\": \"INFO_EXTRACT_FINISHED\", "
+
		    "\"data\": { "
+
		    "\"pkgname\": \"%n\", "
+
		    "\"pkgversion\": \"%v\""
+
		    "}}", ev->e_extract_finished.pkg, ev->e_extract_finished.pkg);
+
		break;
	case PKG_EVENT_INSTALL_FINISHED:
		pkg_get(ev->e_install_finished.pkg,
		    PKG_MESSAGE, &message);
@@ -554,6 +568,28 @@ pkg_emit_install_finished(struct pkg *p)
}

void
+
pkg_emit_extract_begin(struct pkg *p)
+
{
+
	struct pkg_event ev;
+

+
	ev.type = PKG_EVENT_EXTRACT_BEGIN;
+
	ev.e_extract_begin.pkg = p;
+

+
	pkg_emit_event(&ev);
+
}
+

+
void
+
pkg_emit_extract_finished(struct pkg *p)
+
{
+
	struct pkg_event ev;
+

+
	ev.type = PKG_EVENT_EXTRACT_FINISHED;
+
	ev.e_extract_finished.pkg = p;
+

+
	pkg_emit_event(&ev);
+
}
+

+
void
pkg_emit_integritycheck_begin(void)
{
	struct pkg_event ev;
modified libpkg/private/event.h
@@ -70,4 +70,7 @@ int pkg_emit_query_select(const char *msg, const char **items, int ncnt, int def
void pkg_emit_progress_start(const char *fmt, ...);
void pkg_emit_progress_tick(int64_t current, int64_t total);

+
void pkg_emit_extract_begin(struct pkg *p);
+
void pkg_emit_extract_finished(struct pkg *p);
+

#endif
modified src/event.c
@@ -590,21 +590,34 @@ event_callback(void *data, struct pkg_event *ev)
			job_status_begin(msg_buf);

			pkg = ev->e_install_begin.pkg;
-
			pkg_sbuf_printf(msg_buf, "Installing %n-%v", pkg, pkg);
+
			pkg_sbuf_printf(msg_buf, "Installing %n-%v...\n", pkg,
+
			    pkg);
+
			sbuf_finish(msg_buf);
+
			printf("%s", sbuf_data(msg_buf));
		}
		break;
	case PKG_EVENT_INSTALL_FINISHED:
		if (quiet)
			break;
-
		if (pkg_has_message(ev->e_install_finished.pkg)) {
+
		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",
-
			    ev->e_install_finished.pkg,
-
			    ev->e_install_finished.pkg,
-
			    ev->e_install_finished.pkg);
+
			    pkg, pkg, pkg);
		}
		break;
+
	case PKG_EVENT_EXTRACT_BEGIN:
+
		if (quiet)
+
			break;
+
		else {
+
			job_status_begin(msg_buf);
+
			pkg = ev->e_install_begin.pkg;
+
			pkg_sbuf_printf(msg_buf, "Extracting %n-%v", pkg, pkg);
+
		}
+
		break;
+
	case PKG_EVENT_EXTRACT_FINISHED:
+
		break;
	case PKG_EVENT_INTEGRITYCHECK_BEGIN:
		if (quiet)
			break;
@@ -657,18 +670,20 @@ event_callback(void *data, struct pkg_event *ev)

		switch (pkg_version_change_between(pkg_new, pkg_old)) {
		case PKG_DOWNGRADE:
-
			pkg_sbuf_printf(msg_buf, "Downgrading %n from %v to %v",
+
			pkg_sbuf_printf(msg_buf, "Downgrading %n from %v to %v...\n",
			    pkg_new, pkg_new, pkg_old);
			break;
		case PKG_REINSTALL:
-
			pkg_sbuf_printf(msg_buf, "Reinstalling %n-%v",
+
			pkg_sbuf_printf(msg_buf, "Reinstalling %n-%v...\n",
		    pkg_old, pkg_old);
			break;
		case PKG_UPGRADE:
-
			pkg_sbuf_printf(msg_buf, "Upgrading %n from %v to %v",
+
			pkg_sbuf_printf(msg_buf, "Upgrading %n from %v to %v...\n",
			    pkg_new, pkg_old, pkg_new);
			break;
		}
+
		sbuf_finish(msg_buf);
+
		printf("%s", sbuf_data(msg_buf));
		break;
	case PKG_EVENT_UPGRADE_FINISHED:
		if (quiet)