]> git.ipfire.org Git - pakfire.git/commitdiff
repo: Load package database after reading metadata
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 13 Mar 2021 13:12:35 +0000 (13:12 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 13 Mar 2021 13:12:35 +0000 (13:12 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/repo.c

index f629109fc017ebe58728cb27a0800a93216c62d6..fa01e6039dbe7f402f16c718de2edbe012fe16c7 100644 (file)
@@ -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) {