Load boot build props to info_dict properly.
Add boot to PARTITION_WITH_BUILD_PROP. Let PartitionBuildProps handle boot partitions by extracting build.prop file. Test: generate OTA and call `payload_info.py payload.bin`, check that boot image timestamp is set Bug: 162623577 Change-Id: I71955e4ee494ffbb5d111c3d02a129c0f879b6d1
This commit is contained in:
parent
85ac5012aa
commit
10482a2a56
1 changed files with 55 additions and 7 deletions
|
@ -129,7 +129,7 @@ PARTITIONS_WITH_CARE_MAP = [
|
|||
]
|
||||
|
||||
# Partitions with a build.prop file
|
||||
PARTITIONS_WITH_BUILD_PROP = PARTITIONS_WITH_CARE_MAP
|
||||
PARTITIONS_WITH_BUILD_PROP = PARTITIONS_WITH_CARE_MAP + ['boot']
|
||||
|
||||
# See sysprop.mk. If file is moved, add new search paths here; don't remove
|
||||
# existing search paths.
|
||||
|
@ -479,12 +479,16 @@ class BuildInfo(object):
|
|||
|
||||
def GetPartitionBuildProp(self, prop, partition):
|
||||
"""Returns the inquired build property for the provided partition."""
|
||||
|
||||
# Boot image uses ro.[product.]bootimage instead of boot.
|
||||
prop_partition = "bootimage" if partition == "boot" else partition
|
||||
|
||||
# If provided a partition for this property, only look within that
|
||||
# partition's build.prop.
|
||||
if prop in BuildInfo._RO_PRODUCT_RESOLVE_PROPS:
|
||||
prop = prop.replace("ro.product", "ro.product.{}".format(partition))
|
||||
prop = prop.replace("ro.product", "ro.product.{}".format(prop_partition))
|
||||
else:
|
||||
prop = prop.replace("ro.", "ro.{}.".format(partition))
|
||||
prop = prop.replace("ro.", "ro.{}.".format(prop_partition))
|
||||
|
||||
prop_val = self._GetRawBuildProp(prop, partition)
|
||||
if prop_val is not None:
|
||||
|
@ -655,6 +659,20 @@ def ReadFromInputFile(input_file, fn):
|
|||
raise KeyError(fn)
|
||||
|
||||
|
||||
def ExtractFromInputFile(input_file, fn):
|
||||
"""Extracts the contents of fn from input zipfile or directory into a file."""
|
||||
if isinstance(input_file, zipfile.ZipFile):
|
||||
tmp_file = MakeTempFile(os.path.basename(fn))
|
||||
with open(tmp_file, 'w') as f:
|
||||
f.write(input_file.read(fn))
|
||||
return tmp_file
|
||||
else:
|
||||
file = os.path.join(input_file, *fn.split("/"))
|
||||
if not os.path.exists(file):
|
||||
raise KeyError(fn)
|
||||
return file
|
||||
|
||||
|
||||
def LoadInfoDict(input_file, repacking=False):
|
||||
"""Loads the key/value pairs from the given input target_files.
|
||||
|
||||
|
@ -845,6 +863,39 @@ class PartitionBuildProps(object):
|
|||
@staticmethod
|
||||
def FromInputFile(input_file, name, placeholder_values=None):
|
||||
"""Loads the build.prop file and builds the attributes."""
|
||||
|
||||
if name == "boot":
|
||||
data = PartitionBuildProps._ReadBootPropFile(input_file)
|
||||
else:
|
||||
data = PartitionBuildProps._ReadPartitionPropFile(input_file, name)
|
||||
|
||||
props = PartitionBuildProps(input_file, name, placeholder_values)
|
||||
props._LoadBuildProp(data)
|
||||
return props
|
||||
|
||||
@staticmethod
|
||||
def _ReadBootPropFile(input_file):
|
||||
"""
|
||||
Read build.prop for boot image from input_file.
|
||||
Return empty string if not found.
|
||||
"""
|
||||
try:
|
||||
boot_img = ExtractFromInputFile(input_file, 'IMAGES/boot.img')
|
||||
except KeyError:
|
||||
logger.warning('Failed to read IMAGES/boot.img')
|
||||
return ''
|
||||
prop_file = GetBootImageBuildProp(boot_img)
|
||||
if prop_file is None:
|
||||
return ''
|
||||
with open(prop_file) as f:
|
||||
return f.read().decode()
|
||||
|
||||
@staticmethod
|
||||
def _ReadPartitionPropFile(input_file, name):
|
||||
"""
|
||||
Read build.prop for name from input_file.
|
||||
Return empty string if not found.
|
||||
"""
|
||||
data = ''
|
||||
for prop_file in ['{}/etc/build.prop'.format(name.upper()),
|
||||
'{}/build.prop'.format(name.upper())]:
|
||||
|
@ -853,10 +904,7 @@ class PartitionBuildProps(object):
|
|||
break
|
||||
except KeyError:
|
||||
logger.warning('Failed to read %s', prop_file)
|
||||
|
||||
props = PartitionBuildProps(input_file, name, placeholder_values)
|
||||
props._LoadBuildProp(data)
|
||||
return props
|
||||
return data
|
||||
|
||||
@staticmethod
|
||||
def FromBuildPropFile(name, build_prop_file):
|
||||
|
|
Loading…
Reference in a new issue