From 843754780043abb6121baf01b4fd644e6593de33 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 26 Oct 2024 11:07:49 +0000 Subject: [PATCH] build: Abort if linting failed Signed-off-by: Michael Tremer --- src/cli/lib/dump.c | 2 +- src/libpakfire/build.c | 22 ++++++++++++++------ src/libpakfire/include/pakfire/packagelist.h | 6 +++++- src/libpakfire/package.c | 2 +- src/libpakfire/packagelist.c | 18 ++++++++++++---- src/libpakfire/pakfire.c | 2 +- 6 files changed, 38 insertions(+), 14 deletions(-) diff --git a/src/cli/lib/dump.c b/src/cli/lib/dump.c index 00e35a0bd..80640ca15 100644 --- a/src/cli/lib/dump.c +++ b/src/cli/lib/dump.c @@ -61,7 +61,7 @@ static int __cli_dump_package(struct pakfire_ctx* ctx, struct pakfire_package* p } int cli_dump_packagelist(struct pakfire_packagelist* list, int flags) { - return pakfire_packagelist_walk(list, __cli_dump_package, &flags); + return pakfire_packagelist_walk(list, __cli_dump_package, &flags, 0); } int cli_dump_repolist(struct pakfire_repolist* list, int flags) { diff --git a/src/libpakfire/build.c b/src/libpakfire/build.c index 9554416c4..cbc25a789 100644 --- a/src/libpakfire/build.c +++ b/src/libpakfire/build.c @@ -1005,7 +1005,7 @@ static int pakfire_build_packages(struct pakfire_build* build, goto ERROR; // Dump them all - r = pakfire_packagelist_walk(build->packages, pakfire_build_package_dump, build); + r = pakfire_packagelist_walk(build->packages, pakfire_build_package_dump, build, 0); if (r) goto ERROR; @@ -1881,7 +1881,8 @@ static int pakfire_build_install_test(struct pakfire_build* build) { goto ERROR; // Add all packages - r = pakfire_packagelist_walk(build->packages, pakfire_build_install_package, transaction); + r = pakfire_packagelist_walk(build->packages, + pakfire_build_install_package, transaction, 0); if (r < 0) goto ERROR; @@ -1980,7 +1981,7 @@ static int pakfire_build_copy_packages(struct pakfire_build* build) { // Copy all packages to the target path if (*build->target) { r = pakfire_packagelist_walk(build->packages, - pakfire_build_copy_package, build->target); + pakfire_build_copy_package, build->target, 0); if (r) goto ERROR; } @@ -1990,7 +1991,7 @@ static int pakfire_build_copy_packages(struct pakfire_build* build) { const char* path = pakfire_repo_get_path(local); if (path) { r = pakfire_packagelist_walk(build->packages, - pakfire_build_copy_package, (void*)path); + pakfire_build_copy_package, (void*)path, 0); if (r) goto ERROR; } @@ -2086,7 +2087,16 @@ ERROR: } static int pakfire_build_lint(struct pakfire_build* build) { - return pakfire_packagelist_walk(build->packages, pakfire_build_lint_package, build); + int r; + + // Lint all packages + r = pakfire_packagelist_walk(build->packages, + pakfire_build_lint_package, build, PAKFIRE_PACKAGELIST_KEEPGOING); + + if (r > 0) + ERROR(build->ctx, "Linting failed\n"); + + return r; } PAKFIRE_EXPORT int pakfire_build_exec(struct pakfire_build* build, const char* path) { @@ -2180,7 +2190,7 @@ PAKFIRE_EXPORT int pakfire_build_exec(struct pakfire_build* build, const char* p // Lint the packages r = pakfire_build_lint(build); - if (r < 0) + if (r) goto ERROR; // Copy packages to their destination diff --git a/src/libpakfire/include/pakfire/packagelist.h b/src/libpakfire/include/pakfire/packagelist.h index 194c1e4c9..8877b9b08 100644 --- a/src/libpakfire/include/pakfire/packagelist.h +++ b/src/libpakfire/include/pakfire/packagelist.h @@ -38,8 +38,12 @@ int pakfire_packagelist_push(struct pakfire_packagelist* list, struct pakfire_pa typedef int (*pakfire_packagelist_walk_callback) (struct pakfire_ctx* ctx, struct pakfire_package* pkg, void* p); +enum pakfire_packagelist_walk_flags { + PAKFIRE_PACKAGELIST_KEEPGOING = (1 << 0), +}; + int pakfire_packagelist_walk(struct pakfire_packagelist* list, - pakfire_packagelist_walk_callback callback, void* p); + pakfire_packagelist_walk_callback callback, void* p, int flags); #ifdef PAKFIRE_PRIVATE diff --git a/src/libpakfire/package.c b/src/libpakfire/package.c index c6b62865d..6268f24e3 100644 --- a/src/libpakfire/package.c +++ b/src/libpakfire/package.c @@ -2245,7 +2245,7 @@ static int pakfire_package_add_build_packages(struct pakfire_package* pkg, } // Add all packages to the array - r = pakfire_packagelist_walk(packages, __pakfire_package_add_build_packages, object); + r = pakfire_packagelist_walk(packages, __pakfire_package_add_build_packages, object, 0); if (r) goto ERROR; diff --git a/src/libpakfire/packagelist.c b/src/libpakfire/packagelist.c index 4bdc54662..70867aeb7 100644 --- a/src/libpakfire/packagelist.c +++ b/src/libpakfire/packagelist.c @@ -162,19 +162,29 @@ PAKFIRE_EXPORT int pakfire_packagelist_push(struct pakfire_packagelist* list, st } PAKFIRE_EXPORT int pakfire_packagelist_walk(struct pakfire_packagelist* list, - pakfire_packagelist_walk_callback callback, void* data) { + pakfire_packagelist_walk_callback callback, void* data, int flags) { struct pakfire_packagelist_element* element = NULL; + int kept_going = 0; int r = 0; // Call the callback once for every element on the list TAILQ_FOREACH(element, &list->packages, nodes) { // Call the callback r = callback(list->ctx, element->pkg, data); - if (r) - break; + + // Exit on error + if (r < 0) + return r; + + // If have been asked to keep going, we + else if (flags & PAKFIRE_PACKAGELIST_KEEPGOING) + kept_going = 1; + + else if (r > 0) + return r; } - return r; + return (kept_going > 0) ? kept_going : r; } int pakfire_packagelist_import_solvables(struct pakfire_packagelist* list, diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index 4680d71af..462ecf1ac 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -1486,7 +1486,7 @@ PAKFIRE_EXPORT int pakfire_whatrequires(struct pakfire* pakfire, const char* wha goto ERROR; // Find everything for all packages - r = pakfire_packagelist_walk(packages, __pakfire_whatrequires, list); + r = pakfire_packagelist_walk(packages, __pakfire_whatrequires, list, 0); if (r) goto ERROR; -- 2.39.5