| OLD | NEW | 
|---|
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2015 The Chromium Authors. All rights reserved. | 
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be | 
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. | 
| 4 | 4 | 
| 5 """Configuration for the shell abstraction. | 5 """Configuration for the shell abstraction. | 
| 6 | 6 | 
| 7 This module declares ShellConfig and knows how to compute it from command-line | 7 This module declares ShellConfig and knows how to compute it from command-line | 
| 8 arguments, applying any default paths inferred from the checkout, configuration | 8 arguments, applying any default paths inferred from the checkout, configuration | 
| 9 file, etc. | 9 file, etc. | 
| 10 """ | 10 """ | 
| 11 | 11 | 
|  | 12 import ast | 
|  | 13 | 
| 12 from devtoolslib import paths | 14 from devtoolslib import paths | 
| 13 | 15 | 
| 14 | 16 | 
|  | 17 class ShellConfigurationException(Exception): | 
|  | 18   """Represents an error preventing creating a functional shell abstraction.""" | 
|  | 19   pass | 
|  | 20 | 
|  | 21 | 
| 15 class ShellConfig(object): | 22 class ShellConfig(object): | 
| 16   """Configuration for the shell abstraction.""" | 23   """Configuration for the shell abstraction.""" | 
| 17 | 24 | 
| 18   def __init__(self): | 25   def __init__(self): | 
| 19     self.android = None | 26     self.android = None | 
| 20     self.shell_path = None | 27     self.shell_path = None | 
| 21     self.origin = None | 28     self.origin = None | 
| 22     self.map_url_list = None | 29     self.map_url_list = [] | 
| 23     self.map_origin_list = None | 30     self.map_origin_list = [] | 
|  | 31     self.dev_servers = [] | 
| 24     self.sky = None | 32     self.sky = None | 
| 25     self.verbose = None | 33     self.verbose = None | 
| 26 | 34 | 
| 27     # Android-only. | 35     # Android-only. | 
| 28     self.adb_path = None | 36     self.adb_path = None | 
| 29     self.target_device = None | 37     self.target_device = None | 
| 30     self.logcat_tags = None | 38     self.logcat_tags = None | 
| 31 | 39 | 
| 32     # Desktop-only. | 40     # Desktop-only. | 
| 33     self.use_osmesa = None | 41     self.use_osmesa = None | 
| 34 | 42 | 
| 35 | 43 | 
|  | 44 class DevServerConfig(object): | 
|  | 45   """Configuration for a development server running on a host and available to | 
|  | 46   the shell. | 
|  | 47   """ | 
|  | 48   def __init__(self): | 
|  | 49     self.host = None | 
|  | 50     self.mappings = None | 
|  | 51 | 
|  | 52 | 
| 36 def add_shell_arguments(parser): | 53 def add_shell_arguments(parser): | 
| 37   """Adds argparse arguments allowing to configure shell abstraction using | 54   """Adds argparse arguments allowing to configure shell abstraction using | 
| 38   configure_shell() below. | 55   configure_shell() below. | 
| 39   """ | 56   """ | 
| 40   # Arguments configuring the shell run. | 57   # Arguments configuring the shell run. | 
| 41   parser.add_argument('--android', help='Run on Android', | 58   parser.add_argument('--android', help='Run on Android', | 
| 42                       action='store_true') | 59                       action='store_true') | 
| 43   parser.add_argument('--shell-path', help='Path of the Mojo shell binary.') | 60   parser.add_argument('--shell-path', help='Path of the Mojo shell binary.') | 
| 44   parser.add_argument('--origin', help='Origin for mojo: URLs. This can be a ' | 61   parser.add_argument('--origin', help='Origin for mojo: URLs. This can be a ' | 
| 45                       'web url or a local directory path.') | 62                       'web url or a local directory path.') | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 61   android_group.add_argument('--target-device', help='Device to run on.') | 78   android_group.add_argument('--target-device', help='Device to run on.') | 
| 62   android_group.add_argument('--logcat-tags', help='Comma-separated list of ' | 79   android_group.add_argument('--logcat-tags', help='Comma-separated list of ' | 
| 63                              'additional logcat tags to display.') | 80                              'additional logcat tags to display.') | 
| 64 | 81 | 
| 65   desktop_group = parser.add_argument_group('Desktop-only', | 82   desktop_group = parser.add_argument_group('Desktop-only', | 
| 66       'These arguments apply only when running on desktop.') | 83       'These arguments apply only when running on desktop.') | 
| 67   desktop_group.add_argument('--use-osmesa', action='store_true', | 84   desktop_group.add_argument('--use-osmesa', action='store_true', | 
| 68                              help='Configure the native viewport service ' | 85                              help='Configure the native viewport service ' | 
| 69                              'for off-screen rendering.') | 86                              'for off-screen rendering.') | 
| 70 | 87 | 
| 71   # Arguments allowing to indicate the configuration we are targeting when | 88   config_file_group = parser.add_argument_group('Configuration file', | 
| 72   # running within a Chromium-like checkout. These will go away once we have | 89       'These arguments allow to modify the behavior regarding the mojoconfig ' | 
| 73   # devtools config files, see https://github.com/domokit/devtools/issues/28. | 90       'file.') | 
| 74   chromium_config_group = parser.add_argument_group('Chromium configuration', | 91   config_file_group.add_argument('--config-file', type=file, | 
|  | 92                                  help='Path of the configuration file to use.') | 
|  | 93 | 
|  | 94   # Arguments allowing to indicate the build directory we are targeting when | 
|  | 95   # running within a Chromium-like checkout (e.g. Mojo checkout). These will go | 
|  | 96   # away once we have devtools config files, see | 
|  | 97   # https://github.com/domokit/devtools/issues/28. | 
|  | 98   chromium_checkout_group = parser.add_argument_group( | 
|  | 99       'Chromium-like checkout configuration', | 
| 75       'These arguments allow to infer paths to tools and build results ' | 100       'These arguments allow to infer paths to tools and build results ' | 
| 76       'when running withing a Chromium-like checkout') | 101       'when running within a Chromium-like checkout') | 
| 77   debug_group = chromium_config_group.add_mutually_exclusive_group() | 102   debug_group = chromium_checkout_group.add_mutually_exclusive_group() | 
| 78   debug_group.add_argument('--debug', help='Debug build (default)', | 103   debug_group.add_argument('--debug', help='Debug build (default)', | 
| 79                            default=True, action='store_true') | 104                            default=True, action='store_true') | 
| 80   debug_group.add_argument('--release', help='Release build', default=False, | 105   debug_group.add_argument('--release', help='Release build', default=False, | 
| 81                            dest='debug', action='store_false') | 106                            dest='debug', action='store_false') | 
| 82   chromium_config_group.add_argument('--target-cpu', | 107   chromium_checkout_group.add_argument('--target-cpu', | 
| 83                                      help='CPU architecture to run for.', | 108                                      help='CPU architecture to run for.', | 
| 84                                      choices=['x64', 'x86', 'arm']) | 109                                      choices=['x64', 'x86', 'arm']) | 
| 85 | 110 | 
| 86 | 111 | 
|  | 112 def _read_config_file(config_file, aliases): | 
|  | 113   spec = config_file.read() | 
|  | 114   for alias_pattern, alias_value in aliases: | 
|  | 115     spec = spec.replace(alias_pattern, alias_value) | 
|  | 116   return ast.literal_eval(spec) | 
|  | 117 | 
|  | 118 | 
| 87 def get_shell_config(script_args): | 119 def get_shell_config(script_args): | 
| 88   """Processes command-line options defined in add_shell_arguments(), applying | 120   """Processes command-line options defined in add_shell_arguments(), applying | 
| 89   any inferred default paths and produces an instance of ShellConfig. | 121   any inferred default paths and produces an instance of ShellConfig. | 
| 90 | 122 | 
| 91   Returns: | 123   Returns: | 
| 92     An instance of ShellConfig. | 124     An instance of ShellConfig. | 
| 93   """ | 125   """ | 
| 94   # Infer paths based on the Chromium configuration options | 126   # Infer paths based on the Chromium configuration options | 
| 95   # (--debug/--release, etc.), if running within a Chromium-like checkout. | 127   # (--debug/--release, etc.), if running within a Chromium-like checkout. | 
| 96   inferred_paths = paths.infer_paths(script_args.android, script_args.debug, | 128   inferred_paths = paths.infer_paths(script_args.android, script_args.debug, | 
| 97                                      script_args.target_cpu) | 129                                      script_args.target_cpu) | 
| 98 |  | 
| 99   shell_config = ShellConfig() | 130   shell_config = ShellConfig() | 
| 100 | 131 | 
| 101   shell_config.android = script_args.android | 132   shell_config.android = script_args.android | 
| 102   shell_config.shell_path = (script_args.shell_path or | 133   shell_config.shell_path = (script_args.shell_path or | 
| 103                              inferred_paths['shell_path']) | 134                              inferred_paths['shell_path']) | 
| 104   shell_config.origin = script_args.origin | 135   shell_config.origin = script_args.origin | 
| 105   shell_config.map_url_list = script_args.map_url | 136   shell_config.map_url_list = script_args.map_url | 
| 106   shell_config.map_origin_list = script_args.map_origin | 137   shell_config.map_origin_list = script_args.map_origin | 
| 107   shell_config.sky = script_args.sky | 138   shell_config.sky = script_args.sky | 
| 108   shell_config.verbose = script_args.verbose | 139   shell_config.verbose = script_args.verbose | 
| 109 | 140 | 
| 110   # Android-only. | 141   # Android-only. | 
| 111   shell_config.adb_path = (script_args.adb_path or inferred_paths['adb_path']) | 142   shell_config.adb_path = (script_args.adb_path or inferred_paths['adb_path']) | 
| 112   shell_config.target_device = script_args.target_device | 143   shell_config.target_device = script_args.target_device | 
| 113   shell_config.logcat_tags = script_args.logcat_tags | 144   shell_config.logcat_tags = script_args.logcat_tags | 
| 114 | 145 | 
| 115   # Desktop-only. | 146   # Desktop-only. | 
| 116   shell_config.use_osmesa = script_args.use_osmesa | 147   shell_config.use_osmesa = script_args.use_osmesa | 
| 117 | 148 | 
| 118   if (shell_config.android and not shell_config.origin and | 149   if (shell_config.android and not shell_config.origin and | 
| 119       inferred_paths['build_dir_path']): | 150       inferred_paths['build_dir_path']): | 
| 120     shell_config.origin = inferred_paths['build_dir_path'] | 151     shell_config.origin = inferred_paths['build_dir_path'] | 
|  | 152 | 
|  | 153   # Read the mojoconfig file. | 
|  | 154   if script_args.config_file: | 
|  | 155     config_file_aliases = [] | 
|  | 156     if inferred_paths['build_dir_path']: | 
|  | 157       config_file_aliases.append(('@{BUILD_DIR}', | 
|  | 158                                   inferred_paths['build_dir_path'])) | 
|  | 159 | 
|  | 160     mojoconfig = None | 
|  | 161     try: | 
|  | 162       mojoconfig = _read_config_file(script_args.config_file, | 
|  | 163                                      config_file_aliases) | 
|  | 164     except SyntaxError: | 
|  | 165       raise ShellConfigurationException('Failed to parse the mojoconfig file.') | 
|  | 166 | 
|  | 167     if 'dev_servers' in mojoconfig: | 
|  | 168       try: | 
|  | 169         for dev_server_spec in mojoconfig['dev_servers']: | 
|  | 170           dev_server_config = DevServerConfig() | 
|  | 171           dev_server_config.host = dev_server_spec['host'] | 
|  | 172           dev_server_config.mappings = [] | 
|  | 173           for prefix, path in dev_server_spec['mappings']: | 
|  | 174             dev_server_config.mappings.append((prefix, path)) | 
|  | 175           shell_config.dev_servers.append(dev_server_config) | 
|  | 176       except (ValueError, KeyError): | 
|  | 177         raise ShellConfigurationException('Failed to parse dev_servers in ' | 
|  | 178                                           'the mojoconfig file.') | 
| 121   return shell_config | 179   return shell_config | 
| OLD | NEW | 
|---|