Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
pkg add: Allow event output to be recursive to fix output.
Bryan Drewery committed 11 years ago
commit 5da7e15ec5139d655b1fdbce2c1da171bd75a174
parent f635ac3
5 files changed +66 -5
modified libpkg/pkg.h.in
@@ -1390,6 +1390,8 @@ typedef enum {
	PKG_EVENT_UPGRADE_FINISHED,
	PKG_EVENT_EXTRACT_BEGIN,
	PKG_EVENT_EXTRACT_FINISHED,
+
	PKG_EVENT_ADD_DEPS_BEGIN,
+
	PKG_EVENT_ADD_DEPS_FINISHED,
	PKG_EVENT_FETCHING,
	PKG_EVENT_FETCH_BEGIN,
	PKG_EVENT_FETCH_FINISHED,
@@ -1486,6 +1488,12 @@ struct pkg_event {
		} e_extract_finished;
		struct {
			struct pkg *pkg;
+
		} e_add_deps_begin;
+
		struct {
+
			struct pkg *pkg;
+
		} e_add_deps_finished;
+
		struct {
+
			struct pkg *pkg;
			struct pkg_dep *dep;
		} e_missing_dep;
		struct {
modified libpkg/pkg_add.c
@@ -237,7 +237,7 @@ pkg_add_check_pkg_archive(struct pkgdb *db, struct pkg *pkg,
	const char	*arch;
	const char	*origin;
	const char	*name;
-
	int	ret;
+
	int	ret, retcode;
	struct pkg_dep	*dep = NULL;
	char	bd[MAXPATHLEN], *basedir;
	char	dpath[MAXPATHLEN];
@@ -292,6 +292,9 @@ pkg_add_check_pkg_archive(struct pkgdb *db, struct pkg *pkg,
		basedir = NULL;
	}

+
	retcode = EPKG_FATAL;
+
	pkg_emit_add_deps_begin(pkg);
+

	while (pkg_deps(pkg, &dep) == EPKG_OK) {
		if (pkg_is_installed(db, pkg_dep_origin(dep)) == EPKG_OK)
			continue;
@@ -308,22 +311,26 @@ pkg_add_check_pkg_archive(struct pkgdb *db, struct pkg *pkg,
				ret = pkg_add(db, dpath, PKG_ADD_AUTOMATIC, keys, location);

				if (ret != EPKG_OK)
-
					return (EPKG_FATAL);
+
					goto cleanup;
			} else {
				pkg_emit_error("Missing dependency matching "
					"Origin: '%s' Version: '%s'",
					pkg_dep_get(dep, PKG_DEP_ORIGIN),
					pkg_dep_get(dep, PKG_DEP_VERSION));
				if ((flags & PKG_ADD_FORCE_MISSING) == 0)
-
					return (EPKG_FATAL);
+
					goto cleanup;
			}
		} else {
			pkg_emit_missing_dep(pkg, dep);
-
			return (EPKG_FATAL);
+
			goto cleanup;
		}
	}

-
	return (EPKG_OK);
+
	retcode = EPKG_OK;
+
cleanup:
+
	pkg_emit_add_deps_finished(pkg);
+

+
	return (retcode);
}

static int
modified libpkg/pkg_event.c
@@ -568,6 +568,28 @@ pkg_emit_install_finished(struct pkg *p)
}

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

+
	ev.type = PKG_EVENT_ADD_DEPS_BEGIN;
+
	ev.e_add_deps_begin.pkg = p;
+

+
	pkg_emit_event(&ev);
+
}
+

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

+
	ev.type = PKG_EVENT_ADD_DEPS_FINISHED;
+
	ev.e_add_deps_finished.pkg = p;
+

+
	pkg_emit_event(&ev);
+
}
+

+
void
pkg_emit_extract_begin(struct pkg *p)
{
	struct pkg_event ev;
modified libpkg/private/event.h
@@ -70,6 +70,8 @@ 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_add_deps_begin(struct pkg *p);
+
void pkg_emit_add_deps_finished(struct pkg *p);
void pkg_emit_extract_begin(struct pkg *p);
void pkg_emit_extract_finished(struct pkg *p);

modified src/event.c
@@ -66,6 +66,7 @@ static int64_t stalled;
static int64_t bytes_per_second;
static time_t last_update;
static time_t begin = 0;
+
static int add_deps_depth;

/* units for format_size */
static const char *unit_SI[] = { " ", "k", "M", "G", "T", };
@@ -149,6 +150,8 @@ job_status_end(struct sbuf *msg)
void
job_status_begin(struct sbuf *msg)
{
+
	int n;
+

	sbuf_clear(msg);
#ifdef HAVE_LIBJAIL
	static char hostname[MAXHOSTNAMELEN] = "";
@@ -170,6 +173,19 @@ job_status_begin(struct sbuf *msg)
	}
#endif

+
	/* Only used for pkg-add right now. */
+
	if (add_deps_depth) {
+
		if (add_deps_depth > 1) {
+
			for (n = 0; n < (2 * add_deps_depth); ++n) {
+
				if (n % 4 == 0 && n < (2 * add_deps_depth))
+
					sbuf_cat(msg, "|");
+
				else
+
					sbuf_cat(msg, " ");
+
			}
+
		}
+
		sbuf_cat(msg, "`-- ");
+
	}
+

	if (nbactions > 0 && nbdone > 0)
		sbuf_printf(msg, "[%d/%d] ", nbdone, nbactions);
}
@@ -618,6 +634,12 @@ event_callback(void *data, struct pkg_event *ev)
		break;
	case PKG_EVENT_EXTRACT_FINISHED:
		break;
+
	case PKG_EVENT_ADD_DEPS_BEGIN:
+
		++add_deps_depth;
+
		break;
+
	case PKG_EVENT_ADD_DEPS_FINISHED:
+
		--add_deps_depth;
+
		break;
	case PKG_EVENT_INTEGRITYCHECK_BEGIN:
		if (quiet)
			break;