]> git.ipfire.org Git - pakfire.git/commitdiff
filelist: Add pattern filtering to walk
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 8 Dec 2022 15:11:14 +0000 (15:11 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 8 Dec 2022 15:11:14 +0000 (15:11 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/build.c
src/libpakfire/compress.c
src/libpakfire/filelist.c
src/libpakfire/include/pakfire/filelist.h
src/libpakfire/package.c
src/libpakfire/packager.c

index 48c405378c149cc0b6a45e59921fb1ab7d64770f..a3a99b9967d196a981f0c0e95683099d883ccf31 100644 (file)
@@ -282,7 +282,8 @@ static int pakfire_build_send_file(struct pakfire* pakfire,
 static int pakfire_build_send_filelist(struct pakfire* pakfire, void* data, int fd) {
        const struct pakfire_find_deps_ctx* ctx = (struct pakfire_find_deps_ctx*)data;
 
-       return pakfire_filelist_walk(ctx->filelist, pakfire_build_send_file, &fd);
+       return pakfire_filelist_walk(ctx->filelist, NULL,
+               pakfire_build_send_file, &fd);
 }
 
 static int pakfire_build_process_deps(struct pakfire* pakfire,
@@ -1353,7 +1354,8 @@ static int pakfire_build_check_unpackaged_files(struct pakfire_build* build) {
        if (length) {
                ERROR(build->pakfire, "Unpackaged files found:\n");
 
-               r = pakfire_filelist_walk(filelist, __pakfire_build_unpackaged_file, NULL);
+               r = pakfire_filelist_walk(filelist, NULL,
+                       __pakfire_build_unpackaged_file, NULL);
                if (r)
                        goto ERROR;
 
index 347ec13ef5d2482f77276223a91c503870882089..d0b4dc3c07f5c6b61d430d2b0f821a56f42d03e7 100644 (file)
@@ -982,7 +982,7 @@ int pakfire_compress(struct pakfire* pakfire, struct archive* archive,
        }
 
        // Walk through the entire filelist
-       r = pakfire_filelist_walk(filelist, __pakfire_compress, &data);
+       r = pakfire_filelist_walk(filelist, NULL, __pakfire_compress, &data);
        if (r)
                goto ERROR;
 
index f3d131ac30cf56c918202465b1f9ffbed73b38fc..e4adbc616fdbbae9fd72182ae082cb05a6d7ff62 100644 (file)
@@ -350,7 +350,7 @@ int pakfire_filelist_contains(struct pakfire_filelist* list, const char* pattern
 }
 
 int pakfire_filelist_walk(struct pakfire_filelist* list,
-               pakfire_filelist_walk_callback callback, void* data) {
+               const char* pattern, pakfire_filelist_walk_callback callback, void* data) {
        struct pakfire_file* file = NULL;
        int r = 0;
 
@@ -358,6 +358,10 @@ int pakfire_filelist_walk(struct pakfire_filelist* list,
        for (unsigned int i = 0; i < list->size; i++) {
                file = list->elements[i];
 
+               // Skip any files that don't match the pattern
+               if (pattern && !pakfire_file_matches(file, pattern))
+                       continue;
+
                // Call the callback
                r = callback(list->pakfire, file, data);
                if (r)
@@ -391,7 +395,7 @@ int pakfire_filelist_dump(struct pakfire_filelist* list, int debug) {
                return 0;
 #endif
 
-       return pakfire_filelist_walk(list, __pakfire_filelist_dump, &debug);
+       return pakfire_filelist_walk(list, NULL, __pakfire_filelist_dump, &debug);
 }
 
 /*
index 6cf9632231b70cb2cce33a11759daf281094148c..ba9d3e320278e9ca1d959907be75dec8b99edbf7 100644 (file)
@@ -54,7 +54,7 @@ typedef int (*pakfire_filelist_walk_callback)
        (struct pakfire* pakfire, struct pakfire_file* file, void* data);
 
 int pakfire_filelist_walk(struct pakfire_filelist* list,
-       pakfire_filelist_walk_callback callback, void* data);
+       const char* pattern, pakfire_filelist_walk_callback callback, void* data);
 int pakfire_filelist_dump(struct pakfire_filelist* list, int debug);
 
 int pakfire_filelist_verify(struct pakfire_filelist* list, struct pakfire_filelist* errors);
index 2c5b2588caa9c908d6d9f19988d1c7f15d4ef581..bc1b0c61e1dc0bc0e83b4352a48f72644e14aa68 100644 (file)
@@ -1548,7 +1548,7 @@ static int __pakfire_package_set_filelist(struct pakfire* pakfire,
 
 PAKFIRE_EXPORT int pakfire_package_set_filelist(
                struct pakfire_package* pkg, struct pakfire_filelist* filelist) {
-       return pakfire_filelist_walk(filelist, __pakfire_package_set_filelist, pkg);
+       return pakfire_filelist_walk(filelist, NULL, __pakfire_package_set_filelist, pkg);
 }
 
 int pakfire_package_set_filelist_from_string(struct pakfire_package* pkg, const char* files) {
@@ -1728,7 +1728,7 @@ static int pakfire_package_add_json_filelist(
        }
 
        // Walk through the filelist
-       r = pakfire_filelist_walk(filelist, __pakfire_package_add_json_filelist, object);
+       r = pakfire_filelist_walk(filelist, NULL, __pakfire_package_add_json_filelist, object);
        if (r)
                goto ERROR;
 
index ab5d160f6c146c074aa14e72be6e57c80dcca47f..7426ec01ed8bbe9c269c75fe8eecb3e17e1c492f 100644 (file)
@@ -667,7 +667,7 @@ static int __pakfire_packager_add_files(struct pakfire* pakfire,
 int pakfire_packager_add_files(
                struct pakfire_packager* packager, struct pakfire_filelist* filelist) {
        // Add all files on the filelist
-       return pakfire_filelist_walk(filelist, __pakfire_packager_add_files, packager);
+       return pakfire_filelist_walk(filelist, NULL, __pakfire_packager_add_files, packager);
 }
 
 int pakfire_packager_add_scriptlet(struct pakfire_packager* packager,