Support generating partial OTAs from extracted target_files

This allows the build system to potentially paralleize generation of OTA
package and zipping of target files

Bug: 262185376
Bug: 227848550
Change-Id: I90b6c25761683ebe3803b22fc8e23540a5282c66
This commit is contained in:
Kelvin Zhang
2023-05-02 15:48:16 -07:00
parent f9f3c569d0
commit 6b10e15acc
3 changed files with 135 additions and 106 deletions

View File

@@ -754,6 +754,33 @@ def ReadFromInputFile(input_file, fn):
return ReadBytesFromInputFile(input_file, fn).decode()
def WriteBytesToInputFile(input_file, fn, data):
"""Write bytes |data| contents to fn of input zipfile or directory."""
if isinstance(input_file, zipfile.ZipFile):
with input_file.open(fn, "w") as entry_fp:
return entry_fp.write(data)
elif zipfile.is_zipfile(input_file):
with zipfile.ZipFile(input_file, "r", allowZip64=True) as zfp:
with zfp.open(fn, "w") as entry_fp:
return entry_fp.write(data)
else:
if not os.path.isdir(input_file):
raise ValueError(
"Invalid input_file, accepted inputs are ZipFile object, path to .zip file on disk, or path to extracted directory. Actual: " + input_file)
path = os.path.join(input_file, *fn.split("/"))
try:
with open(path, "wb") as f:
return f.write(data)
except IOError as e:
if e.errno == errno.ENOENT:
raise KeyError(fn)
def WriteToInputFile(input_file, fn, str: str):
"""Write str content to fn of input file or directory"""
return WriteBytesToInputFile(input_file, fn, str.encode())
def ExtractFromInputFile(input_file, fn):
"""Extracts the contents of fn from input zipfile or directory into a file."""
if isinstance(input_file, zipfile.ZipFile):