char* metadata;
- // Database filename
- char database[NAME_MAX];
-
// Mirrorlist
char* mirrorlist_url;
char* mirrorlist;
}
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) {