Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 06400177 authored by Kelvin Zhang's avatar Kelvin Zhang
Browse files

Trigger data wipe on spl-downgrade as well

Test: make an spl-downgrade pkg
Change-Id: I3220719a1b3fe6b2f07bfb9fd526ec6e94ca16ba
parent 6023b194
Loading
Loading
Loading
Loading
+38 −32
Original line number Diff line number Diff line
@@ -293,8 +293,6 @@ SECONDARY_PAYLOAD_SKIPPED_IMAGES = [
    'vendor_boot']




class PayloadSigner(object):
  """A class that wraps the payload signing works.

@@ -761,10 +759,12 @@ def GetTargetFilesZipWithoutPostinstallConfig(input_file):
  common.ZipDelete(target_file, POSTINSTALL_CONFIG)
  return target_file


def ParseInfoDict(target_file_path):
  with zipfile.ZipFile(target_file_path, 'r', allowZip64=True) as zfp:
    return common.LoadInfoDict(zfp)


def GetTargetFilesZipForPartialUpdates(input_file, ab_partitions):
  """Returns a target-files.zip for partial ota update package generation.

@@ -959,12 +959,14 @@ def GetTargetFilesZipForCustomImagesUpdates(input_file, custom_images):

  return target_file


def GeneratePartitionTimestampFlags(partition_state):
  partition_timestamps = [
      part.partition_name + ":" + part.version
      for part in partition_state]
  return ["--partition_timestamps", ",".join(partition_timestamps)]


def GeneratePartitionTimestampFlagsDowngrade(
        pre_partition_state, post_partition_state):
  assert pre_partition_state is not None
@@ -976,15 +978,18 @@ def GeneratePartitionTimestampFlagsDowngrade(
        max(part.version, partition_timestamps[part.partition_name])
  return [
      "--partition_timestamps",
      ",".join([key + ":" + val for (key, val) in partition_timestamps.items()])
      ",".join([key + ":" + val for (key, val)
                in partition_timestamps.items()])
  ]


def IsSparseImage(filepath):
  with open(filepath, 'rb') as fp:
    # Magic for android sparse image format
    # https://source.android.com/devices/bootloader/images
    return fp.read(4) == b'\x3A\xFF\x26\xED'


def SupportsMainlineGkiUpdates(target_file):
  """Return True if the build supports MainlineGKIUpdates.

@@ -1023,6 +1028,7 @@ def SupportsMainlineGkiUpdates(target_file):
  pattern = re.compile(r"com\.android\.gki\..*\.apex")
  return pattern.search(output) is not None


def GenerateAbOtaPackage(target_file, output_file, source_file=None):
  """Generates an Android OTA package that has A/B update payload."""
  # Stage the output zip package for package signing.
@@ -1099,7 +1105,8 @@ def GenerateAbOtaPackage(target_file, output_file, source_file=None):
  additional_args += ["--max_timestamp", max_timestamp]

  if SupportsMainlineGkiUpdates(source_file):
    logger.warning("Detected build with mainline GKI, include full boot image.")
    logger.warning(
        "Detected build with mainline GKI, include full boot image.")
    additional_args.extend(["--full_boot", "true"])

  payload.Generate(
@@ -1267,6 +1274,7 @@ def main(argv):
      OPTIONS.disable_vabc = True
    elif o == "--spl_downgrade":
      OPTIONS.spl_downgrade = True
      OPTIONS.wipe_user_data = True
    else:
      return False
    return True
@@ -1337,7 +1345,6 @@ def main(argv):
    if OPTIONS.incremental_source is None:
      raise ValueError("Cannot generate downgradable full OTAs")


  # TODO(xunchang) for retrofit and partial updates, maybe we should rebuild the
  # target-file and reload the info_dict. So the info will be consistent with
  # the modified target-file.
@@ -1345,7 +1352,6 @@ def main(argv):
  logger.info("--- target info ---")
  common.DumpInfoDict(OPTIONS.info_dict)


  # Load the source build dict if applicable.
  if OPTIONS.incremental_source is not None:
    OPTIONS.target_info_dict = OPTIONS.info_dict
@@ -1419,7 +1425,7 @@ def main(argv):
    source_spl = source_build_prop.GetProp(SECURITY_PATCH_LEVEL_PROP_NAME)
    target_spl = target_build_prop.GetProp(SECURITY_PATCH_LEVEL_PROP_NAME)
    is_spl_downgrade = target_spl < source_spl
    if is_spl_downgrade and not OPTIONS.spl_downgrade:
    if is_spl_downgrade and not OPTIONS.spl_downgrade and not OPTIONS.downgrade:
      raise common.ExternalError(
          "Target security patch level {} is older than source SPL {} applying "
          "such OTA will likely cause device fail to boot. Pass --spl_downgrade "