Revert "Calculate the runtime fingerprint prefixes from build prop"

Revert submission 1297095

Bug: 156131275
Reason for revert: Broken build
Reverted Changes:
I2fe7e93a2:Add a wrapper class PartitionBuildProp
Iac093a40d:Calculate the runtime fingerprint prefixes from bu...

Change-Id: I8b1262c6e94a1db349de39896e56f366c8d64d4c
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py
index 7805e30..71ae21f 100644
--- a/tools/releasetools/common.py
+++ b/tools/releasetools/common.py
@@ -738,22 +738,18 @@
     partition: name of the partition.
     props_allow_override: a list of build properties to search for the
         alternative values during runtime.
-    build_props: a dict of build properties for the given partition.
-    prop_overrides: a set of props that are overridden by import.
-    placeholder_values: A dict of runtime variables' values to replace the
-        placeholders in the build.prop file. We expect exactly one value for
-        each of the variables.
+    build_props: a dictionary of build properties for the given partition.
+    prop_overrides: a dict of list. And each list holds the overridden values
+        for props_allow_override.
   """
-  def __init__(self, input_file, name, placeholder_values=None):
+
+  def __init__(self, input_file, name):
     self.input_file = input_file
     self.partition = name
     self.props_allow_override = [props.format(name) for props in [
-        'ro.product.{}.brand', 'ro.product.{}.name', 'ro.product.{}.device']]
+        'ro.product.{}.name', 'ro.product.{}.device']]
     self.build_props = {}
-    self.prop_overrides = set()
-    self.placeholder_values = {}
-    if placeholder_values:
-      self.placeholder_values = copy.deepcopy(placeholder_values)
+    self.prop_overrides = {}
 
   @staticmethod
   def FromDictionary(name, build_props):
@@ -764,8 +760,9 @@
     return props
 
   @staticmethod
-  def FromInputFile(input_file, name, placeholder_values=None):
+  def FromInputFile(input_file, name):
     """Loads the build.prop file and builds the attributes."""
+
     data = ''
     for prop_file in ['{}/etc/build.prop'.format(name.upper()),
                       '{}/build.prop'.format(name.upper())]:
@@ -775,62 +772,10 @@
       except KeyError:
         logger.warning('Failed to read %s', prop_file)
 
-    props = PartitionBuildProps(input_file, name, placeholder_values)
-    props._LoadBuildProp(data)
+    props = PartitionBuildProps(input_file, name)
+    props.build_props = LoadDictionaryFromLines(data.split('\n'))
     return props
 
-  def _LoadBuildProp(self, data):
-    for line in data.split('\n'):
-      line = line.strip()
-      if not line or line.startswith("#"):
-        continue
-      if line.startswith("import"):
-        overrides = self._ImportParser(line)
-        duplicates = self.prop_overrides.intersection(overrides.keys())
-        if duplicates:
-          raise ValueError('prop {} is overridden multiple times'.format(
-              ','.join(duplicates)))
-        self.prop_overrides = self.prop_overrides.union(overrides.keys())
-        self.build_props.update(overrides)
-      elif "=" in line:
-        name, value = line.split("=", 1)
-        if name in self.prop_overrides:
-          raise ValueError('prop {} is set again after overridden by import '
-                           'statement'.format(name))
-        self.build_props[name] = value
-
-  def _ImportParser(self, line):
-    """Parses the build prop in a given import statement."""
-
-    tokens = line.split()
-    if len(tokens) != 2 or tokens[0] != 'import':
-      raise ValueError('Unrecognized import statement {}'.format(line))
-    import_path = tokens[1]
-    if not re.match(r'^/{}/.*\.prop$'.format(self.partition), import_path):
-      raise ValueError('Unrecognized import path {}'.format(line))
-
-    # We only recognize a subset of import statement that the init process
-    # supports. And we can loose the restriction based on how the dynamic
-    # fingerprint is used in practice. The placeholder format should be
-    # ${placeholder}, and its value should be provided by the caller through
-    # the placeholder_values.
-    for prop, value in self.placeholder_values.items():
-      prop_place_holder = '${{{}}}'.format(prop)
-      if prop_place_holder in import_path:
-        import_path = import_path.replace(prop_place_holder, value)
-    if '$' in import_path:
-      logger.info('Unresolved place holder in import path %s', import_path)
-      return {}
-
-    import_path = import_path.replace('/{}'.format(self.partition),
-                                      self.partition.upper())
-    logger.info('Parsing build props override from %s', import_path)
-
-    lines = ReadFromInputFile(self.input_file, import_path).split('\n')
-    d = LoadDictionaryFromLines(lines)
-    return {key: val for key, val in d.items()
-            if key in self.props_allow_override}
-
   def GetProp(self, prop):
     return self.build_props.get(prop)
 
diff --git a/tools/releasetools/ota_from_target_files.py b/tools/releasetools/ota_from_target_files.py
index 47ad3d8..92a46a2 100755
--- a/tools/releasetools/ota_from_target_files.py
+++ b/tools/releasetools/ota_from_target_files.py
@@ -193,8 +193,6 @@
 from __future__ import print_function
 
 import collections
-import copy
-import itertools
 import logging
 import multiprocessing
 import os.path
@@ -231,7 +229,6 @@
 OPTIONS.no_signing = False
 OPTIONS.block_based = True
 OPTIONS.updater_binary = None
-OPTIONS.oem_dicts = None
 OPTIONS.oem_source = None
 OPTIONS.oem_no_mount = False
 OPTIONS.full_radio = False
@@ -250,7 +247,6 @@
 OPTIONS.skip_compatibility_check = False
 OPTIONS.output_metadata_path = None
 OPTIONS.disable_fec_computation = False
-OPTIONS.boot_variable_values = None
 
 
 METADATA_NAME = 'META-INF/com/android/metadata'
@@ -1963,36 +1959,6 @@
           output_file)
 
 
-def CalculateRuntimeFingerprints():
-  """Returns a set of runtime fingerprints based on the boot variables."""
-
-  build_info = common.BuildInfo(OPTIONS.info_dict, OPTIONS.oem_dicts)
-  fingerprints = {build_info.fingerprint}
-
-  if not OPTIONS.boot_variable_values:
-    return fingerprints
-
-  # Calculate all possible combinations of the values for the boot variables.
-  keys = OPTIONS.boot_variable_values.keys()
-  value_list = OPTIONS.boot_variable_values.values()
-  combinations = [dict(zip(keys, values))
-                  for values in itertools.product(*value_list)]
-  for placeholder_values in combinations:
-    # Reload the info_dict as some build properties may change their values
-    # based on the value of ro.boot* properties.
-    info_dict = copy.deepcopy(OPTIONS.info_dict)
-    for partition in common.PARTITIONS_WITH_CARE_MAP:
-      partition_prop_key = "{}.build.prop".format(partition)
-      old_props = info_dict[partition_prop_key]
-      info_dict[partition_prop_key] = common.PartitionBuildProps.FromInputFile(
-          old_props.input_file, partition, placeholder_values)
-    info_dict["build.prop"] = info_dict["system.build.prop"]
-
-    build_info = common.BuildInfo(info_dict, OPTIONS.oem_dicts)
-    fingerprints.add(build_info.fingerprint)
-  return fingerprints
-
-
 def main(argv):
 
   def option_handler(o, a):
diff --git a/tools/releasetools/test_common.py b/tools/releasetools/test_common.py
index 787e675..c0c2d3f 100644
--- a/tools/releasetools/test_common.py
+++ b/tools/releasetools/test_common.py
@@ -1899,7 +1899,7 @@
 
 class PartitionBuildPropsTest(test_utils.ReleaseToolsTestCase):
   def setUp(self):
-    self.odm_build_prop = [
+    self.build_prop = [
         'ro.odm.build.date.utc=1578430045',
         'ro.odm.build.fingerprint='
         'google/coral/coral:10/RP1A.200325.001/6337676:user/dev-keys',
@@ -1918,81 +1918,13 @@
 
   def test_parseBuildProps_noImportStatement(self):
     build_prop = [
-        'ro.odm.build.date.utc=1578430045',
-        'ro.odm.build.fingerprint='
-        'google/coral/coral:10/RP1A.200325.001/6337676:user/dev-keys',
-        'ro.product.odm.device=coral',
-    ]
-    input_file = self._BuildZipFile({
-        'ODM/etc/build.prop': '\n'.join(build_prop),
-    })
-
-    with zipfile.ZipFile(input_file, 'r') as input_zip:
-      placeholder_values = {
-          'ro.boot.product.device_name': ['std', 'pro']
-      }
-      partition_props = common.PartitionBuildProps.FromInputFile(
-          input_zip, 'odm', placeholder_values)
-
-    self.assertEqual({
-        'ro.odm.build.date.utc': '1578430045',
-        'ro.odm.build.fingerprint':
-        'google/coral/coral:10/RP1A.200325.001/6337676:user/dev-keys',
-        'ro.product.odm.device': 'coral',
-    }, partition_props.build_props)
-
-    self.assertEqual(set(), partition_props.prop_overrides)
-
-  def test_parseBuildProps_singleImportStatement(self):
-    build_std_prop = [
-        'ro.product.odm.device=coral',
-        'ro.product.odm.name=product1',
-    ]
-    build_pro_prop = [
-        'ro.product.odm.device=coralpro',
-        'ro.product.odm.name=product2',
-    ]
-
-    input_file = self._BuildZipFile({
-        'ODM/etc/build.prop': '\n'.join(self.odm_build_prop),
-        'ODM/etc/build_std.prop': '\n'.join(build_std_prop),
-        'ODM/etc/build_pro.prop': '\n'.join(build_pro_prop),
-    })
-
-    with zipfile.ZipFile(input_file, 'r') as input_zip:
-      placeholder_values = {
-          'ro.boot.product.device_name': 'std'
-      }
-      partition_props = common.PartitionBuildProps.FromInputFile(
-          input_zip, 'odm', placeholder_values)
-
-    self.assertEqual({
-      'ro.odm.build.date.utc': '1578430045',
-      'ro.odm.build.fingerprint':
+      'ro.odm.build.date.utc=1578430045',
+      'ro.odm.build.fingerprint='
       'google/coral/coral:10/RP1A.200325.001/6337676:user/dev-keys',
-      'ro.product.odm.device': 'coral',
-      'ro.product.odm.name': 'product1',
-    }, partition_props.build_props)
-
-    with zipfile.ZipFile(input_file, 'r') as input_zip:
-      placeholder_values = {
-          'ro.boot.product.device_name': 'pro'
-      }
-      partition_props = common.PartitionBuildProps.FromInputFile(
-          input_zip, 'odm', placeholder_values)
-
-    self.assertEqual({
-        'ro.odm.build.date.utc': '1578430045',
-        'ro.odm.build.fingerprint':
-        'google/coral/coral:10/RP1A.200325.001/6337676:user/dev-keys',
-        'ro.product.odm.device': 'coralpro',
-        'ro.product.odm.name': 'product2',
-    }, partition_props.build_props)
-
-  def test_parseBuildProps_noPlaceHolders(self):
-    build_prop = copy.copy(self.odm_build_prop)
+      'ro.product.odm.device=coral',
+    ]
     input_file = self._BuildZipFile({
-        'ODM/etc/build.prop': '\n'.join(build_prop),
+      'ODM/etc/build.prop': '\n'.join(build_prop),
     })
 
     with zipfile.ZipFile(input_file, 'r') as input_zip:
@@ -2000,136 +1932,10 @@
           input_zip, 'odm')
 
     self.assertEqual({
-        'ro.odm.build.date.utc': '1578430045',
-        'ro.odm.build.fingerprint':
-        'google/coral/coral:10/RP1A.200325.001/6337676:user/dev-keys',
-        'ro.product.odm.device': 'coral',
+      'ro.odm.build.date.utc': '1578430045',
+      'ro.odm.build.fingerprint':
+      'google/coral/coral:10/RP1A.200325.001/6337676:user/dev-keys',
+      'ro.product.odm.device': 'coral',
     }, partition_props.build_props)
 
-    self.assertEqual(set(), partition_props.prop_overrides)
-
-  def test_parseBuildProps_multipleImportStatements(self):
-    build_prop = copy.deepcopy(self.odm_build_prop)
-    build_prop.append(
-        'import /odm/etc/build_${ro.boot.product.product_name}.prop')
-
-    build_std_prop = [
-        'ro.product.odm.device=coral',
-    ]
-    build_pro_prop = [
-        'ro.product.odm.device=coralpro',
-    ]
-
-    product1_prop = [
-        'ro.product.odm.name=product1',
-        'ro.product.not_care=not_care',
-    ]
-
-    product2_prop = [
-        'ro.product.odm.name=product2',
-        'ro.product.not_care=not_care',
-    ]
-
-    input_file = self._BuildZipFile({
-        'ODM/etc/build.prop': '\n'.join(build_prop),
-        'ODM/etc/build_std.prop': '\n'.join(build_std_prop),
-        'ODM/etc/build_pro.prop': '\n'.join(build_pro_prop),
-        'ODM/etc/build_product1.prop': '\n'.join(product1_prop),
-        'ODM/etc/build_product2.prop': '\n'.join(product2_prop),
-    })
-
-    with zipfile.ZipFile(input_file, 'r') as input_zip:
-      placeholder_values = {
-          'ro.boot.product.device_name': 'std',
-          'ro.boot.product.product_name': 'product1',
-          'ro.boot.product.not_care': 'not_care',
-      }
-      partition_props = common.PartitionBuildProps.FromInputFile(
-          input_zip, 'odm', placeholder_values)
-
-    self.assertEqual({
-        'ro.odm.build.date.utc': '1578430045',
-        'ro.odm.build.fingerprint':
-        'google/coral/coral:10/RP1A.200325.001/6337676:user/dev-keys',
-        'ro.product.odm.device': 'coral',
-        'ro.product.odm.name': 'product1'
-    }, partition_props.build_props)
-
-    with zipfile.ZipFile(input_file, 'r') as input_zip:
-      placeholder_values = {
-          'ro.boot.product.device_name': 'pro',
-          'ro.boot.product.product_name': 'product2',
-          'ro.boot.product.not_care': 'not_care',
-      }
-      partition_props = common.PartitionBuildProps.FromInputFile(
-          input_zip, 'odm', placeholder_values)
-
-    self.assertEqual({
-        'ro.odm.build.date.utc': '1578430045',
-        'ro.odm.build.fingerprint':
-        'google/coral/coral:10/RP1A.200325.001/6337676:user/dev-keys',
-        'ro.product.odm.device': 'coralpro',
-        'ro.product.odm.name': 'product2'
-    }, partition_props.build_props)
-
-  def test_parseBuildProps_defineAfterOverride(self):
-    build_prop = copy.deepcopy(self.odm_build_prop)
-    build_prop.append('ro.product.odm.device=coral')
-
-    build_std_prop = [
-        'ro.product.odm.device=coral',
-    ]
-    build_pro_prop = [
-        'ro.product.odm.device=coralpro',
-    ]
-
-    input_file = self._BuildZipFile({
-        'ODM/etc/build.prop': '\n'.join(build_prop),
-        'ODM/etc/build_std.prop': '\n'.join(build_std_prop),
-        'ODM/etc/build_pro.prop': '\n'.join(build_pro_prop),
-    })
-
-    with zipfile.ZipFile(input_file, 'r') as input_zip:
-      placeholder_values = {
-          'ro.boot.product.device_name': 'std',
-      }
-
-      self.assertRaises(ValueError, common.PartitionBuildProps.FromInputFile,
-                        input_zip, 'odm', placeholder_values)
-
-  def test_parseBuildProps_duplicateOverride(self):
-    build_prop = copy.deepcopy(self.odm_build_prop)
-    build_prop.append(
-        'import /odm/etc/build_${ro.boot.product.product_name}.prop')
-
-    build_std_prop = [
-        'ro.product.odm.device=coral',
-        'ro.product.odm.name=product1',
-    ]
-    build_pro_prop = [
-        'ro.product.odm.device=coralpro',
-    ]
-
-    product1_prop = [
-        'ro.product.odm.name=product1',
-    ]
-
-    product2_prop = [
-        'ro.product.odm.name=product2',
-    ]
-
-    input_file = self._BuildZipFile({
-        'ODM/etc/build.prop': '\n'.join(build_prop),
-        'ODM/etc/build_std.prop': '\n'.join(build_std_prop),
-        'ODM/etc/build_pro.prop': '\n'.join(build_pro_prop),
-        'ODM/etc/build_product1.prop': '\n'.join(product1_prop),
-        'ODM/etc/build_product2.prop': '\n'.join(product2_prop),
-    })
-
-    with zipfile.ZipFile(input_file, 'r') as input_zip:
-      placeholder_values = {
-          'ro.boot.product.device_name': 'std',
-          'ro.boot.product.product_name': 'product1',
-      }
-      self.assertRaises(ValueError, common.PartitionBuildProps.FromInputFile,
-                        input_zip, 'odm', placeholder_values)
+    self.assertEqual({}, partition_props.prop_overrides)
diff --git a/tools/releasetools/test_ota_from_target_files.py b/tools/releasetools/test_ota_from_target_files.py
index 4077d06..e007863 100644
--- a/tools/releasetools/test_ota_from_target_files.py
+++ b/tools/releasetools/test_ota_from_target_files.py
@@ -26,8 +26,7 @@
     GetPackageMetadata, GetTargetFilesZipForSecondaryImages,
     GetTargetFilesZipWithoutPostinstallConfig, NonAbOtaPropertyFiles,
     Payload, PayloadSigner, POSTINSTALL_CONFIG, PropertyFiles,
-    StreamingPropertyFiles, WriteFingerprintAssertion,
-    CalculateRuntimeFingerprints)
+    StreamingPropertyFiles, WriteFingerprintAssertion)
 
 
 def construct_target_files(secondary=False):
@@ -1319,125 +1318,3 @@
             Payload.SECONDARY_PAYLOAD_PROPERTIES_TXT):
           continue
         self.assertEqual(zipfile.ZIP_STORED, entry_info.compress_type)
-
-
-class RuntimeFingerprintTest(test_utils.ReleaseToolsTestCase):
-  MISC_INFO = [
-      'recovery_api_version=3',
-      'fstab_version=2',
-      'recovery_as_boot=true',
-  ]
-
-  BUILD_PROP = [
-      'ro.build.version.release=version-release',
-      'ro.build.id=build-id',
-      'ro.build.version.incremental=version-incremental',
-      'ro.build.type=build-type',
-      'ro.build.tags=build-tags',
-  ]
-
-  VENDOR_BUILD_PROP = [
-      'ro.product.vendor.brand=vendor-product-brand',
-      'ro.product.vendor.name=vendor-product-name',
-      'ro.product.vendor.device=vendor-product-device'
-  ]
-
-  def setUp(self):
-    common.OPTIONS.oem_dicts = None
-    self.test_dir = common.MakeTempDir()
-    self.writeFiles({'META/misc_info.txt': '\n'.join(self.MISC_INFO)})
-
-  def writeFiles(self, contents_dict):
-    for path, content in contents_dict.items():
-      abs_path = os.path.join(self.test_dir, path)
-      dir_name = os.path.dirname(abs_path)
-      if not os.path.exists(dir_name):
-        os.makedirs(dir_name)
-      with open(abs_path, 'w') as f:
-        f.write(content)
-
-  @staticmethod
-  def constructFingerprint(prefix):
-    return '{}:version-release/build-id/version-incremental:' \
-           'build-type/build-tags'.format(prefix)
-
-  def test_CalculatePossibleFingerprints_no_dynamic_fingerprint(self):
-    build_prop = copy.deepcopy(self.BUILD_PROP)
-    build_prop.extend([
-        'ro.product.brand=product-brand',
-        'ro.product.name=product-name',
-        'ro.product.device=product-device',
-    ])
-    self.writeFiles({
-        'SYSTEM/build.prop': '\n'.join(build_prop),
-        'VENDOR/build.prop': '\n'.join(self.VENDOR_BUILD_PROP),
-    })
-    common.OPTIONS.info_dict = common.LoadInfoDict(self.test_dir)
-
-    self.assertEqual({
-        self.constructFingerprint('product-brand/product-name/product-device')
-    }, CalculateRuntimeFingerprints())
-
-  def test_CalculatePossibleFingerprints_single_override(self):
-    vendor_build_prop = copy.deepcopy(self.VENDOR_BUILD_PROP)
-    vendor_build_prop.extend([
-        'import /vendor/etc/build_${ro.boot.sku_name}.prop',
-    ])
-    self.writeFiles({
-        'SYSTEM/build.prop': '\n'.join(self.BUILD_PROP),
-        'VENDOR/build.prop': '\n'.join(vendor_build_prop),
-        'VENDOR/etc/build_std.prop':
-        'ro.product.vendor.name=vendor-product-std',
-        'VENDOR/etc/build_pro.prop':
-        'ro.product.vendor.name=vendor-product-pro',
-    })
-    common.OPTIONS.info_dict = common.LoadInfoDict(self.test_dir)
-    common.OPTIONS.boot_variable_values = {
-        'ro.boot.sku_name': ['std', 'pro']
-    }
-
-    self.assertEqual({
-        self.constructFingerprint(
-            'vendor-product-brand/vendor-product-name/vendor-product-device'),
-        self.constructFingerprint(
-            'vendor-product-brand/vendor-product-std/vendor-product-device'),
-        self.constructFingerprint(
-            'vendor-product-brand/vendor-product-pro/vendor-product-device'),
-    }, CalculateRuntimeFingerprints())
-
-  def test_CalculatePossibleFingerprints_multiple_overrides(self):
-    vendor_build_prop = copy.deepcopy(self.VENDOR_BUILD_PROP)
-    vendor_build_prop.extend([
-        'import /vendor/etc/build_${ro.boot.sku_name}.prop',
-        'import /vendor/etc/build_${ro.boot.device_name}.prop',
-    ])
-    self.writeFiles({
-        'SYSTEM/build.prop': '\n'.join(self.BUILD_PROP),
-        'VENDOR/build.prop': '\n'.join(vendor_build_prop),
-        'VENDOR/etc/build_std.prop':
-        'ro.product.vendor.name=vendor-product-std',
-        'VENDOR/etc/build_product1.prop':
-        'ro.product.vendor.device=vendor-device-product1',
-        'VENDOR/etc/build_pro.prop':
-        'ro.product.vendor.name=vendor-product-pro',
-        'VENDOR/etc/build_product2.prop':
-        'ro.product.vendor.device=vendor-device-product2',
-    })
-    common.OPTIONS.info_dict = common.LoadInfoDict(self.test_dir)
-    common.OPTIONS.boot_variable_values = {
-        'ro.boot.sku_name': ['std', 'pro'],
-        'ro.boot.device_name': ['product1', 'product2'],
-    }
-
-    self.assertEqual({
-        self.constructFingerprint(
-            'vendor-product-brand/vendor-product-name/vendor-product-device'),
-        self.constructFingerprint(
-            'vendor-product-brand/vendor-product-std/vendor-device-product1'),
-        self.constructFingerprint(
-            'vendor-product-brand/vendor-product-pro/vendor-device-product1'),
-        self.constructFingerprint(
-            'vendor-product-brand/vendor-product-std/vendor-device-product2'),
-        self.constructFingerprint(
-            'vendor-product-brand/vendor-product-pro/vendor-device-product2'),
-    }, CalculateRuntimeFingerprints())