| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright 2015 The Chromium Authors. All rights reserved. | 2 # Copyright 2015 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 import glob | 6 import glob |
| 7 import os | 7 import os |
| 8 import sys | 8 import sys |
| 9 import zipfile | 9 import zipfile |
| 10 | 10 |
| 11 | 11 |
| 12 def main(args): | 12 def main(args): |
| 13 if len(args) != 3: | 13 if len(args) != 3: |
| 14 print 'usage: make_zip.py build_dir FILES.cfg output.zip' | 14 print 'usage: make_zip.py build_dir FILES.cfg output.zip' |
| 15 return 1 | 15 return 1 |
| 16 (build_dir, cfg_file, output_file) = args | 16 (build_dir, cfg_file, output_file) = args |
| 17 | 17 |
| 18 exec_globals = {'__builtins__': None} | 18 exec_globals = {'__builtins__': None} |
| 19 execfile(cfg_file, exec_globals) | 19 execfile(cfg_file, exec_globals) |
| 20 | 20 |
| 21 cwd = os.getcwd() | 21 cwd = os.getcwd() |
| 22 os.chdir(build_dir) | 22 os.chdir(build_dir) |
| 23 | 23 |
| 24 files = [] | 24 files = set() |
| 25 for file_spec in exec_globals['FILES']: | 25 for file_spec in exec_globals['FILES']: |
| 26 pattern = file_spec['filename'] | 26 pattern = file_spec['filename'] |
| 27 for glob_match in glob.glob(pattern): | 27 for glob_match in glob.glob(pattern): |
| 28 if os.path.isfile(glob_match): | 28 if os.path.isfile(glob_match): |
| 29 files.append(glob_match) | 29 files.add(glob_match) |
| 30 elif os.path.isdir(glob_match): | 30 elif os.path.isdir(glob_match): |
| 31 for root, dirs, filenames in os.walk(glob_match): | 31 for root, dirs, filenames in os.walk(glob_match): |
| 32 for f in filenames: | 32 for f in filenames: |
| 33 files.append(os.path.join(root, f)); | 33 files.add(os.path.join(root, f)); |
| 34 | 34 |
| 35 os.chdir(cwd) | 35 os.chdir(cwd) |
| 36 if not len(files): | 36 if not len(files): |
| 37 print 'error: no files found in %s' % build_dir | 37 print 'error: no files found in %s' % build_dir |
| 38 return 1 | 38 return 1 |
| 39 | 39 |
| 40 with zipfile.ZipFile(output_file, mode = 'w', | 40 with zipfile.ZipFile(output_file, mode = 'w', |
| 41 compression = zipfile.ZIP_DEFLATED) as output: | 41 compression = zipfile.ZIP_DEFLATED, allowZip64 = True) as output: |
| 42 for f in files: | 42 for f in sorted(files): |
| 43 sys.stdout.write("%s\r" % f[:40].ljust(40, ' ')) | 43 sys.stdout.write("%s\r" % f[:40].ljust(40, ' ')) |
| 44 sys.stdout.flush() | 44 sys.stdout.flush() |
| 45 output.write(os.path.join(build_dir, f), f) | 45 output.write(os.path.join(build_dir, f), f) |
| 46 | 46 |
| 47 print 'wrote %s' % output_file | 47 print 'wrote %s' % output_file |
| 48 | 48 |
| 49 | 49 |
| 50 if __name__ == '__main__': | 50 if __name__ == '__main__': |
| 51 sys.exit(main(sys.argv[1:])) | 51 sys.exit(main(sys.argv[1:])) |
| OLD | NEW |