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

Commit dcd7e283 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Add option to enable zucchini"

parents 76537be0 410bb389
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -230,6 +230,9 @@ A/B OTA specific options

  --compressor_types
      A colon ':' separated list of compressors. Allowed values are bz2 and brotli.

  --enable_zucchini
      Whether to enable to zucchini feature. Will generate smaller OTA but uses more memory.
"""

from __future__ import print_function
@@ -299,6 +302,7 @@ OPTIONS.vabc_downgrade = False
OPTIONS.enable_vabc_xor = True
OPTIONS.force_minor_version = None
OPTIONS.compressor_types = None
OPTIONS.enable_zucchini = None

POSTINSTALL_CONFIG = 'META/postinstall_config.txt'
DYNAMIC_PARTITION_INFO = 'META/dynamic_partitions_info.txt'
@@ -1141,6 +1145,14 @@ def GenerateAbOtaPackage(target_file, output_file, source_file=None):
    partition_timestamps_flags = GeneratePartitionTimestampFlags(
        metadata.postcondition.partition_state)

  # Auto-check for compatibility only if --enable_zucchini omitted. Otherwise
  # let user override zucchini settings. This is useful for testing.
  if OPTIONS.enable_zucchini is None:
    if not ota_utils.IsZucchiniCompatible(source_file, target_file):
      additional_args += ["--enable_zucchini", "false"]
  else:
    additional_args += ["--enable_zucchini", str(OPTIONS.enable_zucchini).lower()]

  if OPTIONS.disable_vabc:
    additional_args += ["--disable_vabc", "true"]
  if OPTIONS.enable_vabc_xor:
@@ -1326,6 +1338,8 @@ def main(argv):
      OPTIONS.force_minor_version = a
    elif o == "--compressor_types":
      OPTIONS.compressor_types = a
    elif o == "--enable_zucchini":
      OPTIONS.enable_zucchini = a.lower() != "false"
    else:
      return False
    return True
@@ -1373,6 +1387,7 @@ def main(argv):
                                 "enable_vabc_xor=",
                                 "force_minor_version=",
                                 "compressor_types=",
                                 "enable_zucchin=",
                             ], extra_option_handler=option_handler)

  if len(args) != 2:
+35 −0
Original line number Diff line number Diff line
@@ -638,3 +638,38 @@ def ConstructOtaApexInfo(target_zip, source_file=None):
      target_apex.source_version = source_apex_versions[name]

  return target_apex_proto.SerializeToString()


def IsZucchiniCompatible(source_file: str, target_file: str):
  """Check whether zucchini versions in two builds are compatible

  Args:
    source_file: Path to source build's target_file.zip
    target_file: Path to target build's target_file.zip

  Returns:
    bool true if and only if zucchini versions are compatible
  """
  if source_file is None or target_file is None:
    return False
  assert os.path.exists(source_file)
  assert os.path.exists(target_file)

  assert zipfile.is_zipfile(source_file) or os.path.isdir(source_file)
  assert zipfile.is_zipfile(target_file) or os.path.isdir(target_file)
  _ZUCCHINI_CONFIG_ENTRY_NAME = "META/zucchini_config.txt"

  def ReadEntry(path, entry):
    # Read an entry inside a .zip file or extracted dir of .zip file
    if zipfile.is_zipfile(path):
      with zipfile.ZipFile(path, "r", allowZip64=True) as zfp:
        if entry in zfp.namelist():
          return zfp.read(entry).decode()
    else:
      entry_path = os.path.join(entry, path)
      if os.path.exists(entry_path):
        with open(entry_path, "r") as fp:
          return fp.read()
      else:
        return ""
  return ReadEntry(source_file, _ZUCCHINI_CONFIG_ENTRY_NAME) == ReadEntry(target_file, _ZUCCHINI_CONFIG_ENTRY_NAME)