From bebd3cfbf934beb18b73a4d4e98b98c2c0a1d6fe Mon Sep 17 00:00:00 2001 From: Tao Bao Date: Mon, 22 Jun 2015 19:17:41 -0700 Subject: [PATCH] Use fstab in the source build When generating incremental OTAs, we should use the fstab in the source build instead of the target one. Similarly for recovery_mount_options. Bug: 22011892 Change-Id: Idb5c72d1a792e8bb40376a380e3dc06136b13652 --- tools/releasetools/edify_generator.py | 16 ++++++++++------ tools/releasetools/ota_from_target_files.py | 20 ++++++++++++-------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/tools/releasetools/edify_generator.py b/tools/releasetools/edify_generator.py index 281ed5913b..566e68752f 100644 --- a/tools/releasetools/edify_generator.py +++ b/tools/releasetools/edify_generator.py @@ -20,11 +20,15 @@ class EdifyGenerator(object): """Class to generate scripts in the 'edify' recovery script language used from donut onwards.""" - def __init__(self, version, info): + def __init__(self, version, info, fstab=None): self.script = [] self.mounts = set() self.version = version self.info = info + if fstab is None: + self.fstab = self.info.get("fstab", None) + else: + self.fstab = fstab def MakeTemporary(self): """Make a temporary script object whose commands can latter be @@ -168,7 +172,7 @@ class EdifyGenerator(object): where option is optname[=optvalue] E.g. ext4=barrier=1,nodelalloc,errors=panic|f2fs=errors=recover """ - fstab = self.info.get("fstab", None) + fstab = self.fstab if fstab: p = fstab[mount_point] mount_dict = {} @@ -202,7 +206,7 @@ class EdifyGenerator(object): self.script.append('ui_print("%s");' % (message,)) def TunePartition(self, partition, *options): - fstab = self.info.get("fstab", None) + fstab = self.fstab if fstab: p = fstab[partition] if p.fs_type not in ("ext2", "ext3", "ext4"): @@ -216,7 +220,7 @@ class EdifyGenerator(object): """Format the given partition, specified by its mount point (eg, "/system").""" - fstab = self.info.get("fstab", None) + fstab = self.fstab if fstab: p = fstab[partition] self.script.append('format("%s", "%s", "%s", "%s", "%s");' % @@ -226,7 +230,7 @@ class EdifyGenerator(object): def WipeBlockDevice(self, partition): if partition not in ("/system", "/vendor"): raise ValueError(("WipeBlockDevice doesn't work on %s\n") % (partition,)) - fstab = self.info.get("fstab", None) + fstab = self.fstab size = self.info.get(partition.lstrip("/") + "_size", None) device = fstab[partition].device @@ -271,7 +275,7 @@ class EdifyGenerator(object): """Write the given package file into the partition for the given mount point.""" - fstab = self.info["fstab"] + fstab = self.fstab if fstab: p = fstab[mount_point] partition_type = common.PARTITION_TYPES[p.fs_type] diff --git a/tools/releasetools/ota_from_target_files.py b/tools/releasetools/ota_from_target_files.py index c4d0c1b74d..82d6313dee 100755 --- a/tools/releasetools/ota_from_target_files.py +++ b/tools/releasetools/ota_from_target_files.py @@ -486,8 +486,9 @@ def GetImage(which, tmpdir, info_dict): def WriteFullOTAPackage(input_zip, output_zip): # TODO: how to determine this? We don't know what version it will - # be installed on top of. For now, we expect the API just won't - # change very often. + # be installed on top of. For now, we expect the API just won't + # change very often. Similarly for fstab, it might have changed + # in the target build. script = edify_generator.EdifyGenerator(3, OPTIONS.info_dict) oem_props = OPTIONS.info_dict.get("oem_fingerprint_properties") @@ -727,8 +728,9 @@ def WriteBlockIncrementalOTAPackage(target_zip, source_zip, output_zip): if source_version == 0: print ("WARNING: generating edify script for a source that " "can't install it.") - script = edify_generator.EdifyGenerator(source_version, - OPTIONS.target_info_dict) + script = edify_generator.EdifyGenerator( + source_version, OPTIONS.target_info_dict, + fstab=OPTIONS.source_info_dict["fstab"]) metadata = { "pre-device": GetBuildProp("ro.product.device", @@ -794,7 +796,7 @@ def WriteBlockIncrementalOTAPackage(target_zip, source_zip, output_zip): vendor_diff = None oem_props = OPTIONS.target_info_dict.get("oem_fingerprint_properties") - recovery_mount_options = OPTIONS.target_info_dict.get( + recovery_mount_options = OPTIONS.source_info_dict.get( "recovery_mount_options") oem_dict = None if oem_props is not None and len(oem_props) > 0: @@ -1114,11 +1116,13 @@ def WriteIncrementalOTAPackage(target_zip, source_zip, output_zip): if source_version == 0: print ("WARNING: generating edify script for a source that " "can't install it.") - script = edify_generator.EdifyGenerator(source_version, - OPTIONS.target_info_dict) + script = edify_generator.EdifyGenerator( + 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.info_dict.get("recovery_mount_options") + recovery_mount_options = OPTIONS.source_info_dict.get( + "recovery_mount_options") oem_dict = None if oem_props is not None and len(oem_props) > 0: if OPTIONS.oem_source is None: