diff options
author | 2024-11-14 17:08:37 +0000 | |
---|---|---|
committer | 2024-11-14 22:25:36 +0000 | |
commit | 707da44f4bfa18c0a4141f0502fd1b298ce402ea (patch) | |
tree | bc9fab96a136d94a25aaa8d26dc03f04c7a692ce | |
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
-rw-r--r-- | test/Android.run-test.bp | 24 | ||||
-rwxr-xr-x | test/Android.run-test.bp.py | 8 | ||||
-rwxr-xr-x | test/merge_zips_to_tgz.py | 30 | ||||
-rwxr-xr-x | test/run_test_build.py | 2 |
4 files changed, 47 insertions, 17 deletions
diff --git a/test/Android.run-test.bp b/test/Android.run-test.bp index d27153ae11..a7b4ae6929 100644 --- a/test/Android.run-test.bp +++ b/test/Android.run-test.bp @@ -2677,7 +2677,7 @@ genrule_defaults { java_genrule { name: "art-run-test-host-data-merged-tmp", - out: ["art-run-test-host-data-merged.zip"], + out: ["art-run-test-host-data-merged.tgz"], srcs: [ ":art-run-test-host-data-shard00-tmp", ":art-run-test-host-data-shard01-tmp", @@ -2781,8 +2781,8 @@ java_genrule { ":art-run-test-host-data-shard99-tmp", ":art-run-test-host-data-shardHiddenApi-tmp", ], - tools: ["merge_zips"], - cmd: "$(location merge_zips) $(out) $(in)", + tool_files: ["merge_zips_to_tgz.py"], + cmd: "$(location merge_zips_to_tgz.py) $(out) $(in)", } // This filegroup is so that the host prebuilt etc can depend on a device genrule, @@ -2900,7 +2900,7 @@ prebuilt_etc_host { "art-run-test-host-data-shardHiddenApi", ], sub_dir: "art", - filename: "art-run-test-host-data-merged.zip", + filename: "art-run-test-host-data-merged.tgz", } // Phony target used to build all shards @@ -5798,7 +5798,7 @@ genrule_defaults { java_genrule { name: "art-run-test-target-data-merged-tmp", - out: ["art-run-test-target-data-merged.zip"], + out: ["art-run-test-target-data-merged.tgz"], srcs: [ ":art-run-test-target-data-shard00-tmp", ":art-run-test-target-data-shard01-tmp", @@ -5902,8 +5902,8 @@ java_genrule { ":art-run-test-target-data-shard99-tmp", ":art-run-test-target-data-shardHiddenApi-tmp", ], - tools: ["merge_zips"], - cmd: "$(location merge_zips) $(out) $(in)", + tool_files: ["merge_zips_to_tgz.py"], + cmd: "$(location merge_zips_to_tgz.py) $(out) $(in)", } // This filegroup is so that the host prebuilt etc can depend on a device genrule, @@ -6021,7 +6021,7 @@ prebuilt_etc_host { "art-run-test-target-data-shardHiddenApi", ], sub_dir: "art", - filename: "art-run-test-target-data-merged.zip", + filename: "art-run-test-target-data-merged.tgz", } // Phony target used to build all shards @@ -8919,7 +8919,7 @@ genrule_defaults { java_genrule { name: "art-run-test-jvm-data-merged-tmp", - out: ["art-run-test-jvm-data-merged.zip"], + out: ["art-run-test-jvm-data-merged.tgz"], srcs: [ ":art-run-test-jvm-data-shard00-tmp", ":art-run-test-jvm-data-shard01-tmp", @@ -9023,8 +9023,8 @@ java_genrule { ":art-run-test-jvm-data-shard99-tmp", ":art-run-test-jvm-data-shardHiddenApi-tmp", ], - tools: ["merge_zips"], - cmd: "$(location merge_zips) $(out) $(in)", + tool_files: ["merge_zips_to_tgz.py"], + cmd: "$(location merge_zips_to_tgz.py) $(out) $(in)", } // This filegroup is so that the host prebuilt etc can depend on a device genrule, @@ -9142,7 +9142,7 @@ prebuilt_etc_host { "art-run-test-jvm-data-shardHiddenApi", ], sub_dir: "art", - filename: "art-run-test-jvm-data-merged.zip", + filename: "art-run-test-jvm-data-merged.tgz", } // Phony target used to build all shards diff --git a/test/Android.run-test.bp.py b/test/Android.run-test.bp.py index e1a3707a2b..d7934661b3 100755 --- a/test/Android.run-test.bp.py +++ b/test/Android.run-test.bp.py @@ -154,12 +154,12 @@ def main(): f.write(textwrap.dedent(f""" java_genrule {{ name: "{name}-tmp", - out: ["{name}.zip"], + out: ["{name}.tgz"], srcs: [ {srcs} ], - tools: ["merge_zips"], - cmd: "$(location merge_zips) $(out) $(in)", + tool_files: ["merge_zips_to_tgz.py"], + cmd: "$(location merge_zips_to_tgz.py) $(out) $(in)", }} // This filegroup is so that the host prebuilt etc can depend on a device genrule, @@ -177,7 +177,7 @@ def main(): {deps} ], sub_dir: "art", - filename: "{name}.zip", + filename: "{name}.tgz", }} """)) 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) + diff --git a/test/run_test_build.py b/test/run_test_build.py index ecd2518c62..1d64897436 100755 --- a/test/run_test_build.py +++ b/test/run_test_build.py @@ -612,7 +612,7 @@ def main() -> None: # Create the final zip file which contains the content of the temporary directory. soong_zip = android_build_top / args.soong_zip zip_file = android_build_top / args.out - run([soong_zip, "-o", zip_file, "-C", ziproot, "-D", ziproot], check=True) + run([soong_zip, "-L", "0", "-o", zip_file, "-C", ziproot, "-D", ziproot], check=True) if __name__ == "__main__": main() |