From: Michael Tremer Date: Sat, 11 Jan 2025 16:55:35 +0000 (+0000) Subject: repo: Add convenience function to iterate over all packages in a repo X-Git-Tag: 0.9.30~436 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=02b9f3361b16461e0d05a62a7aee57e48b48eb50;p=pakfire.git repo: Add convenience function to iterate over all packages in a repo Signed-off-by: Michael Tremer --- diff --git a/src/pakfire/repo.c b/src/pakfire/repo.c index 9f9d35581..a2c337a67 100644 --- a/src/pakfire/repo.c +++ b/src/pakfire/repo.c @@ -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; +} diff --git a/src/pakfire/repo.h b/src/pakfire/repo.h index 7b6b11e2e..21947b4c8 100644 --- a/src/pakfire/repo.h +++ b/src/pakfire/repo.h @@ -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 */