Merge "DO NOT MERGE Revert "Revert "releasetools: Support OTAs that have OEM properties changes.""" into cw-f-dev
am: fccf4ec06e
Change-Id: If7d5b3cd4de5f558275453d0d4a599995390a4a0
diff --git a/tools/releasetools/edify_generator.py b/tools/releasetools/edify_generator.py
index 1e7d873..8125bb6 100644
--- a/tools/releasetools/edify_generator.py
+++ b/tools/releasetools/edify_generator.py
@@ -123,6 +123,17 @@
common.ErrorCode.THUMBPRINT_MISMATCH, " or ".join(fp))
self.script.append(cmd)
+ def AssertFingerprintOrThumbprint(self, fp, tp):
+ """Assert that the current recovery build fingerprint is fp, or thumbprint
+ is tp."""
+ cmd = ('getprop("ro.build.fingerprint") == "{fp}" ||\n'
+ ' getprop("ro.build.thumbprint") == "{tp}" ||\n'
+ ' abort("Package expects build fingerprint of {fp} or '
+ 'thumbprint of {tp}; this device has a fingerprint of " '
+ '+ getprop("ro.build.fingerprint") and a thumbprint of " '
+ '+ getprop("ro.build.thumbprint") + ".");').format(fp=fp, tp=tp)
+ self.script.append(cmd)
+
def AssertOlderBuild(self, timestamp, timestamp_text):
"""Assert that the build on the device is older (or the same as)
the given timestamp."""
diff --git a/tools/releasetools/ota_from_target_files.py b/tools/releasetools/ota_from_target_files.py
index 4b6d394..199e700 100755
--- a/tools/releasetools/ota_from_target_files.py
+++ b/tools/releasetools/ota_from_target_files.py
@@ -468,7 +468,7 @@
def AppendAssertions(script, info_dict, oem_dicts=None):
oem_props = info_dict.get("oem_fingerprint_properties")
- if oem_props is None or len(oem_props) == 0:
+ if not oem_props:
device = GetBuildProp("ro.product.device", info_dict)
script.AssertDevice(device)
else:
@@ -486,7 +486,7 @@
script.AssertOemProperty(prop, values)
-def _LoadOemDicts(script, recovery_mount_options):
+def _LoadOemDicts(script, recovery_mount_options=None):
"""Returns the list of loaded OEM properties dict."""
oem_dicts = None
if OPTIONS.oem_source is None:
@@ -892,15 +892,16 @@
source_version, OPTIONS.target_info_dict,
fstab=OPTIONS.source_info_dict["fstab"])
- oem_props = OPTIONS.info_dict.get("oem_fingerprint_properties")
recovery_mount_options = OPTIONS.source_info_dict.get(
"recovery_mount_options")
+ source_oem_props = OPTIONS.source_info_dict.get("oem_fingerprint_properties")
+ target_oem_props = OPTIONS.target_info_dict.get("oem_fingerprint_properties")
oem_dicts = None
- if oem_props:
+ if source_oem_props or target_oem_props:
oem_dicts = _LoadOemDicts(script, recovery_mount_options)
metadata = {
- "pre-device": GetOemProperty("ro.product.device", oem_props,
+ "pre-device": GetOemProperty("ro.product.device", source_oem_props,
oem_dicts and oem_dicts[0],
OPTIONS.source_info_dict),
"ota-type": "BLOCK",
@@ -918,9 +919,9 @@
metadata=metadata,
info_dict=OPTIONS.source_info_dict)
- source_fp = CalculateFingerprint(oem_props, oem_dicts and oem_dicts[0],
+ source_fp = CalculateFingerprint(source_oem_props, oem_dicts and oem_dicts[0],
OPTIONS.source_info_dict)
- target_fp = CalculateFingerprint(oem_props, oem_dicts and oem_dicts[0],
+ target_fp = CalculateFingerprint(target_oem_props, oem_dicts and oem_dicts[0],
OPTIONS.target_info_dict)
metadata["pre-build"] = source_fp
metadata["post-build"] = target_fp
@@ -1036,32 +1037,39 @@
script.Comment("Stage 1/3")
# Dump fingerprints
- script.Print("Source: %s" % CalculateFingerprint(
- oem_props, oem_dicts and oem_dicts[0], OPTIONS.source_info_dict))
- script.Print("Target: %s" % CalculateFingerprint(
- oem_props, oem_dicts and oem_dicts[0], OPTIONS.target_info_dict))
+ script.Print("Source: %s" % (source_fp,))
+ script.Print("Target: %s" % (target_fp,))
script.Print("Verifying current system...")
device_specific.IncrementalOTA_VerifyBegin()
- if oem_props is None:
- # When blockimgdiff version is less than 3 (non-resumable block-based OTA),
- # patching on a device that's already on the target build will damage the
- # system. Because operations like move don't check the block state, they
- # always apply the changes unconditionally.
- if blockimgdiff_version <= 2:
+ # When blockimgdiff version is less than 3 (non-resumable block-based OTA),
+ # patching on a device that's already on the target build will damage the
+ # system. Because operations like move don't check the block state, they
+ # always apply the changes unconditionally.
+ if blockimgdiff_version <= 2:
+ if source_oem_props is None:
script.AssertSomeFingerprint(source_fp)
else:
- script.AssertSomeFingerprint(source_fp, target_fp)
- else:
- if blockimgdiff_version <= 2:
script.AssertSomeThumbprint(
GetBuildProp("ro.build.thumbprint", OPTIONS.source_info_dict))
- else:
+
+ else: # blockimgdiff_version > 2
+ if source_oem_props is None and target_oem_props is None:
+ script.AssertSomeFingerprint(source_fp, target_fp)
+ elif source_oem_props is not None and target_oem_props is not None:
script.AssertSomeThumbprint(
GetBuildProp("ro.build.thumbprint", OPTIONS.target_info_dict),
GetBuildProp("ro.build.thumbprint", OPTIONS.source_info_dict))
+ elif source_oem_props is None and target_oem_props is not None:
+ script.AssertFingerprintOrThumbprint(
+ source_fp,
+ GetBuildProp("ro.build.thumbprint", OPTIONS.target_info_dict))
+ else:
+ script.AssertFingerprintOrThumbprint(
+ target_fp,
+ GetBuildProp("ro.build.thumbprint", OPTIONS.source_info_dict))
# Check the required cache size (i.e. stashed blocks).
size = []
@@ -1285,7 +1293,7 @@
oem_props = OPTIONS.info_dict.get("oem_fingerprint_properties", None)
oem_dicts = None
if oem_props:
- oem_dicts = _LoadOemDicts(script, None)
+ oem_dicts = _LoadOemDicts(None)
metadata = {
"post-build": CalculateFingerprint(oem_props, oem_dicts and oem_dicts[0],
@@ -1571,15 +1579,16 @@
source_version, OPTIONS.target_info_dict,
fstab=OPTIONS.source_info_dict["fstab"])
- oem_props = OPTIONS.info_dict.get("oem_fingerprint_properties")
recovery_mount_options = OPTIONS.source_info_dict.get(
"recovery_mount_options")
+ source_oem_props = OPTIONS.source_info_dict.get("oem_fingerprint_properties")
+ target_oem_props = OPTIONS.target_info_dict.get("oem_fingerprint_properties")
oem_dicts = None
- if oem_props:
+ if source_oem_props or target_oem_props:
oem_dicts = _LoadOemDicts(script, recovery_mount_options)
metadata = {
- "pre-device": GetOemProperty("ro.product.device", oem_props,
+ "pre-device": GetOemProperty("ro.product.device", source_oem_props,
oem_dicts and oem_dicts[0],
OPTIONS.source_info_dict),
"ota-type": "FILE",
@@ -1605,17 +1614,25 @@
else:
vendor_diff = None
- target_fp = CalculateFingerprint(oem_props, oem_dicts and oem_dicts[0],
+ target_fp = CalculateFingerprint(target_oem_props, oem_dicts and oem_dicts[0],
OPTIONS.target_info_dict)
- source_fp = CalculateFingerprint(oem_props, oem_dicts and oem_dicts[0],
+ source_fp = CalculateFingerprint(source_oem_props, oem_dicts and oem_dicts[0],
OPTIONS.source_info_dict)
- if oem_props is None:
+ if source_oem_props is None and target_oem_props is None:
script.AssertSomeFingerprint(source_fp, target_fp)
- else:
+ elif source_oem_props is not None and target_oem_props is not None:
script.AssertSomeThumbprint(
GetBuildProp("ro.build.thumbprint", OPTIONS.target_info_dict),
GetBuildProp("ro.build.thumbprint", OPTIONS.source_info_dict))
+ elif source_oem_props is None and target_oem_props is not None:
+ script.AssertFingerprintOrThumbprint(
+ source_fp,
+ GetBuildProp("ro.build.thumbprint", OPTIONS.target_info_dict))
+ else:
+ script.AssertFingerprintOrThumbprint(
+ target_fp,
+ GetBuildProp("ro.build.thumbprint", OPTIONS.source_info_dict))
metadata["pre-build"] = source_fp
metadata["post-build"] = target_fp