| #!/usr/bin/env python |
| # Copyright (c) 2011 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. |
| """Creates a zip archive with policy template files. |
| """ |
| |
| import optparse |
| import sys |
| import zipfile |
| |
| |
| def add_files_to_zip(zip_file, base_dir, file_list): |
| """Pack a list of files into a zip archive, that is already opened for |
| writing. |
| |
| Args: |
| zip_file: An object representing the zip archive. |
| base_dir: Base path of all the files in the real file system. |
| file_list: List of absolute file paths to add. Must start with base_dir. |
| The base_dir is stripped in the zip file entries. |
| """ |
| if (base_dir[-1] != '/'): |
| base_dir += '/' |
| for file_path in file_list: |
| assert file_path.startswith(base_dir) |
| zip_file.write(file_path, file_path[len(base_dir):]) |
| return 0 |
| |
| |
| def main(argv): |
| """Pack a list of files into a zip archive. |
| |
| Args: |
| output: The file path of the zip archive. |
| base_dir: Base path of input files. |
| languages: Comma-separated list of languages, e.g. en-US,de. |
| add: List of files to include in the archive. The language placeholder |
| ${lang} is expanded into one file for each language. |
| """ |
| parser = optparse.OptionParser() |
| parser.add_option("--output", dest="output") |
| parser.add_option("--base_dir", dest="base_dir") |
| parser.add_option("--languages", dest="languages") |
| parser.add_option("--add", action="append", dest="files", default=[]) |
| options, args = parser.parse_args(argv[1:]) |
| |
| # Process file list, possibly expanding language placeholders. |
| _LANG_PLACEHOLDER = "${lang}" |
| languages = filter(bool, options.languages.split(',')) |
| file_list = [] |
| for file_to_add in options.files: |
| if (_LANG_PLACEHOLDER in file_to_add): |
| for lang in languages: |
| file_list.append(file_to_add.replace(_LANG_PLACEHOLDER, lang)) |
| else: |
| file_list.append(file_to_add) |
| |
| zip_file = zipfile.ZipFile(options.output, 'w', zipfile.ZIP_DEFLATED) |
| try: |
| return add_files_to_zip(zip_file, options.base_dir, file_list) |
| finally: |
| zip_file.close() |
| |
| |
| if '__main__' == __name__: |
| sys.exit(main(sys.argv)) |