Add 'update-payload-extractor/' from commit '4632cf0a0a6db27cce20c25cb40fc469a2c8e9aa'
https://github.com/gmrt/update_payload_extractor git-subtree-dir: update-payload-extractor git-subtree-mainline:9a231bd70bgit-subtree-split:4632cf0a0aChange-Id: I9ae25d32a7e9aa6664309e8b916811844d0cac50
This commit is contained in:
63
update-payload-extractor/extract.py
Executable file
63
update-payload-extractor/extract.py
Executable file
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env python2
|
||||
|
||||
import argparse
|
||||
import errno
|
||||
import os
|
||||
|
||||
import update_payload
|
||||
from update_payload import applier
|
||||
|
||||
|
||||
def list_content(payload_file_name):
|
||||
with open(payload_file_name, 'rb') as payload_file:
|
||||
payload = update_payload.Payload(payload_file)
|
||||
payload.Init()
|
||||
|
||||
for part in payload.manifest.partitions:
|
||||
print("{} ({} bytes)".format(part.partition_name,
|
||||
part.new_partition_info.size))
|
||||
|
||||
|
||||
def extract(payload_file_name, output_dir="output", partition_names=None):
|
||||
try:
|
||||
os.makedirs(output_dir)
|
||||
except OSError as e:
|
||||
if e.errno != errno.EEXIST:
|
||||
raise
|
||||
|
||||
with open(payload_file_name, 'rb') as payload_file:
|
||||
payload = update_payload.Payload(payload_file)
|
||||
payload.Init()
|
||||
|
||||
if payload.IsDelta():
|
||||
print("Delta payloads are not supported")
|
||||
exit(1)
|
||||
|
||||
helper = applier.PayloadApplier(payload)
|
||||
for part in payload.manifest.partitions:
|
||||
if partition_names and part.partition_name not in partition_names:
|
||||
continue
|
||||
print("Extracting {}".format(part.partition_name))
|
||||
output_file = os.path.join(output_dir, part.partition_name)
|
||||
helper._ApplyToPartition(
|
||||
part.operations, part.partition_name,
|
||||
'install_operations', output_file,
|
||||
part.new_partition_info)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("payload", metavar="payload.bin",
|
||||
help="Path to the payload.bin")
|
||||
parser.add_argument("--output_dir", default="output",
|
||||
help="Output directory")
|
||||
parser.add_argument("--partitions", type=str, nargs='+',
|
||||
help="Name of the partitions to extract")
|
||||
parser.add_argument("--list_partitions", action="store_true",
|
||||
help="List the partitions included in the payload.bin")
|
||||
|
||||
args = parser.parse_args()
|
||||
if args.list_partitions:
|
||||
list_content(args.payload)
|
||||
else:
|
||||
extract(args.payload, args.output_dir, args.partitions)
|
||||
Reference in New Issue
Block a user