| OLD | NEW | 
|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python | 
| 2 # | 2 # | 
| 3 # Copyright 2014 The Chromium Authors. All rights reserved. | 3 # Copyright 2014 The Chromium Authors. All rights reserved. | 
| 4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be | 
| 5 # found in the LICENSE file. | 5 # found in the LICENSE file. | 
| 6 | 6 | 
|  | 7 # TODO(brettw) bug 582594: merge this with build/android/gn/zip.py and update | 
|  | 8 # callers to use the existing template rather than invoking this directly. | 
|  | 9 | 
| 7 """Archives a set of files. | 10 """Archives a set of files. | 
| 8 """ | 11 """ | 
| 9 | 12 | 
| 10 import ast |  | 
| 11 import optparse | 13 import optparse | 
| 12 import os | 14 import os | 
| 13 import sys | 15 import sys | 
| 14 import zipfile | 16 import zipfile | 
| 15 | 17 | 
|  | 18 sys.path.append(os.path.join(os.path.dirname(__file__), | 
|  | 19                              os.pardir, os.pardir, os.pardir, os.pardir, | 
|  | 20                              "build")) | 
|  | 21 import gn_helpers | 
|  | 22 | 
| 16 def DoZip(inputs, link_inputs, zip_inputs, output, base_dir): | 23 def DoZip(inputs, link_inputs, zip_inputs, output, base_dir): | 
| 17   files = [] | 24   files = [] | 
| 18   with zipfile.ZipFile(output, 'w', zipfile.ZIP_DEFLATED) as outfile: | 25   with zipfile.ZipFile(output, 'w', zipfile.ZIP_DEFLATED) as outfile: | 
| 19     for f in inputs: | 26     for f in inputs: | 
| 20       file_name = os.path.relpath(f, base_dir) | 27       file_name = os.path.relpath(f, base_dir) | 
| 21       files.append(file_name) | 28       files.append(file_name) | 
| 22       outfile.write(f, file_name) | 29       outfile.write(f, file_name) | 
| 23     for f in link_inputs: | 30     for f in link_inputs: | 
| 24       realf = os.path.realpath(f)  # Resolve symlinks. | 31       realf = os.path.realpath(f)  # Resolve symlinks. | 
| 25       file_name = os.path.relpath(realf, base_dir) | 32       file_name = os.path.relpath(realf, base_dir) | 
| 26       files.append(file_name) | 33       files.append(file_name) | 
| 27       outfile.write(realf, file_name) | 34       outfile.write(realf, file_name) | 
| 28     for zf_name in zip_inputs: | 35     for zf_name in zip_inputs: | 
| 29       with zipfile.ZipFile(zf_name, 'r') as zf: | 36       with zipfile.ZipFile(zf_name, 'r') as zf: | 
| 30         for f in zf.namelist(): | 37         for f in zf.namelist(): | 
| 31           if f not in files: | 38           if f not in files: | 
| 32             files.append(f) | 39             files.append(f) | 
| 33             with zf.open(f) as zff: | 40             with zf.open(f) as zff: | 
| 34               outfile.writestr(f, zff.read()) | 41               outfile.writestr(f, zff.read()) | 
| 35 | 42 | 
| 36 | 43 | 
| 37 def main(): | 44 def main(): | 
| 38   parser = optparse.OptionParser() | 45   parser = optparse.OptionParser() | 
| 39 | 46 | 
| 40   parser.add_option('--inputs', help='List of files to archive.') | 47   parser.add_option('--inputs', | 
|  | 48       help='GN format list of files to archive.') | 
| 41   parser.add_option('--link-inputs', | 49   parser.add_option('--link-inputs', | 
| 42       help='List of files to archive. Symbolic links are resolved.') | 50       help='GN-format list of files to archive. Symbolic links are resolved.') | 
| 43   parser.add_option('--zip-inputs', help='List of zip files to re-archive.') | 51   parser.add_option('--zip-inputs', | 
|  | 52       help='GN-format list of zip files to re-archive.') | 
| 44   parser.add_option('--output', help='Path to output archive.') | 53   parser.add_option('--output', help='Path to output archive.') | 
| 45   parser.add_option('--base-dir', | 54   parser.add_option('--base-dir', | 
| 46                     help='If provided, the paths in the archive will be ' | 55                     help='If provided, the paths in the archive will be ' | 
| 47                     'relative to this directory', default='.') | 56                     'relative to this directory', default='.') | 
| 48 | 57 | 
| 49   options, _ = parser.parse_args() | 58   options, _ = parser.parse_args() | 
| 50 | 59 | 
| 51   inputs = [] | 60   inputs = [] | 
| 52   if (options.inputs): | 61   if (options.inputs): | 
| 53     inputs = ast.literal_eval(options.inputs) | 62     parser = gn_helpers.GNValueParser(options.inputs) | 
|  | 63     inputs = parser.ParseList() | 
|  | 64 | 
| 54   link_inputs = [] | 65   link_inputs = [] | 
| 55   if options.link_inputs: | 66   if options.link_inputs: | 
| 56     link_inputs = ast.literal_eval(options.link_inputs) | 67     parser = gn_helpers.GNValueParser(options.link_inputs) | 
|  | 68     link_inputs = parser.ParseList() | 
|  | 69 | 
| 57   zip_inputs = [] | 70   zip_inputs = [] | 
| 58   if options.zip_inputs: | 71   if options.zip_inputs: | 
| 59     zip_inputs = ast.literal_eval(options.zip_inputs) | 72     parser = gn_helpers.GNValueParser(options.zip_inputs) | 
|  | 73     zip_inputs = parser.ParseList() | 
|  | 74 | 
| 60   output = options.output | 75   output = options.output | 
| 61   base_dir = options.base_dir | 76   base_dir = options.base_dir | 
| 62 | 77 | 
| 63   DoZip(inputs, link_inputs, zip_inputs, output, base_dir) | 78   DoZip(inputs, link_inputs, zip_inputs, output, base_dir) | 
| 64 | 79 | 
| 65 if __name__ == '__main__': | 80 if __name__ == '__main__': | 
| 66   sys.exit(main()) | 81   sys.exit(main()) | 
| OLD | NEW | 
|---|