]> git.ipfire.org Git - people/ric9/pakfire.git/commitdiff
packager: Sort files before writing the archive
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 24 Dec 2024 14:40:52 +0000 (14:40 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 24 Dec 2024 14:40:52 +0000 (14:40 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/filelist.c
src/libpakfire/include/pakfire/filelist.h
src/libpakfire/libpakfire.sym
src/libpakfire/packager.c

index baca546b6d02fbd98ae9a3f37b746b067704e08a..fd73ecba2bff2d97a1ef13336f3969b52663f830 100644 (file)
@@ -230,6 +230,18 @@ int pakfire_filelist_remove_all(
        return pakfire_filelist_walk(removees, __pakfire_filelist_remove_one, list, 0);
 }
 
+static int __pakfire_filelist_sort(const void* p1, const void* p2, void* data) {
+       struct pakfire_file* file1 = *((struct pakfire_file**)p1);
+       struct pakfire_file* file2 = *((struct pakfire_file**)p2);
+
+       return pakfire_file_cmp(file1, file2);
+}
+
+PAKFIRE_EXPORT void pakfire_filelist_sort(struct pakfire_filelist* list) {
+       qsort_r(list->files, list->num_files, sizeof(*list->files),
+               __pakfire_filelist_sort, NULL);
+}
+
 static int pakfire_filelist_match_patterns(const char* path,
                const char** patterns, const int flags) {
        char buffer[PATH_MAX];
index 4f1d933011edbc55e138128c5773e7752abe8576..a64179d65c1c4234d9b816384effe1a198f61002 100644 (file)
@@ -39,6 +39,8 @@ struct pakfire_file* pakfire_filelist_get(struct pakfire_filelist* list, size_t
 
 int pakfire_filelist_add(struct pakfire_filelist* list, struct pakfire_file* file);
 
+void pakfire_filelist_sort(struct pakfire_filelist* list);
+
 #ifdef PAKFIRE_PRIVATE
 
 #include <stdio.h>
index df584b1f7afc364773e36fee4c62bbf9d3211998..df81fb4b982094a16b028734b2f872fa48618c05 100644 (file)
@@ -157,6 +157,7 @@ global:
        pakfire_filelist_is_empty;
        pakfire_filelist_length;
        pakfire_filelist_ref;
+       pakfire_filelist_sort;
        pakfire_filelist_unref;
 
        # key
index e910000af26f928dddaa6969c7e50ff7cac5c858..fe126d783fe19f2377671bb0025c354c374c84a6 100644 (file)
@@ -409,6 +409,9 @@ int pakfire_packager_finish(struct pakfire_packager* packager, FILE* f) {
                        goto ERROR;
        }
 
+       // Sort the filelist
+       pakfire_filelist_sort(packager->filelist);
+
        // Add filelist
        r = pakfire_package_set_filelist(packager->pkg, packager->filelist);
        if (r)