summaryrefslogtreecommitdiff
path: root/test/merge_zips_to_tgz.py
diff options
context:
space:
mode:
author David Srbecky <dsrbecky@google.com> 2024-11-14 17:08:37 +0000
committer David Srbecky <dsrbecky@google.com> 2024-11-14 22:25:36 +0000
commit707da44f4bfa18c0a4141f0502fd1b298ce402ea (patch)
treebc9fab96a136d94a25aaa8d26dc03f04c7a692ce /test/merge_zips_to_tgz.py
parent5081f0fa4617f9dfd7321149448c8f1ffa022ed6 (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-xtest/merge_zips_to_tgz.py30
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)
+