]> git.ipfire.org Git - people/stevee/pakfire.git/commitdiff
file: Make the _cleanup function configurable to tidy up as well
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 24 Mar 2023 16:09:32 +0000 (16:09 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 24 Mar 2023 16:09:32 +0000 (16:09 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/build.c
src/libpakfire/file.c
src/libpakfire/filelist.c
src/libpakfire/include/pakfire/file.h
src/libpakfire/include/pakfire/filelist.h
src/libpakfire/packager.c
src/libpakfire/transaction.c

index 267c9df05301ab8a0c8c2f663b7e0be3b5deca92..a5653a30f510e84eb4abe6a2660fb6693fb01130 100644 (file)
@@ -1056,7 +1056,7 @@ static int pakfire_build_post_process_files(struct pakfire_build* build,
 
                // Remove all files on the removee list
                if (flags & PAKFIRE_BUILD_CLEANUP_FILES) {
-                       r = pakfire_filelist_cleanup(removees);
+                       r = pakfire_filelist_cleanup(removees, PAKFIRE_FILE_CLEANUP_TIDY);
                        if (r)
                                goto ERROR;
 
index 47ad18fabe553dd337e8adc6f57f09112003e428..33e26fea8723acbfa27d1b7f9f646d7b9bedde48 100644 (file)
@@ -1334,7 +1334,7 @@ int pakfire_file_compute_digests(struct pakfire_file* file, const int types) {
        return __pakfire_file_compute_digests(file, &file->digests, types);
 }
 
-int pakfire_file_remove(struct pakfire_file* file) {
+static int pakfire_file_remove(struct pakfire_file* file) {
        int r;
 
        if (!*file->abspath) {
@@ -1651,7 +1651,7 @@ int pakfire_file_matches_class(struct pakfire_file* file, const int class) {
        It will try to delete any parent directories as well and ignore if directories
        cannot be deleted because they might contain other files
 */
-int pakfire_file_cleanup(struct pakfire_file* file) {
+int pakfire_file_cleanup(struct pakfire_file* file, int flags) {
        char path[PATH_MAX];
 
        // Try removing the file
@@ -1659,29 +1659,32 @@ int pakfire_file_cleanup(struct pakfire_file* file) {
        if (r)
                return r;
 
-       // Create a working copy of abspath
-       r = pakfire_string_set(path, file->abspath);
-       if (r)
-               return r;
+       // Try to tidy up afterwards
+       if (flags & PAKFIRE_FILE_CLEANUP_TIDY) {
+               // Create a working copy of abspath
+               r = pakfire_string_set(path, file->abspath);
+               if (r)
+                       return r;
 
-       // See how many levels this file has
-       int levels = pakfire_file_levels(file);
+               // See how many levels this file has
+               int levels = pakfire_file_levels(file);
 
-       // Walk all the way up and remove all parent directories if possible
-       while (--levels) {
-               dirname(path);
+               // Walk all the way up and remove all parent directories if possible
+               while (--levels) {
+                       dirname(path);
 
-               // Break if path is suddenly empty
-               if (!*path)
-                       break;
+                       // Break if path is suddenly empty
+                       if (!*path)
+                               break;
 
-               DEBUG(file->pakfire, "Trying to remove parent directory %s\n", path);
+                       DEBUG(file->pakfire, "Trying to remove parent directory %s\n", path);
 
-               r = rmdir(path);
+                       r = rmdir(path);
 
-               // Break on any error
-               if (r)
-                       break;
+                       // Break on any error
+                       if (r)
+                               break;
+               }
        }
 
        return 0;
index c76c34e4ea8def80bdce9d8534b4a5de495eeae0..d33b62a01896a96c0ac68f001c641e6307729579 100644 (file)
@@ -584,7 +584,7 @@ ERROR:
        return r;
 }
 
-int pakfire_filelist_cleanup(struct pakfire_filelist* list) {
+int pakfire_filelist_cleanup(struct pakfire_filelist* list, int flags) {
        struct pakfire_filelist_element* element = NULL;
        int r;
 
@@ -594,7 +594,7 @@ int pakfire_filelist_cleanup(struct pakfire_filelist* list) {
 
        // Walk through the list backwards
        TAILQ_FOREACH_REVERSE(element, &list->files, entries, nodes) {
-               r = pakfire_file_cleanup(element->file);
+               r = pakfire_file_cleanup(element->file, flags);
                if (r)
                        return r;
        }
index 7508f32d40efa9f9a1dc369330b1a96d0ba0c771..8030fae7811a15be804303e778f709f6a5caa7a1 100644 (file)
@@ -167,8 +167,10 @@ int pakfire_file_payload_matches(struct pakfire_file* file,
 
 int pakfire_file_compute_digests(struct pakfire_file* file, const int types);
 
-int pakfire_file_remove(struct pakfire_file* file);
-int pakfire_file_cleanup(struct pakfire_file* file);
+enum pakfire_file_cleanup_flags {
+       PAKFIRE_FILE_CLEANUP_TIDY = (1 << 0),
+};
+int pakfire_file_cleanup(struct pakfire_file* file, int flags);
 
 int pakfire_file_symlink_target_exists(struct pakfire_file* file);
 
index 3114f9923067bc238e7a458b3b853933408ceeb0..1ae3fd05b0c5fd27887286e9c5e9855cc98a052f 100644 (file)
@@ -65,7 +65,7 @@ int pakfire_filelist_dump(struct pakfire_filelist* list, int flags);
 
 int pakfire_filelist_verify(struct pakfire_filelist* list, struct pakfire_filelist* errors);
 
-int pakfire_filelist_cleanup(struct pakfire_filelist* list);
+int pakfire_filelist_cleanup(struct pakfire_filelist* list, int flags);
 
 int pakfire_filelist_matches_class(struct pakfire_filelist* list, int class);
 
index 04b41436aba6643adcb7220be6f4c10615a02e71..21a812b9319e1b22ab275b4079ae88be73866fa6 100644 (file)
@@ -667,5 +667,5 @@ int pakfire_packager_add_scriptlet(struct pakfire_packager* packager,
 */
 int pakfire_packager_cleanup(struct pakfire_packager* packager) {
        // Delete all files on the filelist
-       return pakfire_filelist_cleanup(packager->filelist);
+       return pakfire_filelist_cleanup(packager->filelist, PAKFIRE_FILE_CLEANUP_TIDY);
 }
index 160c74aaa31de93893125902c17f984ae61bad0c..6852259fcee546592676b5250231772bc1a94273 100644 (file)
@@ -751,7 +751,7 @@ static int pakfire_transaction_erase(struct pakfire_transaction* transaction,
                goto ERROR;
 
        // Remove all files on the filelist
-       r = pakfire_filelist_cleanup(filelist);
+       r = pakfire_filelist_cleanup(filelist, 0);
        if (r)
                goto ERROR;