]> git.ipfire.org Git - pakfire.git/commitdiff
repo: Add function to export a repository to a package list
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 31 Oct 2022 16:10:39 +0000 (16:10 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 31 Oct 2022 16:10:39 +0000 (16:10 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/include/pakfire/repo.h
src/libpakfire/repo.c

index 1648b0fad31e39747ae00c0ef2a8ed0f8a9a117d..df52cd2cccc934b9f47e8183b3380eeaa47e2d24 100644 (file)
@@ -100,6 +100,7 @@ int pakfire_repo_compose(struct pakfire* pakfire, const char* path, int flags,
 #include <pakfire/config.h>
 #include <pakfire/downloader.h>
 #include <pakfire/package.h>
+#include <pakfire/packagelist.h>
 
 #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 */
index dc83019cc7fdee64957868046fceb42182f4575f..53f0c9999c63d51930ad68693b2caa5e5483f872 100644 (file)
@@ -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;
+}