Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Update digests in the local database.
Vsevolod Stakhov committed 11 years ago
commit 65f3d62ee0a8581351d507265fafd094ac09e3b0
parent 04ab399
3 files changed +32 -3
modified libpkg/pkg_jobs.c
@@ -500,7 +500,7 @@ iter_again:
 * Calculate manifest for packages that lack it
 */
static int
-
pkg_jobs_digest_manifest(struct pkg *pkg)
+
pkg_jobs_digest_manifest(struct pkg_jobs *j, struct pkg *pkg)
{
	char *new_digest;
	int rc;
@@ -512,6 +512,7 @@ pkg_jobs_digest_manifest(struct pkg *pkg)

	if (rc == EPKG_OK) {
		pkg_set(pkg, PKG_DIGEST, new_digest);
+
		pkgdb_set_pkg_digest(j->db, pkg);
		free(new_digest);
	}

@@ -537,7 +538,7 @@ pkg_jobs_handle_pkg_universe(struct pkg_jobs *j, struct pkg *pkg,
	if (digest == NULL) {
		pkg_debug(3, "no digest found for package %s (%s-%s)", uid,
				name, version);
-
		if (pkg_jobs_digest_manifest(pkg) != EPKG_OK) {
+
		if (pkg_jobs_digest_manifest(j, pkg) != EPKG_OK) {
			*found = NULL;
			return (EPKG_FATAL);
		}
@@ -921,7 +922,7 @@ pkg_jobs_process_remote_pkg(struct pkg_jobs *j, struct pkg *p,
	pkg_get(p, PKG_UNIQUEID, &uid, PKG_DIGEST, &digest);

	if (digest == NULL) {
-
		if (pkg_jobs_digest_manifest(p) != EPKG_OK) {
+
		if (pkg_jobs_digest_manifest(j, p) != EPKG_OK) {
			return (EPKG_FATAL);
		}
		pkg_get(p, PKG_DIGEST, &digest);
modified libpkg/pkgdb.c
@@ -2463,6 +2463,7 @@ typedef enum _sql_prstmt_index {
	PKG_PROVIDE,
	PROVIDE,
	FTS_APPEND,
+
	UPDATE_DIGEST,
	PRSTMT_LAST,
} sql_prstmt_index;

@@ -2665,6 +2666,11 @@ static sql_prstmt sql_prepared_statements[PRSTMT_LAST] = {
		"INSERT OR ROLLBACK INTO pkg_search(id, name, origin) "
		"VALUES (?1, ?2 || '-' || ?3, ?4);",
		"ITTT"
+
	},
+
	[UPDATE_DIGEST] = {
+
		NULL,
+
		"UPDATE packages SET manifestdigest=?1 WHERE id=?2;",
+
		"TI"
	}
	/* PRSTMT_LAST */
};
@@ -3278,6 +3284,27 @@ pkgdb_add_annotation(struct pkgdb *db, struct pkg *pkg, const char *tag,
}

int
+
pkgdb_set_pkg_digest(struct pkgdb *db, struct pkg *pkg)
+
{
+
	const char *digest;
+
	int64_t id;
+

+
	assert(pkg != NULL);
+
	assert(db != NULL);
+

+
	if (!db->prstmt_initialized && prstmt_initialize(db) != EPKG_OK)
+
		return (EPKG_FATAL);
+

+
	pkg_get(pkg, PKG_DIGEST, &digest, PKG_ROWID, &id);
+
	if (run_prstmt(UPDATE_DIGEST, digest, id) != SQLITE_DONE) {
+
		ERROR_SQLITE(db->sqlite, SQL(UPDATE_DIGEST));
+
		return (EPKG_FATAL);
+
	}
+

+
	return (EPKG_OK);
+
}
+

+
int
pkgdb_modify_annotation(struct pkgdb *db, struct pkg *pkg, const char *tag,
        const char *value)
{
modified libpkg/private/pkg.h
@@ -522,6 +522,7 @@ int pkgdb_update_shlibs_provided(struct pkg *pkg, int64_t package_id, sqlite3 *s
int pkgdb_update_provides(struct pkg *pkg, int64_t package_id, sqlite3 *s);
int pkgdb_insert_annotations(struct pkg *pkg, int64_t package_id, sqlite3 *s);
int pkgdb_register_finale(struct pkgdb *db, int retcode);
+
int pkgdb_set_pkg_digest(struct pkgdb *db, struct pkg *pkg);

int pkg_register_shlibs(struct pkg *pkg, const char *root);