Loading tools/releasetools/blockimgdiff.py +1 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,7 @@ class EmptyImage(Image): self.extended = RangeSet() self.total_blocks = 0 self.file_map = {} self.hashtree_info = None def RangeSha1(self, ranges): return sha1().hexdigest() Loading tools/releasetools/common.py +9 −3 Original line number Diff line number Diff line Loading @@ -1770,15 +1770,21 @@ class BlockDifference(object): if OPTIONS.source_info_dict is None: is_dynamic_build = OPTIONS.info_dict.get( "use_dynamic_partitions") == "true" is_dynamic_source = False else: is_dynamic_build = OPTIONS.source_info_dict.get( "use_dynamic_partitions") == "true" is_dynamic_source = partition in shlex.split( OPTIONS.source_info_dict.get("dynamic_partition_list", "").strip()) # For dynamic partitions builds, always check partition list in target build # because new partitions may be added. is_dynamic = is_dynamic_build and partition in shlex.split( is_dynamic_target = partition in shlex.split( OPTIONS.info_dict.get("dynamic_partition_list", "").strip()) # For dynamic partitions builds, check partition list in both source # and target build because new partitions may be added, and existing # partitions may be removed. is_dynamic = is_dynamic_build and (is_dynamic_source or is_dynamic_target) if is_dynamic: self.device = 'map_partition("%s")' % partition else: Loading tools/releasetools/test_common.py +37 −1 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import test_utils import validate_target_files from rangelib import RangeSet from blockimgdiff import EmptyImage, DataImage KiB = 1024 MiB = 1024 * KiB Loading Loading @@ -1113,7 +1114,7 @@ super_group_qux_group_size={group_qux_size} "ops that remove / shrink partitions must precede ops that " "grow / add partitions") def test_inc_partitions(self): def test_incremental(self): source_info = common.LoadDictionaryFromLines(""" dynamic_partition_list=system vendor product product_services super_partition_groups=group_foo Loading Loading @@ -1186,3 +1187,38 @@ super_group_bar_partition_list=product min_idx_move_partition_in_foo, "Must shrink partitions / remove partitions from group" "before adding / moving partitions into group") def test_remove_partition(self): source_info = common.LoadDictionaryFromLines(""" blockimgdiff_versions=3,4 use_dynamic_partitions=true dynamic_partition_list=foo super_partition_groups=group_foo super_group_foo_group_size={group_foo_size} super_group_foo_partition_list=foo """.format(group_foo_size=4 * GiB).split("\n")) target_info = common.LoadDictionaryFromLines(""" blockimgdiff_versions=3,4 use_dynamic_partitions=true super_partition_groups=group_foo super_group_foo_group_size={group_foo_size} """.format(group_foo_size=4 * GiB).split("\n")) common.OPTIONS.info_dict = target_info common.OPTIONS.target_info_dict = target_info common.OPTIONS.source_info_dict = source_info common.OPTIONS.cache_size = 4 * 4096 block_diffs = [common.BlockDifference("foo", EmptyImage(), src=DataImage("source", pad=True))] dp_diff = common.DynamicPartitionsDifference(target_info, block_diffs, source_info_dict=source_info) with zipfile.ZipFile(self.output_path, 'w') as output_zip: dp_diff.WriteScript(self.script, output_zip, write_verify_script=True) self.assertNotIn("block_image_update", str(self.script), "Removed partition should not be patched.") lines = self.get_op_list(self.output_path) self.assertEqual(lines, ["remove foo"]) Loading
tools/releasetools/blockimgdiff.py +1 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,7 @@ class EmptyImage(Image): self.extended = RangeSet() self.total_blocks = 0 self.file_map = {} self.hashtree_info = None def RangeSha1(self, ranges): return sha1().hexdigest() Loading
tools/releasetools/common.py +9 −3 Original line number Diff line number Diff line Loading @@ -1770,15 +1770,21 @@ class BlockDifference(object): if OPTIONS.source_info_dict is None: is_dynamic_build = OPTIONS.info_dict.get( "use_dynamic_partitions") == "true" is_dynamic_source = False else: is_dynamic_build = OPTIONS.source_info_dict.get( "use_dynamic_partitions") == "true" is_dynamic_source = partition in shlex.split( OPTIONS.source_info_dict.get("dynamic_partition_list", "").strip()) # For dynamic partitions builds, always check partition list in target build # because new partitions may be added. is_dynamic = is_dynamic_build and partition in shlex.split( is_dynamic_target = partition in shlex.split( OPTIONS.info_dict.get("dynamic_partition_list", "").strip()) # For dynamic partitions builds, check partition list in both source # and target build because new partitions may be added, and existing # partitions may be removed. is_dynamic = is_dynamic_build and (is_dynamic_source or is_dynamic_target) if is_dynamic: self.device = 'map_partition("%s")' % partition else: Loading
tools/releasetools/test_common.py +37 −1 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import test_utils import validate_target_files from rangelib import RangeSet from blockimgdiff import EmptyImage, DataImage KiB = 1024 MiB = 1024 * KiB Loading Loading @@ -1113,7 +1114,7 @@ super_group_qux_group_size={group_qux_size} "ops that remove / shrink partitions must precede ops that " "grow / add partitions") def test_inc_partitions(self): def test_incremental(self): source_info = common.LoadDictionaryFromLines(""" dynamic_partition_list=system vendor product product_services super_partition_groups=group_foo Loading Loading @@ -1186,3 +1187,38 @@ super_group_bar_partition_list=product min_idx_move_partition_in_foo, "Must shrink partitions / remove partitions from group" "before adding / moving partitions into group") def test_remove_partition(self): source_info = common.LoadDictionaryFromLines(""" blockimgdiff_versions=3,4 use_dynamic_partitions=true dynamic_partition_list=foo super_partition_groups=group_foo super_group_foo_group_size={group_foo_size} super_group_foo_partition_list=foo """.format(group_foo_size=4 * GiB).split("\n")) target_info = common.LoadDictionaryFromLines(""" blockimgdiff_versions=3,4 use_dynamic_partitions=true super_partition_groups=group_foo super_group_foo_group_size={group_foo_size} """.format(group_foo_size=4 * GiB).split("\n")) common.OPTIONS.info_dict = target_info common.OPTIONS.target_info_dict = target_info common.OPTIONS.source_info_dict = source_info common.OPTIONS.cache_size = 4 * 4096 block_diffs = [common.BlockDifference("foo", EmptyImage(), src=DataImage("source", pad=True))] dp_diff = common.DynamicPartitionsDifference(target_info, block_diffs, source_info_dict=source_info) with zipfile.ZipFile(self.output_path, 'w') as output_zip: dp_diff.WriteScript(self.script, output_zip, write_verify_script=True) self.assertNotIn("block_image_update", str(self.script), "Removed partition should not be patched.") lines = self.get_op_list(self.output_path) self.assertEqual(lines, ["remove foo"])