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

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

Merge changes from topic 'imgdiff-squashfs'

* changes:
  releasetools: Fix the detection of using squashfs.
  releasetools: Disable using imgdiff for squashfs.
parents 8a09095c 62a6c464
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -261,7 +261,8 @@ class HeapItem(object):
# original image.

class BlockImageDiff(object):
  def __init__(self, tgt, src=None, threads=None, version=4):
  def __init__(self, tgt, src=None, threads=None, version=4,
               disable_imgdiff=False):
    if threads is None:
      threads = multiprocessing.cpu_count() // 2
      if threads == 0:
@@ -274,6 +275,7 @@ class BlockImageDiff(object):
    self._max_stashed_size = 0
    self.touched_src_ranges = RangeSet()
    self.touched_src_sha1 = None
    self.disable_imgdiff = disable_imgdiff

    assert version in (1, 2, 3, 4)

@@ -704,6 +706,7 @@ class BlockImageDiff(object):
            # produces significantly smaller patches than bsdiff).
            # This is permissible if:
            #
            #  - imgdiff is not disabled, and
            #  - the source and target files are monotonic (ie, the
            #    data is stored with blocks in increasing order), and
            #  - we haven't removed any blocks from the source set.
@@ -713,7 +716,7 @@ class BlockImageDiff(object):
            # zip file (plus possibly extra zeros in the last block),
            # which is what imgdiff needs to operate.  (imgdiff is
            # fine with extra zeros at the end of the file.)
            imgdiff = (xf.intact and
            imgdiff = (not self.disable_imgdiff and xf.intact and
                       xf.tgt_name.split(".")[-1].lower()
                       in ("apk", "jar", "zip"))
            xf.style = "imgdiff" if imgdiff else "bsdiff"
+4 −2
Original line number Diff line number Diff line
@@ -1392,11 +1392,12 @@ def ComputeDifferences(diffs):

class BlockDifference(object):
  def __init__(self, partition, tgt, src=None, check_first_block=False,
               version=None):
               version=None, disable_imgdiff=False):
    self.tgt = tgt
    self.src = src
    self.partition = partition
    self.check_first_block = check_first_block
    self.disable_imgdiff = disable_imgdiff

    if version is None:
      version = 1
@@ -1407,7 +1408,8 @@ class BlockDifference(object):
    self.version = version

    b = blockimgdiff.BlockImageDiff(tgt, src, threads=OPTIONS.worker_threads,
                                    version=self.version)
                                    version=self.version,
                                    disable_imgdiff=self.disable_imgdiff)
    tmpdir = tempfile.mkdtemp()
    OPTIONS.tempfiles.append(tmpdir)
    self.path = os.path.join(tmpdir, partition)
+16 −6
Original line number Diff line number Diff line
@@ -862,13 +862,21 @@ def WriteBlockIncrementalOTAPackage(target_zip, source_zip, output_zip):
        int(i) for i in
        OPTIONS.info_dict.get("blockimgdiff_versions", "1").split(","))

  # Check first block of system partition for remount R/W only if
  # disk type is ext4
  system_partition = OPTIONS.source_info_dict["fstab"]["/system"]
  check_first_block = system_partition.fs_type == "ext4"
  # Check the first block of the source system partition for remount R/W only
  # if the filesystem is ext4.
  system_src_partition = OPTIONS.source_info_dict["fstab"]["/system"]
  check_first_block = system_src_partition.fs_type == "ext4"
  # Disable using imgdiff for squashfs. 'imgdiff -z' expects input files to be
  # in zip formats. However with squashfs, a) all files are compressed in LZ4;
  # b) the blocks listed in block map may not contain all the bytes for a given
  # file (because they're rounded to be 4K-aligned).
  system_tgt_partition = OPTIONS.target_info_dict["fstab"]["/system"]
  disable_imgdiff = (system_src_partition.fs_type == "squashfs" or
                     system_tgt_partition.fs_type == "squashfs")
  system_diff = common.BlockDifference("system", system_tgt, system_src,
                                       check_first_block,
                                       version=blockimgdiff_version)
                                       version=blockimgdiff_version,
                                       disable_imgdiff=disable_imgdiff)

  if HasVendorPartition(target_zip):
    if not HasVendorPartition(source_zip):
@@ -882,9 +890,11 @@ def WriteBlockIncrementalOTAPackage(target_zip, source_zip, output_zip):
    # disk type is ext4
    vendor_partition = OPTIONS.source_info_dict["fstab"]["/vendor"]
    check_first_block = vendor_partition.fs_type == "ext4"
    disable_imgdiff = vendor_partition.fs_type == "squashfs"
    vendor_diff = common.BlockDifference("vendor", vendor_tgt, vendor_src,
                                         check_first_block,
                                         version=blockimgdiff_version)
                                         version=blockimgdiff_version,
                                         disable_imgdiff=disable_imgdiff)
  else:
    vendor_diff = None