Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
use pkg_event for ENODB
Baptiste Daroussin committed 14 years ago
commit 672c40f2c2662d2a595fb39f840e1c0868b65963
parent a52a321
9 files changed +48 -12
modified libpkg/pkg.h
@@ -740,6 +740,8 @@ typedef enum {
	PKG_EVENT_CREATE_DB_ERROR,
	PKG_EVENT_REQUIRED,
	PKG_EVENT_MISSING_DEP,
+
	PKG_EVENT_NOREMOTEDB,
+
	PKG_EVENT_NOLOCALDB,
} pkg_event_t;

struct pkg_event {
@@ -787,6 +789,9 @@ struct pkg_event {
			struct pkg *pkg;
			int force;
		} e_required;
+
		struct {
+
			const char *repo;
+
		} e_remotedb;
	};
};

modified libpkg/pkg_event.c
@@ -108,7 +108,7 @@ pkg_emit_integritycheck_begin(void)
{
	struct pkg_event ev;
	ev.type = PKG_EVENT_INTEGRITYCHECK_BEGIN;
-
	
+

	pkg_emit_event(&ev);
}

@@ -117,7 +117,7 @@ pkg_emit_integritycheck_finished(void)
{
	struct pkg_event ev;
	ev.type = PKG_EVENT_INTEGRITYCHECK_FINISHED;
-
	
+

	pkg_emit_event(&ev);
}

@@ -205,3 +205,22 @@ pkg_emit_required(struct pkg *p, int force)
	pkg_emit_event(&ev);
}

+
void
+
pkg_emit_nolocaldb(void)
+
{
+
	struct pkg_event ev;
+
	ev.type = PKG_EVENT_NOLOCALDB;
+

+
	pkg_emit_event(&ev);
+
}
+

+
void
+
pkg_emit_noremotedb(const char *repo)
+
{
+
	struct pkg_event ev;
+
	ev.type = PKG_EVENT_NOREMOTEDB;
+

+
	ev.e_remotedb.repo = repo;
+

+
	pkg_emit_event(&ev);
+
}
modified libpkg/pkgdb.c
@@ -456,10 +456,12 @@ pkgdb_open(struct pkgdb **db_p, pkgdb_t type)

		if (eaccess(localpath, R_OK) != 0) {
			if (errno != ENOENT) {
+
				pkg_emit_nolocaldb();
				pkgdb_close(db);
				return (EPKG_ENODB);
			} else if (eaccess(dbdir, W_OK) != 0) {
				/* If we need to create the db but can not write to it, fail early */
+
				pkg_emit_nolocaldb();
				pkgdb_close(db);
				return (EPKG_ENODB);
			} else {
@@ -537,7 +539,7 @@ pkgdb_open(struct pkgdb **db_p, pkgdb_t type)
						dbdir, repo_name);

				if (access(remotepath, R_OK) != 0) {
-
					pkg_emit_error("Unable to remote database %s, try running `%s update` first ", remotepath, getprogname());
+
					pkg_emit_noremotedb(repo_name);
					pkgdb_close(db);
					return (EPKG_ENODB);
				}
@@ -562,7 +564,7 @@ pkgdb_open(struct pkgdb **db_p, pkgdb_t type)
			snprintf(remotepath, sizeof(remotepath), "%s/repo.sqlite", dbdir);

			if (access(remotepath, R_OK) != 0) {
-
				pkg_emit_error("Unable to remote database %s, try running `%s update` first ", remotepath, getprogname());
+
				pkg_emit_noremotedb("default");
				pkgdb_close(db);
				return (EPKG_ENODB);
			}
modified libpkg/private/event.h
@@ -15,5 +15,7 @@ void pkg_emit_missing_dep(struct pkg *p, struct pkg_dep *d);
void pkg_emit_required(struct pkg *p, int force);
void pkg_emit_integritycheck_begin(void);
void pkg_emit_integritycheck_finished(void);
+
void pkg_emit_noremotedb(const char *);
+
void pkg_emit_nolocaldb(void);

#endif
modified pkg/audit.c
@@ -315,7 +315,7 @@ exec_audit(int argc, char **argv)
		 * it just means there is no package
		 */
		if (geteuid() == 0)
-
			err(EX_IOERR, "Unable to create local database");
+
			return (EX_IOERR);
		return (EXIT_SUCCESS);
	}

modified pkg/check.c
@@ -272,7 +272,7 @@ exec_check(int argc, char **argv)
	ret = pkgdb_open(&db, PKGDB_DEFAULT);
	if (ret == EPKG_ENODB) {
		if (geteuid() == 0)
-
			err(EX_IOERR, "Unable to create local database");
+
			return (EX_IOERR);

		return (retcode);
	}
modified pkg/event.c
@@ -1,7 +1,9 @@
#include <sys/param.h>
+
#include <sys/types.h>
#include <string.h>
#include <err.h>
#include <stdarg.h>
+
#include <unistd.h>

#include "pkg.h"
#include "progressmeter.h"
@@ -94,9 +96,17 @@ event_callback(void *data, struct pkg_event *ev)
		printf("%s-%s already installed\n", name, version);
		break;
	case PKG_EVENT_MISSING_DEP:
-
		printf("missing dependency %s-%s", pkg_dep_get(ev->e_missing_dep.dep, PKG_DEP_NAME),
+
		fprintf(stderr, "missing dependency %s-%s", pkg_dep_get(ev->e_missing_dep.dep, PKG_DEP_NAME),
		    pkg_dep_get(ev->e_missing_dep.dep, PKG_DEP_VERSION));
		break;
+
	case PKG_EVENT_NOREMOTEDB:
+
		fprintf(stderr, "Unable to open remote database \"%s\", try running `%s update` first\n", ev->e_remotedb.repo, getprogname());
+
		break;
+
	case PKG_EVENT_NOLOCALDB:
+
		/* only cares if run as root */
+
		if (geteuid() == 0)
+
			fprintf(stderr, "Unable to create local database");
+
		break;
	default:
		break;
	}
modified pkg/info.c
@@ -141,7 +141,7 @@ exec_info(int argc, char **argv)
	ret = pkgdb_open(&db, PKGDB_DEFAULT);
	if (ret == EPKG_ENODB) {
		if (geteuid() == 0)
-
			err(EX_IOERR, "Unable to create local database");
+
			return (EX_IOERR);

		if (match == MATCH_ALL)
			return (EXIT_SUCCESS);
modified pkg/query.c
@@ -475,10 +475,8 @@ exec_query(int argc, char **argv)

	ret = pkgdb_open(&db, PKGDB_DEFAULT);
	if (ret == EPKG_ENODB) {
-
		if (geteuid() == 0) {
-
			err(EX_IOERR, "Unable to create local database");
-
			return (EXIT_FAILURE);
-
		}
+
		if (geteuid() == 0)
+
			return (EX_IOERR);

		/* do not fail if run as a user */
		return (EXIT_SUCCESS);