Radish alpha
H
HardenedBSD Package Manager
Radicle
Git (anonymous pull)
Log in to clone via SSH
Simplify transaction management.
Julien Laffaye committed 14 years ago
commit 87758b0f255add3e7a44f055531039444c5697f6
parent 63794f188c7aafa02344f921d3c0e419d648384a
4 files changed +7 -45
modified libpkg/pkg.h
@@ -544,22 +544,13 @@ int pkgdb_dump(struct pkgdb *db, char *dest);
int pkgdb_load(struct pkgdb *db, char *dest);

/**
-
 * Whether a package database instance has a particular flag.
-
 * @return 0 if false, true otherwise
-
 */
-
int pkgdb_has_flag(struct pkgdb *db, int flag);
-

-
/* The flags used in pkgdb_has_flag() */
-
#define	PKGDB_FLAG_IN_FLIGHT	(1 << 0)
-

-
/**
-
 * register a package to the database.
+
 * Register a package to the database.
 * @return An error code.
 */
int pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg, int complete);

/**
-
 * Complete an in-flight package registration command.
+
 * Commit or rollback the package to the database..
 */
int pkgdb_register_finale(struct pkgdb *db, int retcode);

modified libpkg/pkg_add.c
@@ -212,8 +212,8 @@ pkg_add(struct pkgdb *db, const char *path, int flags)
	else
		retcode = pkgdb_register_pkg(db, pkg, 1);

-
	if (retcode != EPKG_OK || pkgdb_has_flag(db, PKGDB_FLAG_IN_FLIGHT) == 0)
-
		goto cleanup_reg;
+
	if (retcode != EPKG_OK)
+
		goto cleanup;

	/*
	 * Execute pre-install scripts
modified libpkg/pkgdb.c
@@ -1199,19 +1199,6 @@ pkgdb_load_mtree(struct pkgdb *db, struct pkg *pkg)
}

int
-
pkgdb_has_flag(struct pkgdb *db, int flag)
-
{
-
	assert(db != NULL);
-

-
	return (db->flags & flag);
-
}
-

-
#define	PKGDB_SET_FLAG(db, flag) \
-
	(db)->flags |= (flag)
-
#define	PKGDB_UNSET_FLAG(db, flag) \
-
	(db)->flags &= ~(flag)
-

-
int
pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg, int complete)
{
	struct pkg_dep *dep = NULL;
@@ -1298,18 +1285,11 @@ pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg, int complete)

	assert(db != NULL);

-
	if (!complete && pkgdb_has_flag(db, PKGDB_FLAG_IN_FLIGHT)) {
-
		pkg_emit_error("%s", "tried to register a package with an in-flight SQL command");
-
		return (EPKG_FATAL);
-
	}
-

	s = db->sqlite;

	if (!complete && sql_exec(s, sql_begin) != EPKG_OK)
		return (EPKG_FATAL);

-
	PKGDB_SET_FLAG(db, PKGDB_FLAG_IN_FLIGHT);
-

	/* insert mtree record if any */
	if (sqlite3_prepare_v2(s, sql_mtree, -1, &stmt_mtree, NULL) != SQLITE_OK) {
		ERROR_SQLITE(s);
@@ -1671,20 +1651,12 @@ int
pkgdb_register_finale(struct pkgdb *db, int retcode)
{
	int ret = EPKG_OK;
-
	const char *commands[] = { "COMMIT;", "ROLLBACK;", NULL };
-
	const char *command;
+
	const char *cmd;

	assert(db != NULL);

-
	if (!pkgdb_has_flag(db, PKGDB_FLAG_IN_FLIGHT)) {
-
		pkg_emit_error("database command not in flight (misuse)");
-
		return (EPKG_FATAL);
-
	}
-

-
	command = (retcode == EPKG_OK) ? commands[0] : commands[1];
-
	ret = sql_exec(db->sqlite, command);
-

-
	PKGDB_UNSET_FLAG(db, PKGDB_FLAG_IN_FLIGHT);
+
	cmd = (retcode == EPKG_OK) ? "COMMIT;" : "ROLLBACK;";
+
	ret = sql_exec(db->sqlite, cmd);

	return (ret);
}
modified libpkg/pkgdb.h
@@ -6,7 +6,6 @@
#include "sqlite3.h"

struct pkgdb {
-
	uint64_t flags;
	sqlite3 *sqlite;
	pkgdb_t type;
	unsigned int writable :1;