| #!/usr/bin/env python |
| # |
| # Copyright 2019 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. |
| |
| import argparse |
| import os.path as path |
| import re |
| import subprocess |
| import sys |
| |
| scripts_path = path.dirname(path.dirname(path.abspath(__file__))) |
| sys.path.append(scripts_path) |
| import devtools_paths |
| |
| devtools_path = devtools_paths.devtools_root_path() |
| |
| |
| def parse_options(cli_args): |
| parser = argparse.ArgumentParser(description='Process localization check arguments.') |
| parser.add_argument('--all', '-a', action='store_true', dest='all_files', help='If present, check all devtools frontend .js files') |
| parser.add_argument('--files', nargs='+', help='List of .js files with absolute paths separated by a space') |
| parser.add_argument( |
| '--autofix', action='store_true', help='If present, errors in localizable resources will be fixed automatically') |
| args = parser.parse_args(cli_args) |
| |
| if len(cli_args) == 0: |
| print('No argument provided. Assuming --all to check all files.') |
| args.all_files = True |
| |
| if args.all_files and args.files: |
| parser.error( |
| "Please provide only one option for scanning files: --all for all files or --files <FILE_LIST> for specific files.") |
| return args |
| |
| |
| def popen(arguments, cwd=None): |
| return subprocess.Popen(arguments, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) |
| |
| |
| def check_with_node_script(script_path, script_description, args): |
| print(script_description + "...") |
| script_proc_errors_found = False |
| exec_command = [ |
| devtools_paths.node_path(), |
| script_path, |
| ] + args |
| |
| script_proc = popen(exec_command) |
| (script_proc_out, _) = script_proc.communicate() |
| if script_proc.returncode != 0: |
| script_proc_errors_found = True |
| |
| print(script_proc_out) |
| return script_proc_errors_found |
| |
| |
| def show_result(errors, checkIndex): |
| if errors: |
| print('Check {0} failed (see above)'.format(checkIndex)) |
| sys.exit(1) |
| else: |
| print('Check {0} succeeded'.format(checkIndex)) |
| |
| |
| def check_devtools_localizability(index, check_devtools_localizability_args): |
| script_path = devtools_paths.check_localized_strings_path() |
| script_description = 'Check {0}: Verifying that all resources are localizable'.format(index) |
| return check_with_node_script(script_path, script_description, check_devtools_localizability_args) |
| |
| |
| def check_devtools_localizable_resources(index, check_devtools_localizable_resources_args): |
| script_path = devtools_paths.check_localizable_resources_path() |
| script_description = 'Check {0}: Verifying the structure of localization resource files (grd)'.format(index) |
| return check_with_node_script(script_path, script_description, check_devtools_localizable_resources_args) |
| |
| |
| def main(): |
| check_devtools_localizable_resources_args = [] |
| check_devtools_localizability_args = [] |
| |
| parsed_args = parse_options(sys.argv[1:]) |
| if parsed_args.all_files: |
| check_devtools_localizability_args = ['-a'] |
| elif parsed_args.files: |
| check_devtools_localizability_args = parsed_args.files |
| |
| if parsed_args.autofix: |
| check_devtools_localizable_resources_args = ['--autofix'] |
| |
| resource_index = 1 |
| localizability_index = 2 |
| resources_errors_found_localizable = check_devtools_localizable_resources(resource_index, |
| check_devtools_localizable_resources_args) |
| localizability_errors_found = check_devtools_localizability(localizability_index, check_devtools_localizability_args) |
| show_result(resources_errors_found_localizable, resource_index) |
| show_result(localizability_errors_found, localizability_index) |
| |
| |
| if __name__ == '__main__': |
| main() |