]> git.ipfire.org Git - pakfire.git/commitdiff
build: Abort if linting failed
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 26 Oct 2024 11:07:49 +0000 (11:07 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 26 Oct 2024 11:07:49 +0000 (11:07 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/cli/lib/dump.c
src/libpakfire/build.c
src/libpakfire/include/pakfire/packagelist.h
src/libpakfire/package.c
src/libpakfire/packagelist.c
src/libpakfire/pakfire.c

index 00e35a0bd030592aee50528bcf3a5bb02e5a3dd8..80640ca15fde7d21e9afb14dd952b0693ada9934 100644 (file)
@@ -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) {
index 9554416c4202f5aca074480942b82558c556078c..cbc25a789f92c1674eaf72d2d4871e0ef20f2f1e 100644 (file)
@@ -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
index 194c1e4c9898ce32ecf5c2ce2a8734c4eeccf300..8877b9b083779a3238c7912de14491d38d583ef4 100644 (file)
@@ -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
 
index c6b62865d93b3069a1d4f80205030deba9ce8e48..6268f24e38a4412d104ff175594760f5213f4630 100644 (file)
@@ -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;
 
index 4bdc5466253c9d0bb30d0302858c2866f73cade1..70867aeb7ed7190bc9fefa61a53d721785179765 100644 (file)
@@ -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,
index 4680d71af52d6966e4c496fd91c0858d251a9f18..462ecf1ac9a0335555da104fb4a89b1f7439d227 100644 (file)
@@ -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;