Index: tools/usb_gadget/package.py |
diff --git a/tools/usb_gadget/package.py b/tools/usb_gadget/package.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..d1a2f2d0bd8e3c830cfd81547b497e54825f9938 |
--- /dev/null |
+++ b/tools/usb_gadget/package.py |
@@ -0,0 +1,68 @@ |
+#!/usr/bin/python |
+# Copyright 2014 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+"""Utility to package the USB gadget framework. |
+""" |
+ |
+import argparse |
+import hashlib |
+import os |
+import StringIO |
+import zipfile |
+ |
+ |
+def MakeZip(directory=None, files=None): |
+ """Construct a zip file. |
+ |
+ Args: |
+ directory: Include Python source files from this directory |
+ files: Include these files |
+ |
+ Returns: |
+ A tuple of the buffer containing the zip file and its MD5 hash. |
+ """ |
+ buf = StringIO.StringIO() |
+ archive = zipfile.PyZipFile(buf, 'w') |
+ if directory is not None: |
+ archive.writepy(directory) |
+ if files is not None: |
+ for f in files: |
+ archive.write(f, os.path.basename(f)) |
+ archive.close() |
+ content = buf.getvalue() |
+ buf.close() |
+ md5 = hashlib.md5(content).hexdigest() |
+ return content, md5 |
+ |
+ |
+def main(): |
+ parser = argparse.ArgumentParser( |
+ description='Package (and upload) the USB gadget framework.') |
+ parser.add_argument( |
+ '--dir', type=str, metavar='DIR', |
+ help='package all Python files from DIR') |
+ parser.add_argument( |
+ '--zip-file', type=str, metavar='FILE', |
+ help='save package as FILE') |
+ parser.add_argument( |
+ '--hash-file', type=str, metavar='FILE', |
+ help='save package hash as FILE') |
+ parser.add_argument( |
+ 'files', metavar='FILE', type=str, nargs='*', |
+ help='source files') |
+ |
+ args = parser.parse_args() |
+ |
+ content, md5 = MakeZip(directory=args.dir, files=args.files) |
+ if args.zip_file: |
+ with open(args.zip_file, 'w') as zip_file: |
+ zip_file.write(content) |
+ if args.hash_file: |
+ with open(args.hash_file, 'w') as hash_file: |
+ hash_file.write(md5) |
+ |
+ |
+if __name__ == '__main__': |
+ main() |