From: Michael Tremer Date: Mon, 31 Oct 2022 16:10:39 +0000 (+0000) Subject: repo: Add function to export a repository to a package list X-Git-Tag: 0.9.28~173 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0ed90667ee703c4f20efb160a2d367641dba3b29;p=pakfire.git repo: Add function to export a repository to a package list Signed-off-by: Michael Tremer --- 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; +}