Add total_data_length utility function
merge_ota.py script in release tools will need this
Test: th
Bug: 227848550
Change-Id: I2b91160e4cf7972a50fe118e6d69e8f8b582e0e8
diff --git a/scripts/update_payload/payload.py b/scripts/update_payload/payload.py
index e8f0f7e..d8bd83c 100644
--- a/scripts/update_payload/payload.py
+++ b/scripts/update_payload/payload.py
@@ -124,6 +124,8 @@
"""
if zipfile.is_zipfile(payload_file):
with zipfile.ZipFile(payload_file) as zfp:
+ if "payload.bin" not in zfp.namelist():
+ raise ValueError(f"payload.bin missing in archive {payload_file}")
self.payload_file = zfp.open("payload.bin", "r")
elif isinstance(payload_file, str):
payload_fp = open(payload_file, "rb")
@@ -151,6 +153,20 @@
def is_partial(self):
return self.manifest.partial_update
+ @property
+ def total_data_length(self):
+ """Return the total data length of this payload, excluding payload
+ signature at the very end.
+ """
+ # Operations are sorted in ascending data_offset order, so iterating
+ # backwards and find the first one with non zero data_offset will tell
+ # us total data length
+ for partition in reversed(self.manifest.partitions):
+ for op in reversed(partition.operations):
+ if op.data_offset > 0:
+ return op.data_offset + op.data_length
+ return 0
+
def _ReadHeader(self):
"""Reads and returns the payload header.