fall back to generating full OTA if incremental fails

Block incremental OTA generation can currently fail on some
target-files pairs.  Fall back to generating a full OTA so that the
script succeeds rather than failing.

Change-Id: Ide70395d1f3759aa2076bd173836f6a5e5b397c0
This commit is contained in:
Doug Zongker
2014-08-04 16:06:43 -07:00
parent 4dfb5580c2
commit 62d4f18a30

View File

@@ -118,6 +118,7 @@ OPTIONS.no_signing = False
OPTIONS.block_based = False OPTIONS.block_based = False
OPTIONS.updater_binary = None OPTIONS.updater_binary = None
OPTIONS.oem_source = None OPTIONS.oem_source = None
OPTIONS.fallback_to_full = True
def MostPopularKey(d, default): def MostPopularKey(d, default):
"""Given a dict, return the key corresponding to the largest """Given a dict, return the key corresponding to the largest
@@ -1439,6 +1440,8 @@ def main(argv):
OPTIONS.block_based = True OPTIONS.block_based = True
elif o in ("-b", "--binary"): elif o in ("-b", "--binary"):
OPTIONS.updater_binary = a OPTIONS.updater_binary = a
elif o in ("--no_fallback_to_full",):
OPTIONS.fallback_to_full = False
else: else:
return False return False
return True return True
@@ -1458,6 +1461,7 @@ def main(argv):
"block", "block",
"binary=", "binary=",
"oem_settings=", "oem_settings=",
"no_fallback_to_full",
], ],
extra_option_handler=option_handler) extra_option_handler=option_handler)
@@ -1504,35 +1508,47 @@ def main(argv):
if OPTIONS.device_specific is not None: if OPTIONS.device_specific is not None:
OPTIONS.device_specific = os.path.abspath(OPTIONS.device_specific) OPTIONS.device_specific = os.path.abspath(OPTIONS.device_specific)
if OPTIONS.no_signing: while True:
output_zip = zipfile.ZipFile(args[1], "w", compression=zipfile.ZIP_DEFLATED)
else:
temp_zip_file = tempfile.NamedTemporaryFile()
output_zip = zipfile.ZipFile(temp_zip_file, "w",
compression=zipfile.ZIP_DEFLATED)
if OPTIONS.incremental_source is None: if OPTIONS.no_signing:
WriteFullOTAPackage(input_zip, output_zip) if os.path.exists(args[1]): os.unlink(args[1])
if OPTIONS.package_key is None: output_zip = zipfile.ZipFile(args[1], "w", compression=zipfile.ZIP_DEFLATED)
OPTIONS.package_key = OPTIONS.info_dict.get( else:
"default_system_dev_certificate", temp_zip_file = tempfile.NamedTemporaryFile()
"build/target/product/security/testkey") output_zip = zipfile.ZipFile(temp_zip_file, "w",
else: compression=zipfile.ZIP_DEFLATED)
print "unzipping source target-files..."
OPTIONS.source_tmp, source_zip = common.UnzipTemp(OPTIONS.incremental_source) if OPTIONS.incremental_source is None:
OPTIONS.target_info_dict = OPTIONS.info_dict WriteFullOTAPackage(input_zip, output_zip)
OPTIONS.source_info_dict = common.LoadInfoDict(source_zip) if OPTIONS.package_key is None:
if "selinux_fc" in OPTIONS.source_info_dict: OPTIONS.package_key = OPTIONS.info_dict.get(
OPTIONS.source_info_dict["selinux_fc"] = os.path.join(OPTIONS.source_tmp, "BOOT", "RAMDISK", "default_system_dev_certificate",
"file_contexts") "build/target/product/security/testkey")
if OPTIONS.package_key is None: break
OPTIONS.package_key = OPTIONS.source_info_dict.get(
"default_system_dev_certificate", else:
"build/target/product/security/testkey") print "unzipping source target-files..."
if OPTIONS.verbose: OPTIONS.source_tmp, source_zip = common.UnzipTemp(OPTIONS.incremental_source)
print "--- source info ---" OPTIONS.target_info_dict = OPTIONS.info_dict
common.DumpInfoDict(OPTIONS.source_info_dict) OPTIONS.source_info_dict = common.LoadInfoDict(source_zip)
WriteIncrementalOTAPackage(input_zip, source_zip, output_zip) if "selinux_fc" in OPTIONS.source_info_dict:
OPTIONS.source_info_dict["selinux_fc"] = os.path.join(OPTIONS.source_tmp, "BOOT", "RAMDISK",
"file_contexts")
if OPTIONS.package_key is None:
OPTIONS.package_key = OPTIONS.source_info_dict.get(
"default_system_dev_certificate",
"build/target/product/security/testkey")
if OPTIONS.verbose:
print "--- source info ---"
common.DumpInfoDict(OPTIONS.source_info_dict)
try:
WriteIncrementalOTAPackage(input_zip, source_zip, output_zip)
break
except ValueError:
if not OPTIONS.fallback_to_full: raise
print "--- failed to build incremental; falling back to full ---"
OPTIONS.incremental_source = None
output_zip.close()
output_zip.close() output_zip.close()