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

Commit 70edcab6 authored by Tao Bao's avatar Tao Bao Committed by Gerrit Code Review
Browse files

Merge "releasetools: Keep the original RangeSet for 'uses_shared_blocks' case."

parents ab459af5 2a20f344
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -827,10 +827,10 @@ def GetSparseImage(which, tmpdir, input_zip, allow_shared_blocks,
    ranges = image.file_map[entry]

    # If a RangeSet has been tagged as using shared blocks while loading the
    # image, its block list must be already incomplete due to that reason. Don't
    # give it 'incomplete' tag to avoid messing up the imgdiff stats.
    # image, check the original block list to determine its completeness. Note
    # that the 'incomplete' flag would be tagged to the original RangeSet only.
    if ranges.extra.get('uses_shared_blocks'):
      continue
      ranges = ranges.extra['uses_shared_blocks']

    if RoundUpTo4K(info.file_size) > ranges.size() * 4096:
      ranges.extra['incomplete'] = True
+11 −5
Original line number Diff line number Diff line
@@ -248,15 +248,21 @@ class SparseImage(object):
        ranges = rangelib.RangeSet.parse(ranges)

        if allow_shared_blocks:
          # Find the shared blocks that have been claimed by others.
          # Find the shared blocks that have been claimed by others. If so, tag
          # the entry so that we can skip applying imgdiff on this file.
          shared_blocks = ranges.subtract(remaining)
          if shared_blocks:
            ranges = ranges.subtract(shared_blocks)
            if not ranges:
            non_shared = ranges.subtract(shared_blocks)
            if not non_shared:
              continue

            # Tag the entry so that we can skip applying imgdiff on this file.
            ranges.extra['uses_shared_blocks'] = True
            # There shouldn't anything in the extra dict yet.
            assert not ranges.extra, "Non-empty RangeSet.extra"

            # Put the non-shared RangeSet as the value in the block map, which
            # has a copy of the original RangeSet.
            non_shared.extra['uses_shared_blocks'] = ranges
            ranges = non_shared

        out[fn] = ranges
        assert ranges.size() == ranges.intersect(remaining).size()
+14 −7
Original line number Diff line number Diff line
@@ -89,13 +89,20 @@ def ValidateFileConsistency(input_zip, input_tmp, info_dict):
        logging.warning('Skipping %s that has incomplete block list', entry)
        continue

      # Use the original RangeSet if applicable, which includes the shared
      # blocks. And this needs to happen before checking the monotonicity flag.
      if ranges.extra.get('uses_shared_blocks'):
        file_ranges = ranges.extra['uses_shared_blocks']
      else:
        file_ranges = ranges

      # TODO(b/79951650): Handle files with non-monotonic ranges.
      if not ranges.monotonic:
      if not file_ranges.monotonic:
        logging.warning(
            'Skipping %s that has non-monotonic ranges: %s', entry, ranges)
            'Skipping %s that has non-monotonic ranges: %s', entry, file_ranges)
        continue

      blocks_sha1 = image.RangeSha1(ranges)
      blocks_sha1 = image.RangeSha1(file_ranges)

      # The filename under unpacked directory, such as SYSTEM/bin/sh.
      unpacked_name = os.path.join(
@@ -104,7 +111,7 @@ def ValidateFileConsistency(input_zip, input_tmp, info_dict):
      file_sha1 = unpacked_file.sha1
      assert blocks_sha1 == file_sha1, \
          'file: %s, range: %s, blocks_sha1: %s, file_sha1: %s' % (
              entry, ranges, blocks_sha1, file_sha1)
              entry, file_ranges, blocks_sha1, file_sha1)

  logging.info('Validating file consistency.')

@@ -311,9 +318,9 @@ def ValidateVerifiedBootImages(input_tmp, info_dict, options):
  if info_dict.get("avb_enable") == "true":
    logging.info('Verifying Verified Boot 2.0 (AVB) images...')

    # Temporarily disable the verification for AVB-signed images, due to the
    # dependency on PyCrypto in `avbtool verify_image` (Bug: 119624011).
    logging.info('Temporarily disabled due to b/119624011')
    # TODO(b/120517892): Temporarily disable the verification for AVB-signed
    # images. Needing supporting changes in caller to pass in the desired keys.
    logging.info('Temporarily disabled due to b/120517892')


def main():