diff options
author | 2024-11-14 17:08:37 +0000 | |
---|---|---|
committer | 2024-11-14 22:25:36 +0000 | |
commit | 707da44f4bfa18c0a4141f0502fd1b298ce402ea (patch) | |
tree | bc9fab96a136d94a25aaa8d26dc03f04c7a692ce /test/merge_zips_to_tgz.py | |
parent | 5081f0fa4617f9dfd7321149448c8f1ffa022ed6 (diff) |
run-test: Use tgz instead of zip for the merged output.
This results in 3x better compression.
Test: both versions have the same content (sha1sum)
Change-Id: Ia9c30f095bbc13cbaed565a2be130d659e36f009
Diffstat (limited to 'test/merge_zips_to_tgz.py')
-rwxr-xr-x | test/merge_zips_to_tgz.py | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/test/merge_zips_to_tgz.py b/test/merge_zips_to_tgz.py new file mode 100755 index 0000000000..bca4feef96 --- /dev/null +++ b/test/merge_zips_to_tgz.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 + +import tarfile +import zipfile +import sys +import io +from pathlib import Path + +def merge_zips_to_tgz(tgz_filename, zip_filenames): + with open(tgz_filename, 'wb') as outfile: + with tarfile.open(fileobj=outfile, mode='w:gz') as tgz: + for zip_filename in zip_filenames: + with zipfile.ZipFile(zip_filename, 'r') as zip_file: + for zip_info in zip_file.infolist(): + with zip_file.open(zip_info) as zip_member: + buffer = io.BytesIO(zip_member.read()) + tar_info = tarfile.TarInfo(name=zip_info.filename) + tar_info.size = len(buffer.getbuffer()) + tgz.addfile(tarinfo=tar_info, fileobj=buffer) + + +if __name__ == "__main__": + if len(sys.argv) < 2: + print(f"Usage: {Path(__file__).name} output.tgz zip1.zip zip2.zip ...") + sys.exit(1) + + tgz_filename = sys.argv[1] + zip_filenames = sys.argv[2:] + merge_zips_to_tgz(tgz_filename, zip_filenames) + |