releasetools: Keep the original RangeSet for 'uses_shared_blocks' case.
Setting 'uses_shared_blocks' indicates that the block list for a given file is incomplete, as some of the blocks are "owned" by others. As a result, such a file will be skipped from imgdiff'ing. This CL makes a copy of the original block list before removing the shared blocks. It uses the original RangeSet as the value of extra['uses_shared_blocks']. validate_target_files.py will try to read the file as in the original RangeSet, unless the original list is also incomplete or has non-monotonic ranges. Test: Run validate_target_files on a target that uses `BOARD_EXT4_SHARE_DUP_BLOCKS := true`. Change-Id: I259e871ecc249ba0c14b5796bef413185a1b8242
This commit is contained in:
@@ -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()
|
||||
|
Reference in New Issue
Block a user