summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGabriele M <moto.falcon.git@gmail.com>2018-03-24 09:11:41 +0100
committerGabriele M <moto.falcon.git@gmail.com>2018-03-24 17:45:01 +0100
commit4632cf0a0a6db27cce20c25cb40fc469a2c8e9aa (patch)
treeab8d6bbbe0f87c9c0040e13531627431b9ed4faf
parent8ad65076b68f4f96a81810195d347b49149d9c20 (diff)
downloadscripts-4632cf0a0a6db27cce20c25cb40fc469a2c8e9aa.tar.gz
scripts-4632cf0a0a6db27cce20c25cb40fc469a2c8e9aa.tar.bz2
scripts-4632cf0a0a6db27cce20c25cb40fc469a2c8e9aa.zip
Add main script
-rwxr-xr-xextract.py63
1 files changed, 63 insertions, 0 deletions
diff --git a/extract.py b/extract.py
new file mode 100755
index 0000000..266ef0a
--- /dev/null
+++ b/extract.py
@@ -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)