diff options
Diffstat (limited to 'scripts/update_payload/applier.py')
-rw-r--r-- | scripts/update_payload/applier.py | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/scripts/update_payload/applier.py b/scripts/update_payload/applier.py index 3cb9741a..eeb2e424 100644 --- a/scripts/update_payload/applier.py +++ b/scripts/update_payload/applier.py @@ -18,6 +18,10 @@ import array import bz2 import hashlib import itertools +try: + import lzma +except ImportError: + from backports import lzma import os import shutil import subprocess @@ -217,7 +221,7 @@ class PayloadApplier(object): self.truncate_to_expected_size = truncate_to_expected_size def _ApplyReplaceOperation(self, op, op_name, out_data, part_file, part_size): - """Applies a REPLACE{,_BZ} operation. + """Applies a REPLACE{,_BZ,_XZ} operation. Args: op: the operation object @@ -236,6 +240,9 @@ class PayloadApplier(object): if op.type == common.OpType.REPLACE_BZ: out_data = bz2.decompress(out_data) data_length = len(out_data) + elif op.type == common.OpType.REPLACE_XZ: + out_data = lzma.decompress(out_data) + data_length = len(out_data) # Write data to blocks specified in dst extents. data_start = 0 @@ -507,7 +514,8 @@ class PayloadApplier(object): # Read data blob. data = self.payload.ReadDataBlob(op.data_offset, op.data_length) - if op.type in (common.OpType.REPLACE, common.OpType.REPLACE_BZ): + if op.type in (common.OpType.REPLACE, common.OpType.REPLACE_BZ, + common.OpType.REPLACE_XZ): self._ApplyReplaceOperation(op, op_name, data, new_part_file, part_size) elif op.type == common.OpType.MOVE: self._ApplyMoveOperation(op, op_name, new_part_file) |