xref: /aosp_15_r20/art/test/merge_zips_to_tgz.py (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1#!/usr/bin/env python3
2
3import tarfile
4import zipfile
5import sys
6import io
7from pathlib import Path
8
9def merge_zips_to_tgz(tgz_filename, zip_filenames):
10  with open(tgz_filename, 'wb') as outfile:
11    with tarfile.open(fileobj=outfile, mode='w:gz') as tgz:
12      for zip_filename in zip_filenames:
13        with zipfile.ZipFile(zip_filename, 'r') as zip_file:
14          for zip_info in zip_file.infolist():
15            with zip_file.open(zip_info) as zip_member:
16              buffer = io.BytesIO(zip_member.read())
17              tar_info = tarfile.TarInfo(name=zip_info.filename)
18              tar_info.size = len(buffer.getbuffer())
19              tgz.addfile(tarinfo=tar_info, fileobj=buffer)
20
21
22if __name__ == "__main__":
23  if len(sys.argv) < 2:
24    print(f"Usage: {Path(__file__).name} output.tgz zip1.zip zip2.zip ...")
25    sys.exit(1)
26
27  tgz_filename = sys.argv[1]
28  zip_filenames = sys.argv[2:]
29  merge_zips_to_tgz(tgz_filename, zip_filenames)
30
31