From 34b47bf42b4b9fad8e775a37e40922598bb7bd96 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: Ia02584c71af7d47835b1f62e7daa46f27940a545 (cherry picked from commit bebd3cfbf934beb18b73a4d4e98b98c2c0a1d6fe) --- 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 ceda0b9db..a2a32a7a3 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 = {} @@ -199,7 +203,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"): @@ -213,7 +217,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");' % @@ -223,7 +227,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 @@ -268,7 +272,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 b0913e457..137285089 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: @@ -1115,11 +1117,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: -- 2.11.0