]> git.ipfire.org Git - pakfire.git/commitdiff
repo: Refactor returning all packages in a repository
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 27 Feb 2023 13:13:40 +0000 (13:13 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 27 Feb 2023 13:13:40 +0000 (13:13 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/build.c
src/libpakfire/include/pakfire/repo.h
src/libpakfire/package.c
src/libpakfire/repo.c

index 838ea1e6da690212f37da20767711ed475d81999..225ce36e85035b5199ec71e9785f648269fd3df8 100644 (file)
@@ -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;
 
index 8cce8faa2a18d1810d67c235223ec2615211fa94..b4b39ec77b10c155ab73ede41e2d1b7ffa85cef1 100644 (file)
@@ -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
 
index a37e8966aab1d0c384f3ecf77585bc8044adf0dd..c4dc0eb2ce2e5d187f2f6a042d38488c7ff57c57 100644 (file)
@@ -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;
index 4a94912cdbfb555bbdbd1562e44677208bb2c29c..9c522ffe454fb02652d5306cb097cc99f9929863 100644 (file)
@@ -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;
 }