summaryrefslogtreecommitdiff
path: root/src/other_tools/utils/archive_ops.cpp
diff options
context:
space:
mode:
authorPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2023-08-14 10:00:29 +0200
committerPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2023-08-14 15:09:11 +0200
commit24ad2ce7d070ae684159b6445981017dd7a40f8a (patch)
tree4eeea470fda336146fdbb92b993a6b0da84d734c /src/other_tools/utils/archive_ops.cpp
parent26fe1ac82a8437b292e5c17e791c02d5a6813a26 (diff)
downloadjustbuild-24ad2ce7d070ae684159b6445981017dd7a40f8a.tar.gz
ArchiveOps: Add proper autodetection option for tarballs
We shouldn't exclude the possibility of receiving uncompressed tarballs as repositories in just-mr. Therefore, we introduce an explicit type that performs the autodetection (default behaviour in just-mr). This is done to also be more in line with our implementation which allows the granular handling of various archive types (currently used only for testing purposes).
Diffstat (limited to 'src/other_tools/utils/archive_ops.cpp')
-rw-r--r--src/other_tools/utils/archive_ops.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/other_tools/utils/archive_ops.cpp b/src/other_tools/utils/archive_ops.cpp
index 94c000c7..7115680f 100644
--- a/src/other_tools/utils/archive_ops.cpp
+++ b/src/other_tools/utils/archive_ops.cpp
@@ -66,16 +66,16 @@ auto enable_write_filter(archive* aw, ArchiveType type) -> bool {
auto enable_read_filter(archive* ar, ArchiveType type) -> bool {
switch (type) {
- case ArchiveType::Tar: // autodetect from supported compression filters
- return (archive_read_support_filter_xz(ar) == ARCHIVE_OK) and
- (archive_read_support_filter_gzip(ar) == ARCHIVE_OK) and
- (archive_read_support_filter_bzip2(ar) == ARCHIVE_OK);
+ case ArchiveType::Tar:
+ return true; // no compression filter
case ArchiveType::TarGz:
return (archive_read_support_filter_gzip(ar) == ARCHIVE_OK);
case ArchiveType::TarBz2:
return (archive_read_support_filter_bzip2(ar) == ARCHIVE_OK);
case ArchiveType::TarXz:
return (archive_read_support_filter_xz(ar) == ARCHIVE_OK);
+ case ArchiveType::TarAuto:
+ return (archive_read_support_filter_all(ar) == ARCHIVE_OK);
default:
return false;
}
@@ -144,6 +144,9 @@ auto ArchiveOps::EnableWriteFormats(archive* aw, ArchiveType type)
std::string(archive_error_string(aw));
}
} break;
+ case ArchiveType::TarAuto:
+ return std::string(
+ "ArchiveOps: Writing a tarball-type archive must be explicit!");
}
return std::nullopt; // success!
}
@@ -157,6 +160,7 @@ auto ArchiveOps::EnableReadFormats(archive* ar, ArchiveType type)
std::string(archive_error_string(ar));
}
} break;
+ case ArchiveType::TarAuto:
case ArchiveType::Tar:
case ArchiveType::TarGz:
case ArchiveType::TarBz2: