summaryrefslogtreecommitdiff
path: root/scripts/payload_info.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/payload_info.py')
-rwxr-xr-xscripts/payload_info.py75
1 files changed, 31 insertions, 44 deletions
diff --git a/scripts/payload_info.py b/scripts/payload_info.py
index 09a7cf78..8343d212 100755
--- a/scripts/payload_info.py
+++ b/scripts/payload_info.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2
+#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2015 The Android Open Source Project
@@ -18,16 +18,17 @@
"""payload_info: Show information about an update payload."""
+from __future__ import absolute_import
from __future__ import print_function
import argparse
-import itertools
import sys
import textwrap
+from six.moves import range
import update_payload
-MAJOR_PAYLOAD_VERSION_CHROMEOS = 1
+
MAJOR_PAYLOAD_VERSION_BRILLO = 2
def DisplayValue(key, value):
@@ -41,12 +42,12 @@ def DisplayValue(key, value):
def DisplayHexData(data, indent=0):
"""Print out binary data as a hex values."""
for off in range(0, len(data), 16):
- chunk = data[off:off + 16]
+ chunk = bytearray(data[off:off + 16])
print(' ' * indent +
- ' '.join('%.2x' % ord(c) for c in chunk) +
+ ' '.join('%.2x' % c for c in chunk) +
' ' * (16 - len(chunk)) +
' | ' +
- ''.join(c if 32 <= ord(c) < 127 else '.' for c in chunk))
+ ''.join(chr(c) if 32 <= c < 127 else '.' for c in chunk))
class PayloadCommand(object):
@@ -69,15 +70,16 @@ class PayloadCommand(object):
def _DisplayManifest(self):
"""Show information from the payload manifest."""
manifest = self.payload.manifest
- if self.payload.header.version == MAJOR_PAYLOAD_VERSION_BRILLO:
- DisplayValue('Number of partitions', len(manifest.partitions))
- for partition in manifest.partitions:
- DisplayValue(' Number of "%s" ops' % partition.partition_name,
- len(partition.operations))
- else:
- DisplayValue('Number of operations', len(manifest.install_operations))
- DisplayValue('Number of kernel ops',
- len(manifest.kernel_install_operations))
+ DisplayValue('Number of partitions', len(manifest.partitions))
+ for partition in manifest.partitions:
+ DisplayValue(' Number of "%s" ops' % partition.partition_name,
+ len(partition.operations))
+ for partition in manifest.partitions:
+ DisplayValue(" Timestamp for " +
+ partition.partition_name, partition.version)
+ for partition in manifest.partitions:
+ DisplayValue(" COW Size for " +
+ partition.partition_name, partition.estimate_cow_size)
DisplayValue('Block size', manifest.block_size)
DisplayValue('Minor version', manifest.minor_version)
@@ -131,8 +133,8 @@ class PayloadCommand(object):
Args:
name: The name you want displayed above the operation table.
- operations: The install_operations object that you want to display
- information about.
+ operations: The operations object that you want to display information
+ about.
"""
def _DisplayExtents(extents, name):
"""Show information about extents."""
@@ -149,7 +151,7 @@ class PayloadCommand(object):
op_dict = update_payload.common.OpType.NAMES
print('%s:' % name)
- for op, op_count in itertools.izip(operations, itertools.count()):
+ for op_count, op in enumerate(operations):
print(' %d: %s' % (op_count, op_dict[op.type]))
if op.HasField('data_offset'):
print(' Data offset: %s' % op.data_offset)
@@ -170,14 +172,9 @@ class PayloadCommand(object):
read_blocks = 0
written_blocks = 0
num_write_seeks = 0
- if self.payload.header.version == MAJOR_PAYLOAD_VERSION_BRILLO:
- partitions_operations = [part.operations for part in manifest.partitions]
- else:
- partitions_operations = [manifest.install_operations,
- manifest.kernel_install_operations]
- for operations in partitions_operations:
+ for partition in manifest.partitions:
last_ext = None
- for curr_op in operations:
+ for curr_op in partition.operations:
read_blocks += sum([ext.num_blocks for ext in curr_op.src_extents])
written_blocks += sum([ext.num_blocks for ext in curr_op.dst_extents])
for curr_ext in curr_op.dst_extents:
@@ -187,15 +184,10 @@ class PayloadCommand(object):
num_write_seeks += 1
last_ext = curr_ext
- if manifest.minor_version == 1:
- # Rootfs and kernel are written during the filesystem copy in version 1.
- written_blocks += manifest.old_rootfs_info.size / manifest.block_size
- written_blocks += manifest.old_kernel_info.size / manifest.block_size
- # Old and new rootfs and kernel are read once during verification
- read_blocks += manifest.old_rootfs_info.size / manifest.block_size
- read_blocks += manifest.old_kernel_info.size / manifest.block_size
- read_blocks += manifest.new_rootfs_info.size / manifest.block_size
- read_blocks += manifest.new_kernel_info.size / manifest.block_size
+ # Old and new partitions are read once during verification.
+ read_blocks += partition.old_partition_info.size // manifest.block_size
+ read_blocks += partition.new_partition_info.size // manifest.block_size
+
stats = {'read_blocks': read_blocks,
'written_blocks': written_blocks,
'num_write_seeks': num_write_seeks}
@@ -219,21 +211,15 @@ class PayloadCommand(object):
self._DisplayStats(self.payload.manifest)
if self.options.list_ops:
print()
- if self.payload.header.version == MAJOR_PAYLOAD_VERSION_BRILLO:
- for partition in self.payload.manifest.partitions:
- self._DisplayOps('%s install operations' % partition.partition_name,
- partition.operations)
- else:
- self._DisplayOps('Install operations',
- self.payload.manifest.install_operations)
- self._DisplayOps('Kernel install operations',
- self.payload.manifest.kernel_install_operations)
+ for partition in self.payload.manifest.partitions:
+ self._DisplayOps('%s install operations' % partition.partition_name,
+ partition.operations)
def main():
parser = argparse.ArgumentParser(
description='Show information about an update payload.')
- parser.add_argument('payload_file', type=file,
+ parser.add_argument('payload_file', type=argparse.FileType('rb'),
help='The update payload file.')
parser.add_argument('--list_ops', default=False, action='store_true',
help='List the install operations and their extents.')
@@ -245,5 +231,6 @@ def main():
PayloadCommand(args).Run()
+
if __name__ == '__main__':
sys.exit(main())