Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
cleanup: avoid duplication of the logic to lock to the db
Baptiste Daroussin committed 8 days ago
commit ada7b0d8ba6d631bae80a91fa8b564175ac39026
parent 41c5f72
17 files changed +30 -70
modified src/add.c
@@ -137,11 +137,8 @@ exec_add(int argc, char **argv)
	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK)
		return (EXIT_FAILURE);

-
	if (pkgdb_obtain_lock(db, PKGDB_LOCK_EXCLUSIVE) != EPKG_OK) {
-
		pkgdb_close(db);
-
		warnx("Cannot get an exclusive lock on a database, it is locked by another process");
+
	if (!pkgdb_lock_or_fail(db, PKGDB_LOCK_EXCLUSIVE))
		return (EXIT_FAILURE);
-
	}

	failedpkgs = xstring_new();
	for (i = 0; i < argc; i++) {
modified src/annotate.c
@@ -318,11 +318,8 @@ exec_annotate(int argc, char **argv)
		return (EXIT_FAILURE);
	}

-
	if (pkgdb_obtain_lock(db, lock_type) != EPKG_OK) {
-
		pkgdb_close(db);
-
		warnx("Cannot get an exclusive lock on a database, it is locked by another process");
+
	if (!pkgdb_lock_or_fail(db, lock_type))
		return (EXIT_FAILURE);
-
	}

	if ((it = pkgdb_query(db, pkgname, match)) == NULL) {
		exitcode = EXIT_FAILURE;
modified src/autoremove.c
@@ -112,11 +112,8 @@ exec_autoremove(int argc, char **argv)
		return (EXIT_FAILURE);
	}

-
	if (pkgdb_obtain_lock(db, lock_type) != EPKG_OK) {
-
		pkgdb_close(db);
-
		warnx("Cannot get an advisory lock on a database, it is locked by another process");
+
	if (!pkgdb_lock_or_fail(db, lock_type))
		return (EXIT_FAILURE);
-
	}
	/* Always force packages to be removed */
	if (pkg_jobs_new(&jobs, PKG_JOBS_AUTOREMOVE, db) != EPKG_OK) {
		pkgdb_close(db);
modified src/create.c
@@ -65,11 +65,8 @@ pkg_create_matches(int argc, char **argv, match_t match, struct pkg_create *pc)
		return (EXIT_FAILURE);
	}
	/* XXX: get rid of hardcoded timeouts */
-
	if (pkgdb_obtain_lock(db, PKGDB_LOCK_READONLY) != EPKG_OK) {
-
		pkgdb_close(db);
-
		warnx("Cannot get a read lock on a database, it is locked by another process");
+
	if (!pkgdb_lock_or_fail(db, PKGDB_LOCK_READONLY))
		return (EXIT_FAILURE);
-
	}

	for (i = 0; i < argc || match == MATCH_ALL; i++) {
		if (match == MATCH_ALL) {
modified src/delete.c
@@ -167,11 +167,8 @@ exec_delete(int argc, char **argv)
	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK)
		return (EXIT_FAILURE);

-
	if (pkgdb_obtain_lock(db, lock_type) != EPKG_OK) {
-
		pkgdb_close(db);
-
		warnx("Cannot get an advisory lock on a database, it is locked by another process");
+
	if (!pkgdb_lock_or_fail(db, lock_type))
		return (EXIT_FAILURE);
-
	}


	if (pkg_jobs_new(&jobs, PKG_JOBS_DEINSTALL, db) != EPKG_OK) {
modified src/fetch.c
@@ -178,11 +178,8 @@ exec_fetch(int argc, char **argv)
	if (pkgdb_open_all2(&db, PKGDB_REMOTE, &reponames) != EPKG_OK)
		return (EXIT_FAILURE);

-
	if (pkgdb_obtain_lock(db, PKGDB_LOCK_READONLY) != EPKG_OK) {
-
		pkgdb_close(db);
-
		warnx("Cannot get a read lock on a database, it is locked by another process");
+
	if (!pkgdb_lock_or_fail(db, PKGDB_LOCK_READONLY))
		return (EXIT_FAILURE);
-
	}


	if (pkg_jobs_new(&jobs, PKG_JOBS_FETCH, db) != EPKG_OK)
modified src/info.c
@@ -356,11 +356,8 @@ exec_info(int argc, char **argv)
		return (EXIT_FAILURE);

	pkg_drop_privileges();
-
	if (pkgdb_obtain_lock(db, PKGDB_LOCK_READONLY) != EPKG_OK) {
-
		pkgdb_close(db);
-
		warnx("Cannot get a read lock on a database, it is locked by another process");
+
	if (!pkgdb_lock_or_fail(db, PKGDB_LOCK_READONLY))
		return (EXIT_FAILURE);
-
	}

	if ((opt & INFO_RAW) &&
	    (opt & (INFO_RAW_JSON | INFO_RAW_JSON_COMPACT))) {
modified src/install.c
@@ -215,11 +215,8 @@ exec_install(int argc, char **argv)
	    &reponames) != EPKG_OK)
		return (EXIT_FAILURE);

-
	if (pkgdb_obtain_lock(db, lock_type) != EPKG_OK) {
-
		pkgdb_close(db);
-
		warnx("Cannot get an advisory lock on a database, it is locked by another process");
+
	if (!pkgdb_lock_or_fail(db, lock_type))
		return (EXIT_FAILURE);
-
	}

	status = EXIT_FAILURE;
	if (pkg_jobs_new(&jobs, PKG_JOBS_INSTALL, db) != EPKG_OK)
modified src/lock.c
@@ -83,12 +83,8 @@ do_lock_unlock(struct pkgdb *db, int match, const char *pkgname,
	bool		 gotone = false;
	vec_t(struct pkg *)pkgs = vec_init();

-
	if (pkgdb_obtain_lock(db, PKGDB_LOCK_EXCLUSIVE) != EPKG_OK) {
-
		pkgdb_close(db);
-
		warnx("Cannot get an exclusive lock on database. "
-
		      "It is locked by another process");
+
	if (!pkgdb_lock_or_fail(db, PKGDB_LOCK_EXCLUSIVE))
		return (EXIT_FAILURE);
-
	}

	if ((it = pkgdb_query(db, pkgname, match)) == NULL) {
		exitcode = EXIT_FAILURE;
modified src/pkgcli.h
@@ -8,6 +8,7 @@
#ifndef _PKGCLI_H
#define _PKGCLI_H

+
#include <err.h>
#include <search.h>
#include <stdbool.h>
#include <stdint.h>
@@ -252,6 +253,18 @@ void usage_config(void);
			 INFO_DESCR|INFO_MESSAGE|INFO_DEPS|INFO_RDEPS| \
			 INFO_FILES|INFO_DIRS)

+
static inline bool
+
pkgdb_lock_or_fail(struct pkgdb *db, pkgdb_lock_t lock_type)
+
{
+
	if (pkgdb_obtain_lock(db, lock_type) != EPKG_OK) {
+
		pkgdb_close(db);
+
		warnx("Cannot get an advisory lock on a database, "
+
		    "it is locked by another process");
+
		return (false);
+
	}
+
	return (true);
+
}
+

bool query_yesno(bool deft, const char *msg, ...);
int query_select(const char *msg, const char **opts, int ncnt, int deft);
bool query_tty_yesno(bool deft, const char *msg, ...);
modified src/shlib.c
@@ -193,11 +193,8 @@ exec_shlib(int argc, char **argv)
	if (retcode != EPKG_OK)
		return (EXIT_FAILURE);

-
	if (pkgdb_obtain_lock(db, PKGDB_LOCK_READONLY) != EPKG_OK) {
-
		pkgdb_close(db);
-
		warnx("Cannot get a read lock on a database, it is locked by another process");
+
	if (!pkgdb_lock_or_fail(db, PKGDB_LOCK_READONLY))
		return (EXIT_FAILURE);
-
	}

	if (retcode == EPKG_OK && !requires_only)
		retcode = pkgs_providing_lib(db, libname);
modified src/stats.c
@@ -102,11 +102,8 @@ exec_stats(int argc, char **argv)
		return (EXIT_FAILURE);
	}

-
	if (pkgdb_obtain_lock(db, PKGDB_LOCK_READONLY) != EPKG_OK) {
-
		pkgdb_close(db);
-
		warnx("Cannot get a read lock on a database, it is locked by another process");
+
	if (!pkgdb_lock_or_fail(db, PKGDB_LOCK_READONLY))
		return (EXIT_FAILURE);
-
	}

	if (opt & STATS_LOCAL) {
		printf("Local package database:\n");
modified src/unregister.c
@@ -145,11 +145,8 @@ exec_unregister(int argc, char **argv)
	if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK)
		return (EXIT_FAILURE);

-
	if (pkgdb_obtain_lock(db, lock_type) != EPKG_OK) {
-
		pkgdb_close(db);
-
		warnx("Cannot get an advisory lock on a database, it is locked by another process");
+
	if (!pkgdb_lock_or_fail(db, lock_type))
		return (EXIT_FAILURE);
-
	}


	if (pkg_jobs_new(&jobs, PKG_JOBS_DEINSTALL, db) != EPKG_OK) {
modified src/updating.c
@@ -215,11 +215,8 @@ exec_updating(int argc, char **argv)
	if (pkgdb_open(&db, PKGDB_DEFAULT_READONLY) != EPKG_OK)
		return (EXIT_FAILURE);

-
	if (pkgdb_obtain_lock(db, PKGDB_LOCK_READONLY) != EPKG_OK) {
-
		pkgdb_close(db);
-
		warnx("Cannot get a read lock on a database, it is locked by another process");
+
	if (!pkgdb_lock_or_fail(db, PKGDB_LOCK_READONLY))
		return (EXIT_FAILURE);
-
	}

	if (updatingfile == NULL) {
		const char *portsdir = pkg_object_string(pkg_config_get("PORTSDIR"));
modified src/upgrade.c
@@ -365,9 +365,7 @@ exec_upgrade(int argc, char **argv)
		return (EXIT_FAILURE);
	}

-
	if (pkgdb_obtain_lock(db, lock_type) != EPKG_OK) {
-
		pkgdb_close(db);
-
		warnx("Cannot get an advisory lock on a database, it is locked by another process");
+
	if (!pkgdb_lock_or_fail(db, lock_type)) {
		vec_free(&reponames);
		return (EXIT_FAILURE);
	}
modified src/version.c
@@ -498,12 +498,8 @@ do_source_remote(unsigned int opt, char limchar, char *pattern, match_t match,
	if (pkgdb_open_all2(&db, PKGDB_REMOTE, reponames) != EPKG_OK)
		return (EXIT_FAILURE);

-
	if (pkgdb_obtain_lock(db, PKGDB_LOCK_READONLY) != EPKG_OK) {
-
		pkgdb_close(db);
-
		warnx("Cannot get a read lock on a database. "
-
		      "It is locked by another process");
+
	if (!pkgdb_lock_or_fail(db, PKGDB_LOCK_READONLY))
		return (EXIT_FAILURE);
-
	}

	it = pkgdb_query(db, pattern, match);
	if (it == NULL)
@@ -745,12 +741,8 @@ do_source_ports(unsigned int opt, char limchar, char *pattern, match_t match,
	if (pkgdb_open(&db, PKGDB_DEFAULT_READONLY) != EPKG_OK)
		return (EXIT_FAILURE);

-
	if (pkgdb_obtain_lock(db, PKGDB_LOCK_READONLY) != EPKG_OK) {
-
		pkgdb_close(db);
-
		warnx("Cannot get a read lock on a database. "
-
		      "It is locked by another process");
+
	if (!pkgdb_lock_or_fail(db, PKGDB_LOCK_READONLY))
		return (EXIT_FAILURE);
-
	}

	if ((it = pkgdb_query(db, pattern, match)) == NULL)
		goto cleanup;
modified src/which.c
@@ -107,11 +107,8 @@ exec_which(int argc, char **argv)
		return (EXIT_FAILURE);
	}

-
	if (pkgdb_obtain_lock(db, PKGDB_LOCK_READONLY) != EPKG_OK) {
-
		pkgdb_close(db);
-
		warnx("Cannot get a read lock on a database, it is locked by another process");
+
	if (!pkgdb_lock_or_fail(db, PKGDB_LOCK_READONLY))
		return (EXIT_FAILURE);
-
	}

	if (search_s) {
		if ((path = getenv("PATH")) == NULL) {