]> git.ipfire.org Git - people/ric9/pakfire.git/commitdiff
repo: Add convenience function to iterate over all packages in a repo
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 11 Jan 2025 16:55:35 +0000 (16:55 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 11 Jan 2025 16:55:35 +0000 (16:55 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/pakfire/repo.c
src/pakfire/repo.h

index 9f9d35581a2aff884f9bc9d29fe69c8091f38ba7..a2c337a67abd60f1a41e1333d39496654a490506 100644 (file)
@@ -2130,3 +2130,30 @@ int pakfire_repo_to_packagelist(struct pakfire_repo* repo,
 
        return 0;
 }
+
+int pakfire_repo_walk_packages(struct pakfire_repo* self,
+               int (*callback)(struct pakfire_ctx* ctx, struct pakfire_package* pkg, void* data), void* data, int flags) {
+       struct pakfire_packagelist* list = NULL;
+       int r;
+
+       // Create a new packagelist
+       r = pakfire_packagelist_create(&list, self->ctx);
+       if (r < 0)
+               goto ERROR;
+
+       // Import all packages
+       r = pakfire_repo_to_packagelist(self, list);
+       if (r < 0)
+               goto ERROR;
+
+       // Iterate over all packages
+       r = pakfire_packagelist_walk(list, callback, data, flags);
+       if (r < 0)
+               goto ERROR;
+
+ERROR:
+       if (list)
+               pakfire_packagelist_unref(list);
+
+       return r;
+}
index 7b6b11e2ee2c9715d59491173fa7bcadc7cea8a0..21947b4c853a36099a5d0715d44a74f6cf2e8d34 100644 (file)
@@ -138,4 +138,7 @@ struct pakfire_mirrorlist* pakfire_repo_get_mirrorlist(struct pakfire_repo* repo
 int pakfire_repo_to_packagelist(struct pakfire_repo* repo,
        struct pakfire_packagelist* list);
 
+int pakfire_repo_walk_packages(struct pakfire_repo* self,
+       int (*callback)(struct pakfire_ctx* ctx, struct pakfire_package* pkg, void* data), void* data, int flags);
+
 #endif /* PAKFIRE_REPO_H */