From: Michael Tremer Date: Sat, 13 Mar 2021 13:12:35 +0000 (+0000) Subject: repo: Load package database after reading metadata X-Git-Tag: 0.9.28~1285^2~541 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bf38866526903f9dfa39e8c0f72c2e83c4f7a739;p=pakfire.git repo: Load package database after reading metadata Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/repo.c b/src/libpakfire/repo.c index f629109fc..fa01e6039 100644 --- a/src/libpakfire/repo.c +++ b/src/libpakfire/repo.c @@ -58,9 +58,6 @@ struct pakfire_repo_appdata { char* metadata; - // Database filename - char database[NAME_MAX]; - // Mirrorlist char* mirrorlist_url; char* mirrorlist; @@ -80,27 +77,50 @@ Id pakfire_repo_add_solvable(PakfireRepo repo) { } static int pakfire_repo_read_metadata(PakfireRepo repo, const char* path) { + int r; + struct json_object* json = pakfire_json_parse_from_file(repo->pakfire, path); if (!json) { ERROR(repo->pakfire, "Could not parse metadata\n"); return 1; } + char database_filename[NAME_MAX] = ""; struct json_object* database = NULL; // Search for the database name int found = json_object_object_get_ex(json, "database", &database); if (found) { - snprintf(repo->appdata->database, sizeof(repo->appdata->database) - 1, + snprintf(database_filename, sizeof(database_filename) - 1, "%s", json_object_get_string(database)); - DEBUG(repo->pakfire, "Configured package database as %s\n", repo->appdata->database); + DEBUG(repo->pakfire, "Using package database %s\n", database_filename); + } + + char* database_cache_path = NULL; + + // Try loading the database + if (*database_filename) { + database_cache_path = pakfire_make_cache_path(repo->pakfire, + "repodata/%s/%s", pakfire_repo_get_name(repo), database_filename); + + // Read database + r = pakfire_repo_read_solv(repo, database_cache_path, 0); + if (r) + goto ERROR; } + // Success + r = 0; + +ERROR: + if (database_cache_path) + free(database_cache_path); + // Free the parsed JSON object json_object_put(json); - return 0; + return r; } static void free_repo_appdata(struct pakfire_repo_appdata* appdata) {