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

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

Merge "Add option to enable lz4diff"

parents 9e81c448 f2728d61
Loading
Loading
Loading
Loading
+31 −8
Original line number Diff line number Diff line
@@ -233,6 +233,10 @@ A/B OTA specific options

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

  --enable_lz4diff
      Whether to enable lz4diff feature. Will generate smaller OTA for EROFS but
      uses more memory.
"""

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

POSTINSTALL_CONFIG = 'META/postinstall_config.txt'
DYNAMIC_PARTITION_INFO = 'META/dynamic_partitions_info.txt'
@@ -1145,13 +1150,25 @@ 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()]
    OPTIONS.enable_zucchini = False

  additional_args += ["--enable_zucchini",
                      str(OPTIONS.enable_zucchini).lower()]

  if not ota_utils.IsLz4diffCompatible(source_file, target_file):
    OPTIONS.enable_lz4diff = False

  additional_args += ["--enable_lz4diff",
                      str(OPTIONS.enable_lz4diff).lower()]

  if source_file and OPTIONS.enable_lz4diff:
    input_tmp = common.UnzipTemp(source_file, ["META/liblz4.so"])
    liblz4_path = os.path.join(input_tmp, "META", "liblz4.so")
    assert os.path.exists(
        liblz4_path), "liblz4.so not found in META/ dir of target file {}".format(liblz4_path)
    logger.info("Enabling lz4diff %s", liblz4_path)
    additional_args += ["--liblz4_path", liblz4_path]

  if OPTIONS.disable_vabc:
    additional_args += ["--disable_vabc", "true"]
@@ -1333,13 +1350,18 @@ def main(argv):
    elif o == "--vabc_downgrade":
      OPTIONS.vabc_downgrade = True
    elif o == "--enable_vabc_xor":
      assert a.lower() in ["true", "false"]
      OPTIONS.enable_vabc_xor = a.lower() != "false"
    elif o == "--force_minor_version":
      OPTIONS.force_minor_version = a
    elif o == "--compressor_types":
      OPTIONS.compressor_types = a
    elif o == "--enable_zucchini":
      assert a.lower() in ["true", "false"]
      OPTIONS.enable_zucchini = a.lower() != "false"
    elif o == "--enable_lz4diff":
      assert a.lower() in ["true", "false"]
      OPTIONS.enable_lz4diff = a.lower() != "false"
    else:
      return False
    return True
@@ -1388,6 +1410,7 @@ def main(argv):
                                 "force_minor_version=",
                                 "compressor_types=",
                                 "enable_zucchin=",
                                 "enable_lz4diff=",
                             ], extra_option_handler=option_handler)

  if len(args) != 2:
+22 −0
Original line number Diff line number Diff line
@@ -640,6 +640,28 @@ def ConstructOtaApexInfo(target_zip, source_file=None):
  return target_apex_proto.SerializeToString()


def IsLz4diffCompatible(source_file: str, target_file: str):
  """Check whether lz4diff 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 lz4diff versions are compatible
  """
  if source_file is None or target_file is None:
    return False
  # Right now we enable lz4diff as long as source build has liblz4.so.
  # In the future we might introduce version system to lz4diff as well.
  if zipfile.is_zipfile(source_file):
    with zipfile.ZipFile(source_file, "r") as zfp:
      return "META/liblz4.so" in zfp.namelist()
  else:
    assert os.path.isdir(source_file)
    return os.path.exists(os.path.join(source_file, "META", "liblz4.so"))


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