From 0ed90667ee703c4f20efb160a2d367641dba3b29 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 31 Oct 2022 16:10:39 +0000 Subject: [PATCH] repo: Add function to export a repository to a package list Signed-off-by: Michael Tremer --- src/libpakfire/include/pakfire/repo.h | 4 +++ src/libpakfire/repo.c | 46 +++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/src/libpakfire/include/pakfire/repo.h b/src/libpakfire/include/pakfire/repo.h index 1648b0fad..df52cd2cc 100644 --- a/src/libpakfire/include/pakfire/repo.h +++ b/src/libpakfire/include/pakfire/repo.h @@ -100,6 +100,7 @@ int pakfire_repo_compose(struct pakfire* pakfire, const char* path, int flags, #include #include #include +#include #define PAKFIRE_REPO_COMMANDLINE "@commandline" #define PAKFIRE_REPO_DUMMY "@dummy" @@ -126,6 +127,9 @@ Repodata* pakfire_repo_get_repodata(struct pakfire_repo* repo); struct pakfire_mirrorlist* pakfire_repo_get_mirrorlist(struct pakfire_repo* repo); +int pakfire_repo_create_packagelist(struct pakfire_repo* repo, + struct pakfire_packagelist** list); + #endif #endif /* PAKFIRE_REPO_H */ diff --git a/src/libpakfire/repo.c b/src/libpakfire/repo.c index dc83019cc..53f0c9999 100644 --- a/src/libpakfire/repo.c +++ b/src/libpakfire/repo.c @@ -1519,3 +1519,49 @@ ERROR: return r; } + +/* + This function appends the IDs of all solvables to the given Queue +*/ +static int pakfire_repo_to_queue(struct pakfire_repo* repo, Queue* q) { + Repo* _repo = repo->repo; + Solvable* s = NULL; + Id id; + int i; + + // Walk through all Solvables and append them to the queue + FOR_REPO_SOLVABLES(_repo, i, s) { + // Convert the solvable into an ID + id = pool_solvable2id(_repo->pool, s); + + queue_push(q, id); + } + + return 0; +} + +int pakfire_repo_create_packagelist(struct pakfire_repo* repo, + struct pakfire_packagelist** list) { + int r; + + Queue q; + queue_init(&q); + + // Create a queue with all Solvables + r = pakfire_repo_to_queue(repo, &q); + if (r) + goto ERROR; + + // Create the packagelist + r = pakfire_packagelist_create_from_queue(list, repo->pakfire, &q); + if (r) + goto ERROR; + + // Sort the list + pakfire_packagelist_sort(*list); + +ERROR: + queue_free(&q); + + return r; +} -- 2.47.3