Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Fix repo schema updates.
Vsevolod Stakhov committed 11 years ago
commit 1cb85b7f8284c520fcc3f7759f0efe54c608fc2b
parent 26783d3
3 files changed +20 -9
modified libpkg/pkg_repo_update.c
@@ -230,16 +230,22 @@ pkg_repo_update_incremental(const char *name, struct pkg_repo *repo, time_t *mti
	size_t len = 0;
	int hash_it = 0;
	time_t now, last;
-
	bool in_trans = false, new_repo = true, legacy_repo = false;
+
	bool in_trans = false, new_repo = true, legacy_repo = false, reuse_repo;

	if (access(name, R_OK) != -1)
		new_repo = false;

	pkg_debug(1, "Pkgrepo, begin incremental update of '%s'", name);
-
	if ((rc = pkgdb_repo_open(name, false, &sqlite)) != EPKG_OK) {
+
	if ((rc = pkgdb_repo_open(name, false, &sqlite, &reuse_repo)) != EPKG_OK) {
		return (EPKG_FATAL);
	}

+
	if (!reuse_repo) {
+
		pkg_debug(1, "Pkgrepo, need to re-create database '%s'", name);
+
		local_t = 0;
+
		*mtime = 0;
+
	}
+

	if ((rc = pkgdb_repo_init(sqlite)) != EPKG_OK) {
		goto cleanup;
	}
modified libpkg/pkgdb_repo.c
@@ -319,15 +319,17 @@ pkgdb_repo_finalize_statements(void)
}

int
-
pkgdb_repo_open(const char *repodb, bool force, sqlite3 **sqlite)
+
pkgdb_repo_open(const char *repodb, bool force, sqlite3 **sqlite,
+
	bool *incremental)
{
-
	bool incremental = false;
	bool db_not_open;
	int reposcver;
	int retcode = EPKG_OK;

	if (access(repodb, R_OK) == 0)
-
		incremental = true;
+
		*incremental = true;
+
	else
+
		*incremental = false;

	sqlite3_initialize();
	db_not_open = true;
@@ -343,7 +345,7 @@ pkgdb_repo_open(const char *repodb, bool force, sqlite3 **sqlite)
			   update, then we cannot do an incremental update.
			   Delete the existing repo, and promote this to a
			   full update */
-
		if (!incremental)
+
		if (!*incremental)
			continue;
		retcode = get_repo_user_version(*sqlite, "main", &reposcver);
		if (retcode != EPKG_OK)
@@ -355,7 +357,7 @@ pkgdb_repo_open(const char *repodb, bool force, sqlite3 **sqlite)
						REPO_SCHEMA_VERSION);
			sqlite3_close(*sqlite);
			unlink(repodb);
-
			incremental = false;
+
			*incremental = false;
			db_not_open = true;
		}
	}
@@ -363,7 +365,7 @@ pkgdb_repo_open(const char *repodb, bool force, sqlite3 **sqlite)
	sqlite3_create_function(*sqlite, "file_exists", 2, SQLITE_ANY, NULL,
	    file_exists, NULL, NULL);

-
	if (!incremental) {
+
	if (!*incremental) {
		retcode = sql_exec(*sqlite, initsql, REPO_SCHEMA_VERSION);
		if (retcode != EPKG_OK)
			return (retcode);
modified libpkg/private/pkgdb.h
@@ -72,9 +72,12 @@ void pkgshell_open(const char **r);
 * @param repodb path of repodb
 * @param force create repository if not exists
 * @param sqlite destination db pointer
+
 * @param incremental if this param is set to false, then database was re-created
+
 *  and thus needs to be updated
 * @return EPKG_OK if succeed
 */
-
int pkgdb_repo_open(const char *repodb, bool force, sqlite3 **sqlite);
+
int pkgdb_repo_open(const char *repodb, bool force, sqlite3 **sqlite,
+
	bool *incremental);

/**
 * Init repository for pkgdb_repo* functions