Merge changes from topic 'imgdiff-squashfs'
* changes: releasetools: Fix the detection of using squashfs. releasetools: Disable using imgdiff for squashfs.
This commit is contained in:
@@ -261,7 +261,8 @@ class HeapItem(object):
|
|||||||
# original image.
|
# original image.
|
||||||
|
|
||||||
class BlockImageDiff(object):
|
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:
|
if threads is None:
|
||||||
threads = multiprocessing.cpu_count() // 2
|
threads = multiprocessing.cpu_count() // 2
|
||||||
if threads == 0:
|
if threads == 0:
|
||||||
@@ -274,6 +275,7 @@ class BlockImageDiff(object):
|
|||||||
self._max_stashed_size = 0
|
self._max_stashed_size = 0
|
||||||
self.touched_src_ranges = RangeSet()
|
self.touched_src_ranges = RangeSet()
|
||||||
self.touched_src_sha1 = None
|
self.touched_src_sha1 = None
|
||||||
|
self.disable_imgdiff = disable_imgdiff
|
||||||
|
|
||||||
assert version in (1, 2, 3, 4)
|
assert version in (1, 2, 3, 4)
|
||||||
|
|
||||||
@@ -704,6 +706,7 @@ class BlockImageDiff(object):
|
|||||||
# produces significantly smaller patches than bsdiff).
|
# produces significantly smaller patches than bsdiff).
|
||||||
# This is permissible if:
|
# This is permissible if:
|
||||||
#
|
#
|
||||||
|
# - imgdiff is not disabled, and
|
||||||
# - the source and target files are monotonic (ie, the
|
# - the source and target files are monotonic (ie, the
|
||||||
# data is stored with blocks in increasing order), and
|
# data is stored with blocks in increasing order), and
|
||||||
# - we haven't removed any blocks from the source set.
|
# - 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),
|
# zip file (plus possibly extra zeros in the last block),
|
||||||
# which is what imgdiff needs to operate. (imgdiff is
|
# which is what imgdiff needs to operate. (imgdiff is
|
||||||
# fine with extra zeros at the end of the file.)
|
# 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()
|
xf.tgt_name.split(".")[-1].lower()
|
||||||
in ("apk", "jar", "zip"))
|
in ("apk", "jar", "zip"))
|
||||||
xf.style = "imgdiff" if imgdiff else "bsdiff"
|
xf.style = "imgdiff" if imgdiff else "bsdiff"
|
||||||
|
@@ -1392,11 +1392,12 @@ def ComputeDifferences(diffs):
|
|||||||
|
|
||||||
class BlockDifference(object):
|
class BlockDifference(object):
|
||||||
def __init__(self, partition, tgt, src=None, check_first_block=False,
|
def __init__(self, partition, tgt, src=None, check_first_block=False,
|
||||||
version=None):
|
version=None, disable_imgdiff=False):
|
||||||
self.tgt = tgt
|
self.tgt = tgt
|
||||||
self.src = src
|
self.src = src
|
||||||
self.partition = partition
|
self.partition = partition
|
||||||
self.check_first_block = check_first_block
|
self.check_first_block = check_first_block
|
||||||
|
self.disable_imgdiff = disable_imgdiff
|
||||||
|
|
||||||
if version is None:
|
if version is None:
|
||||||
version = 1
|
version = 1
|
||||||
@@ -1407,7 +1408,8 @@ class BlockDifference(object):
|
|||||||
self.version = version
|
self.version = version
|
||||||
|
|
||||||
b = blockimgdiff.BlockImageDiff(tgt, src, threads=OPTIONS.worker_threads,
|
b = blockimgdiff.BlockImageDiff(tgt, src, threads=OPTIONS.worker_threads,
|
||||||
version=self.version)
|
version=self.version,
|
||||||
|
disable_imgdiff=self.disable_imgdiff)
|
||||||
tmpdir = tempfile.mkdtemp()
|
tmpdir = tempfile.mkdtemp()
|
||||||
OPTIONS.tempfiles.append(tmpdir)
|
OPTIONS.tempfiles.append(tmpdir)
|
||||||
self.path = os.path.join(tmpdir, partition)
|
self.path = os.path.join(tmpdir, partition)
|
||||||
|
@@ -862,13 +862,21 @@ def WriteBlockIncrementalOTAPackage(target_zip, source_zip, output_zip):
|
|||||||
int(i) for i in
|
int(i) for i in
|
||||||
OPTIONS.info_dict.get("blockimgdiff_versions", "1").split(","))
|
OPTIONS.info_dict.get("blockimgdiff_versions", "1").split(","))
|
||||||
|
|
||||||
# Check first block of system partition for remount R/W only if
|
# Check the first block of the source system partition for remount R/W only
|
||||||
# disk type is ext4
|
# if the filesystem is ext4.
|
||||||
system_partition = OPTIONS.source_info_dict["fstab"]["/system"]
|
system_src_partition = OPTIONS.source_info_dict["fstab"]["/system"]
|
||||||
check_first_block = system_partition.fs_type == "ext4"
|
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,
|
system_diff = common.BlockDifference("system", system_tgt, system_src,
|
||||||
check_first_block,
|
check_first_block,
|
||||||
version=blockimgdiff_version)
|
version=blockimgdiff_version,
|
||||||
|
disable_imgdiff=disable_imgdiff)
|
||||||
|
|
||||||
if HasVendorPartition(target_zip):
|
if HasVendorPartition(target_zip):
|
||||||
if not HasVendorPartition(source_zip):
|
if not HasVendorPartition(source_zip):
|
||||||
@@ -882,9 +890,11 @@ def WriteBlockIncrementalOTAPackage(target_zip, source_zip, output_zip):
|
|||||||
# disk type is ext4
|
# disk type is ext4
|
||||||
vendor_partition = OPTIONS.source_info_dict["fstab"]["/vendor"]
|
vendor_partition = OPTIONS.source_info_dict["fstab"]["/vendor"]
|
||||||
check_first_block = vendor_partition.fs_type == "ext4"
|
check_first_block = vendor_partition.fs_type == "ext4"
|
||||||
|
disable_imgdiff = vendor_partition.fs_type == "squashfs"
|
||||||
vendor_diff = common.BlockDifference("vendor", vendor_tgt, vendor_src,
|
vendor_diff = common.BlockDifference("vendor", vendor_tgt, vendor_src,
|
||||||
check_first_block,
|
check_first_block,
|
||||||
version=blockimgdiff_version)
|
version=blockimgdiff_version,
|
||||||
|
disable_imgdiff=disable_imgdiff)
|
||||||
else:
|
else:
|
||||||
vendor_diff = None
|
vendor_diff = None
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user