From: Michael Tremer Date: Mon, 27 Feb 2023 13:13:40 +0000 (+0000) Subject: repo: Refactor returning all packages in a repository X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d789a72a6885d15e433c245a73396bcaece02051;p=people%2Fstevee%2Fpakfire.git repo: Refactor returning all packages in a repository Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/build.c b/src/libpakfire/build.c index 838ea1e6..225ce36e 100644 --- a/src/libpakfire/build.c +++ b/src/libpakfire/build.c @@ -919,8 +919,13 @@ static int pakfire_build_packages(struct pakfire_build* build, if (r) goto ERROR; + // Create a new packagelist + r = pakfire_packagelist_create(&build->packages, build->pakfire); + if (r) + goto ERROR; + // Fetch all packages - r = pakfire_repo_create_packagelist(build->repo, &build->packages); + r = pakfire_repo_to_packagelist(build->repo, build->packages); if (r) goto ERROR; diff --git a/src/libpakfire/include/pakfire/repo.h b/src/libpakfire/include/pakfire/repo.h index 8cce8faa..b4b39ec7 100644 --- a/src/libpakfire/include/pakfire/repo.h +++ b/src/libpakfire/include/pakfire/repo.h @@ -132,8 +132,8 @@ 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); +int pakfire_repo_to_packagelist(struct pakfire_repo* repo, + struct pakfire_packagelist* list); #endif diff --git a/src/libpakfire/package.c b/src/libpakfire/package.c index a37e8966..c4dc0eb2 100644 --- a/src/libpakfire/package.c +++ b/src/libpakfire/package.c @@ -1815,8 +1815,13 @@ static int pakfire_package_add_build_packages(struct pakfire_package* pkg, goto ERROR; } + // Create a new list + r = pakfire_packagelist_create(&packages, pkg->pakfire); + if (r) + goto ERROR; + // Fetch all installed packages - r = pakfire_repo_create_packagelist(repo, &packages); + r = pakfire_repo_to_packagelist(repo, packages); if (r) { ERROR(pkg->pakfire, "Could not fetch packages from installed repository: %m\n"); goto ERROR; diff --git a/src/libpakfire/repo.c b/src/libpakfire/repo.c index 4a94912c..9c522ffe 100644 --- a/src/libpakfire/repo.c +++ b/src/libpakfire/repo.c @@ -1607,48 +1607,32 @@ 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; +int pakfire_repo_to_packagelist(struct pakfire_repo* repo, + struct pakfire_packagelist* list) { + struct pakfire_package* pkg = NULL; 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); + FOR_REPO_SOLVABLES(repo->repo, i, s) { + // Convert the solvable into an ID + id = pool_solvable2id(repo->repo->pool, s); - // Create a queue with all Solvables - r = pakfire_repo_to_queue(repo, &q); - if (r) - goto ERROR; + // Create a new package + r = pakfire_package_create_from_solvable(&pkg, repo->pakfire, id); + if (r) + return r; - // Create the packagelist - r = pakfire_packagelist_create_from_queue(list, repo->pakfire, &q); - if (r) - goto ERROR; + // Append the package to the list + r = pakfire_packagelist_push(list, pkg); + pakfire_package_unref(pkg); + if (r) + return r; + } // Sort the list - pakfire_packagelist_sort(*list); - -ERROR: - queue_free(&q); + pakfire_packagelist_sort(list); - return r; + return 0; }