]> git.ipfire.org Git - pakfire.git/commitdiff
compress: Add flag to perform a dry-run extraction
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 23 Aug 2022 15:03:51 +0000 (15:03 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 23 Aug 2022 15:06:50 +0000 (15:06 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/compress.c
src/libpakfire/include/pakfire/compress.h

index 81f7a8316620ef67d46513039a88bcc14b566a13..a83924d207eb1d52aedb0812497e797983f141d8 100644 (file)
@@ -524,6 +524,9 @@ struct pakfire_extract {
        // Reference to Pakfire
        struct pakfire* pakfire;
 
+       // Flags
+       int flags;
+
        // The archive to extract
        struct archive* archive;
 
@@ -634,23 +637,25 @@ static int __pakfire_extract_entry(struct pakfire* pakfire, struct pakfire_extra
        }
 
        // Create file & extract payload
-       r = archive_read_extract2(data->archive, entry, data->writer);
-       switch (r) {
-               case ARCHIVE_OK:
-                       r = 0;
-                       break;
+       if (data->writer) {
+               r = archive_read_extract2(data->archive, entry, data->writer);
+               switch (r) {
+                       case ARCHIVE_OK:
+                               r = 0;
+                               break;
 
-               case ARCHIVE_WARN:
-                       ERROR(pakfire, "%s\n", archive_error_string(data->writer));
+                       case ARCHIVE_WARN:
+                               ERROR(pakfire, "%s\n", archive_error_string(data->writer));
 
-                       // Pretend everything has been okay
-                       r = 0;
-                       break;
+                               // Pretend everything has been okay
+                               r = 0;
+                               break;
 
-               case ARCHIVE_FATAL:
-                       ERROR(pakfire, "%s\n", archive_error_string(data->writer));
-                       r = 1;
-                       break;
+                       case ARCHIVE_FATAL:
+                               ERROR(pakfire, "%s\n", archive_error_string(data->writer));
+                               r = 1;
+                               break;
+               }
        }
 
 ERROR:
@@ -668,19 +673,26 @@ int pakfire_extract(struct pakfire* pakfire, struct archive* archive,
        struct pakfire_extract data = {
                .pakfire = pakfire,
                .archive = archive,
+               .flags   = flags,
+               .writer  = NULL,
        };
 
+       // Is this a dry run?
+       const int dry_run = flags & PAKFIRE_EXTRACT_DRY_RUN;
+
        // Set prefix (including pakfire path)
        r = pakfire_path(pakfire, data.prefix, "%s", prefix);
        if (r)
                goto ERROR;
 
        // Allocate writer
-       data.writer = pakfire_make_archive_disk_writer(pakfire, 1);
-       if (!data.writer) {
-               ERROR(pakfire, "Could not create disk writer: %m\n");
-               r = 1;
-               goto ERROR;
+       if (!dry_run) {
+               data.writer = pakfire_make_archive_disk_writer(pakfire, 1);
+               if (!data.writer) {
+                       ERROR(pakfire, "Could not create disk writer: %m\n");
+                       r = 1;
+                       goto ERROR;
+               }
        }
 
        // Create the progressbar
index de5c9a6488b94d672b3dcfac8515abd972bfc62f..66565ab8f3d4cd87bd2603514abeb5cdbb84c452 100644 (file)
@@ -38,7 +38,8 @@ FILE* pakfire_zstdfopen(FILE* f, const char* mode);
 
 // Extract
 enum pakfire_extract_flags {
-       PAKFIRE_EXTRACT_SHOW_THROUGHPUT = (1 << 0),
+       PAKFIRE_EXTRACT_DRY_RUN         = (1 << 0),
+       PAKFIRE_EXTRACT_SHOW_THROUGHPUT = (1 << 1),
 };
 
 int pakfire_extract(struct pakfire* pakfire, struct archive* archive,