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