Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
more verbose pkg update
Elvira Khabirova committed 12 years ago
commit 4294b9a837a5e8b4386fa5898a53cf1091cdc32b
parent 6dbb17b
5 files changed +87 -1
modified libpkg/pkg.h.in
@@ -1349,6 +1349,8 @@ typedef enum {
	PKG_EVENT_UPGRADE_BEGIN,
	PKG_EVENT_UPGRADE_FINISHED,
	PKG_EVENT_FETCHING,
+
	PKG_EVENT_UPDATE_ADD,
+
	PKG_EVENT_UPDATE_REMOVE,
	PKG_EVENT_INTEGRITYCHECK_BEGIN,
	PKG_EVENT_INTEGRITYCHECK_FINISHED,
	PKG_EVENT_INTEGRITYCHECK_CONFLICT,
@@ -1393,6 +1395,14 @@ struct pkg_event {
			char *msg;
		} e_pkg_notice;
		struct {
+
			int total;
+
			int done;
+
		} e_upd_add;
+
		struct {
+
			int total;
+
			int done;
+
		} e_upd_remove;
+
		struct {
			const char *url;
			off_t total;
			off_t done;
modified libpkg/pkg_event.c
@@ -92,6 +92,26 @@ pipeevent(struct pkg_event *ev)
		    "\"data\": {\"msg\": \"DEVELOPER_MODE: %s\"}}",
		    sbuf_json_escape(buf, ev->e_pkg_error.msg));
		break;
+
	case PKG_EVENT_UPDATE_ADD:
+
		sbuf_printf(msg, "{ \"type\": \"INFO_UPDATE_ADD\", "
+
		    "\"data\": { "
+
		    "\"fetched\": %d, "
+
		    "\"total\": %d"
+
		    "}}",
+
		    ev->e_upd_add.done,
+
		    ev->e_upd_add.total
+
		    );
+
		break;
+
	case PKG_EVENT_UPDATE_REMOVE:
+
		sbuf_printf(msg, "{ \"type\": \"INFO_UPDATE_REMOVE\", "
+
		    "\"data\": { "
+
		    "\"fetched\": %d, "
+
		    "\"total\": %d"
+
		    "}}",
+
		    ev->e_upd_remove.done,
+
		    ev->e_upd_remove.total
+
		    );
+
		break;
	case PKG_EVENT_FETCHING:
		sbuf_printf(msg, "{ \"type\": \"INFO_FETCH\", "
		    "\"data\": { "
@@ -461,6 +481,31 @@ pkg_emit_fetching(const char *url, off_t total, off_t done, time_t elapsed)
}

void
+
pkg_emit_update_remove(int total, int done)
+
{
+
	struct pkg_event ev;
+

+
	ev.type = PKG_EVENT_UPDATE_REMOVE;
+
	ev.e_upd_remove.total = total;
+
	ev.e_upd_remove.done = done;
+

+
	pkg_emit_event(&ev);
+
}
+

+

+
void
+
pkg_emit_update_add(int total, int done)
+
{
+
	struct pkg_event ev;
+

+
	ev.type = PKG_EVENT_UPDATE_ADD;
+
	ev.e_upd_add.total = total;
+
	ev.e_upd_add.done = done;
+

+
	pkg_emit_event(&ev);
+
}
+

+
void
pkg_emit_install_begin(struct pkg *p)
{
	struct pkg_event ev;
modified libpkg/pkg_repo_update.c
@@ -217,6 +217,8 @@ pkg_repo_update_incremental(const char *name, struct pkg_repo *repo, time_t *mti
	ssize_t linelen;
	char *map = MAP_FAILED;
	size_t len = 0;
+
	int hash_it = 0;
+
	time_t now, last;

	pkg_debug(1, "Pkgrepo, begin incremental update of '%s'", name);
	if ((rc = pkgdb_repo_open(name, false, &sqlite)) != EPKG_OK) {
@@ -328,7 +330,14 @@ pkg_repo_update_incremental(const char *name, struct pkg_repo *repo, time_t *mti

	pkg_debug(1, "Pkgrepo, removing old entries for '%s'", name);
	removed = HASH_COUNT(ldel);
+
	hash_it = 0;
+
	last = 0;
	HASH_ITER(hh, ldel, item, tmp_item) {
+
		now = time(NULL);
+
		if (++hash_it == removed || now > last) {
+
			pkg_emit_update_remove(removed, hash_it);
+
			last = now;
+
		}
		if (rc == EPKG_OK) {
			rc = pkgdb_repo_remove_package(item->origin);
		}
@@ -352,7 +361,14 @@ pkg_repo_update_incremental(const char *name, struct pkg_repo *repo, time_t *mti
		return (EPKG_FATAL);
	}

+
	hash_it = 0;
+
	last = 0;
	HASH_ITER(hh, ladd, item, tmp_item) {
+
		now = time(NULL);
+
		if (++hash_it == added || now > last) {
+
			pkg_emit_update_add(added, hash_it);
+
			last = now;
+
		}
		if (rc == EPKG_OK) {
			if (item->length != 0) {
				rc = pkg_repo_add_from_manifest(map + item->offset, item->origin,
@@ -469,7 +485,6 @@ pkg_repo_update_binary_pkgs(struct pkg_repo *repo, bool force)
		goto cleanup;
	}

-
	res = EPKG_OK;
cleanup:
	/* Set mtime from http request if possible */
	if (t != 0) {
modified libpkg/private/event.h
@@ -34,6 +34,8 @@ void pkg_emit_notice(const char *fmt, ...);
void pkg_emit_errno(const char *func, const char *arg);
void pkg_emit_already_installed(struct pkg *p);
void pkg_emit_fetching(const char *url, off_t total, off_t done, time_t elapsed);
+
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_deinstall_begin(struct pkg *p);
modified src/event.c
@@ -82,6 +82,20 @@ event_callback(void *data, struct pkg_event *ev)
	case PKG_EVENT_DEVELOPER_MODE:
		warnx("DEVELOPER_MODE: %s", ev->e_pkg_error.msg);
		break;
+
	case PKG_EVENT_UPDATE_ADD:
+
		if (quiet || !isatty(fileno(stdin)))
+
			break;
+
		printf("\rPushing new entries %d/%d", ev->e_upd_add.done, ev->e_upd_add.total);
+
		if (ev->e_upd_add.total == ev->e_upd_add.done)
+
			printf("\n");
+
		break;
+
	case PKG_EVENT_UPDATE_REMOVE:
+
		if (quiet || !isatty(fileno(stdin)))
+
			break;
+
		printf("\rRemoving entries %d/%d", ev->e_upd_remove.done, ev->e_upd_remove.total);
+
		if (ev->e_upd_remove.total == ev->e_upd_remove.done)
+
			printf("\n");
+
		break;
	case PKG_EVENT_FETCHING:
		if (quiet || !isatty(fileno(stdin)))
			break;