summaryrefslogtreecommitdiff
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
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
-rw-r--r--test/Android.run-test.bp24
-rwxr-xr-xtest/Android.run-test.bp.py8
-rwxr-xr-xtest/merge_zips_to_tgz.py30
-rwxr-xr-xtest/run_test_build.py2
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()