Update the recovery files under SYSTEM/ if recovery patch is rebuilt

If we pass "rebuild_recovery" to add_img_to_target_files, the recovery
patch is rebuilt. But related files under SYSTEM/ (e.g.
SYSTEM/recovery-from-boot.p && SYSTEM/bin/install-recovery.sh) are not
updated.

This may cause a mismatch between system.img and SYSTEM/, and
may lead to a failure in validate_target_files.py.

Bug: 62096364
Test: Rebuild the system image in the TF and observe the recovery files
under SYSTEM/ get updated.

Change-Id: I7d679a612a86d02cf2eff81d1d120c0067138ed9
This commit is contained in:
Tianjie Xu 2017-05-25 17:38:53 -07:00
parent 5368131063
commit 38af07ff20

View file

@ -69,6 +69,7 @@ OPTIONS = common.OPTIONS
OPTIONS.add_missing = False
OPTIONS.rebuild_recovery = False
OPTIONS.replace_recovery_patch_files_list = []
OPTIONS.replace_verity_public_key = False
OPTIONS.replace_verity_private_key = False
OPTIONS.is_signing = False
@ -127,6 +128,12 @@ def AddSystem(output_zip, prefix="IMAGES/", recovery_img=None, boot_img=None):
ofile.write(data)
ofile.close()
arc_name = "SYSTEM/" + fn
if arc_name in output_zip.namelist():
OPTIONS.replace_recovery_patch_files_list.append(arc_name)
else:
common.ZipWrite(output_zip, ofile.name, arc_name)
if OPTIONS.rebuild_recovery:
print("Building new recovery patch")
common.MakeRecoveryPatch(OPTIONS.input_tmp, output_sink, recovery_img,
@ -385,6 +392,23 @@ def AddCache(output_zip, prefix="IMAGES/"):
img.Write()
def ReplaceRecoveryPatchFiles(zip_filename):
"""Update the related files under SYSTEM/ after rebuilding recovery."""
cmd = ["zip", "-d", zip_filename] + OPTIONS.replace_recovery_patch_files_list
p = common.Run(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
p.communicate()
output_zip = zipfile.ZipFile(zip_filename, "a",
compression=zipfile.ZIP_DEFLATED,
allowZip64=True)
for item in OPTIONS.replace_recovery_patch_files_list:
file_path = os.path.join(OPTIONS.input_tmp, item)
assert os.path.exists(file_path)
common.ZipWrite(output_zip, file_path, arcname=item)
common.ZipClose(output_zip)
def AddImagesToTargetFiles(filename):
if os.path.isdir(filename):
OPTIONS.input_tmp = os.path.abspath(filename)
@ -558,6 +582,9 @@ def AddImagesToTargetFiles(filename):
if output_zip:
common.ZipClose(output_zip)
if OPTIONS.replace_recovery_patch_files_list:
ReplaceRecoveryPatchFiles(output_zip.filename)
def main(argv):
def option_handler(o, a):