OLD | NEW |
| (Empty) |
1 #!/usr/bin/env python | |
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
3 # Use of this source code is governed by a BSD-style license that can be | |
4 # found in the LICENSE file. | |
5 | |
6 """Creates a zip archive with policy template files. The list of input files is | |
7 extracted from a grd file with grit. This is to keep the length of input | |
8 arguments below the limit on Windows. | |
9 """ | |
10 | |
11 import optparse | |
12 import os | |
13 import sys | |
14 import zipfile | |
15 | |
16 | |
17 def add_files_to_zip(zip_file, base_dir, file_list): | |
18 """Pack a list of files into a zip archive, that is already | |
19 opened for writing. | |
20 | |
21 Args: | |
22 zip_file: An object representing the zip archive. | |
23 base_dir: Base path of all the files in the real file system. | |
24 files: List of file paths to add, all relative to base_dir. | |
25 The zip entries will only contain this componenet of the path. | |
26 """ | |
27 for file_path in file_list: | |
28 zip_file.write(base_dir + file_path, file_path) | |
29 return 0 | |
30 | |
31 | |
32 def get_grd_outputs(grit_cmd, grit_defines, grd_file, grd_strip_path_prefix): | |
33 grit_path = os.path.join(os.getcwd(), os.path.dirname(grit_cmd)) | |
34 sys.path.append(grit_path) | |
35 import grit_info | |
36 outputs = grit_info.Outputs(grd_file, grit_defines, | |
37 'GRIT_DIR/../gritsettings/resource_ids') | |
38 result = [] | |
39 for item in outputs: | |
40 assert item.startswith(grd_strip_path_prefix) | |
41 result.append(item[len(grd_strip_path_prefix):]) | |
42 return result | |
43 | |
44 | |
45 def main(argv): | |
46 """Pack a list of files into a zip archive. | |
47 | |
48 Args: | |
49 zip_path: The file name of the zip archive. | |
50 base_dir: Base path of input files. | |
51 locales: The list of locales that are used to generate the list of file | |
52 names using INPUT_FILES. | |
53 """ | |
54 parser = optparse.OptionParser() | |
55 parser.add_option("--output", dest="output") | |
56 parser.add_option("--basedir", dest="basedir") | |
57 parser.add_option("--grit_info", dest="grit_info") | |
58 parser.add_option("--grd_input", dest="grd_input") | |
59 parser.add_option("--grd_strip_path_prefix", dest="grd_strip_path_prefix") | |
60 parser.add_option("--extra_input", action="append", dest="extra_input", | |
61 default=[]) | |
62 parser.add_option("-D", action="append", dest="grit_defines", default=[]) | |
63 parser.add_option("-E", action="append", dest="grit_build_env", default=[]) | |
64 options, args = parser.parse_args(argv[1:]) | |
65 | |
66 if (options.basedir[-1] != '/'): | |
67 options.basedir += '/' | |
68 grit_defines = {} | |
69 for define in options.grit_defines: | |
70 grit_defines[define] = 1 | |
71 | |
72 file_list = options.extra_input | |
73 file_list += get_grd_outputs(options.grit_info, grit_defines, | |
74 options.grd_input, options.grd_strip_path_prefix) | |
75 zip_file = zipfile.ZipFile(options.output, 'w', zipfile.ZIP_DEFLATED) | |
76 try: | |
77 return add_files_to_zip(zip_file, options.basedir, file_list) | |
78 finally: | |
79 zip_file.close() | |
80 | |
81 | |
82 if '__main__' == __name__: | |
83 sys.exit(main(sys.argv)) | |
OLD | NEW |