| Index: mojo/devtools/common/devtoolslib/shell_config.py
|
| diff --git a/mojo/devtools/common/devtoolslib/shell_config.py b/mojo/devtools/common/devtoolslib/shell_config.py
|
| index acc9c61719b4b2d8cce6cba7eb612bb334d6b61a..702be64d76da173cb3cba15049fbdda1c86e7f1a 100644
|
| --- a/mojo/devtools/common/devtoolslib/shell_config.py
|
| +++ b/mojo/devtools/common/devtoolslib/shell_config.py
|
| @@ -9,9 +9,16 @@ arguments, applying any default paths inferred from the checkout, configuration
|
| file, etc.
|
| """
|
|
|
| +import ast
|
| +
|
| from devtoolslib import paths
|
|
|
|
|
| +class ShellConfigurationException(Exception):
|
| + """Represents an error preventing creating a functional shell abstraction."""
|
| + pass
|
| +
|
| +
|
| class ShellConfig(object):
|
| """Configuration for the shell abstraction."""
|
|
|
| @@ -19,8 +26,9 @@ class ShellConfig(object):
|
| self.android = None
|
| self.shell_path = None
|
| self.origin = None
|
| - self.map_url_list = None
|
| - self.map_origin_list = None
|
| + self.map_url_list = []
|
| + self.map_origin_list = []
|
| + self.dev_servers = []
|
| self.sky = None
|
| self.verbose = None
|
|
|
| @@ -33,6 +41,15 @@ class ShellConfig(object):
|
| self.use_osmesa = None
|
|
|
|
|
| +class DevServerConfig(object):
|
| + """Configuration for a development server running on a host and available to
|
| + the shell.
|
| + """
|
| + def __init__(self):
|
| + self.host = None
|
| + self.mappings = None
|
| +
|
| +
|
| def add_shell_arguments(parser):
|
| """Adds argparse arguments allowing to configure shell abstraction using
|
| configure_shell() below.
|
| @@ -68,22 +85,37 @@ def add_shell_arguments(parser):
|
| help='Configure the native viewport service '
|
| 'for off-screen rendering.')
|
|
|
| - # Arguments allowing to indicate the configuration we are targeting when
|
| - # running within a Chromium-like checkout. These will go away once we have
|
| - # devtools config files, see https://github.com/domokit/devtools/issues/28.
|
| - chromium_config_group = parser.add_argument_group('Chromium configuration',
|
| + config_file_group = parser.add_argument_group('Configuration file',
|
| + 'These arguments allow to modify the behavior regarding the mojoconfig '
|
| + 'file.')
|
| + config_file_group.add_argument('--config-file', type=file,
|
| + help='Path of the configuration file to use.')
|
| +
|
| + # Arguments allowing to indicate the build directory we are targeting when
|
| + # running within a Chromium-like checkout (e.g. Mojo checkout). These will go
|
| + # away once we have devtools config files, see
|
| + # https://github.com/domokit/devtools/issues/28.
|
| + chromium_checkout_group = parser.add_argument_group(
|
| + 'Chromium-like checkout configuration',
|
| 'These arguments allow to infer paths to tools and build results '
|
| - 'when running withing a Chromium-like checkout')
|
| - debug_group = chromium_config_group.add_mutually_exclusive_group()
|
| + 'when running within a Chromium-like checkout')
|
| + debug_group = chromium_checkout_group.add_mutually_exclusive_group()
|
| debug_group.add_argument('--debug', help='Debug build (default)',
|
| default=True, action='store_true')
|
| debug_group.add_argument('--release', help='Release build', default=False,
|
| dest='debug', action='store_false')
|
| - chromium_config_group.add_argument('--target-cpu',
|
| + chromium_checkout_group.add_argument('--target-cpu',
|
| help='CPU architecture to run for.',
|
| choices=['x64', 'x86', 'arm'])
|
|
|
|
|
| +def _read_config_file(config_file, aliases):
|
| + spec = config_file.read()
|
| + for alias_pattern, alias_value in aliases:
|
| + spec = spec.replace(alias_pattern, alias_value)
|
| + return ast.literal_eval(spec)
|
| +
|
| +
|
| def get_shell_config(script_args):
|
| """Processes command-line options defined in add_shell_arguments(), applying
|
| any inferred default paths and produces an instance of ShellConfig.
|
| @@ -95,7 +127,6 @@ def get_shell_config(script_args):
|
| # (--debug/--release, etc.), if running within a Chromium-like checkout.
|
| inferred_paths = paths.infer_paths(script_args.android, script_args.debug,
|
| script_args.target_cpu)
|
| -
|
| shell_config = ShellConfig()
|
|
|
| shell_config.android = script_args.android
|
| @@ -118,4 +149,31 @@ def get_shell_config(script_args):
|
| if (shell_config.android and not shell_config.origin and
|
| inferred_paths['build_dir_path']):
|
| shell_config.origin = inferred_paths['build_dir_path']
|
| +
|
| + # Read the mojoconfig file.
|
| + if script_args.config_file:
|
| + config_file_aliases = []
|
| + if inferred_paths['build_dir_path']:
|
| + config_file_aliases.append(('@{BUILD_DIR}',
|
| + inferred_paths['build_dir_path']))
|
| +
|
| + mojoconfig = None
|
| + try:
|
| + mojoconfig = _read_config_file(script_args.config_file,
|
| + config_file_aliases)
|
| + except SyntaxError:
|
| + raise ShellConfigurationException('Failed to parse the mojoconfig file.')
|
| +
|
| + if 'dev_servers' in mojoconfig:
|
| + try:
|
| + for dev_server_spec in mojoconfig['dev_servers']:
|
| + dev_server_config = DevServerConfig()
|
| + dev_server_config.host = dev_server_spec['host']
|
| + dev_server_config.mappings = []
|
| + for prefix, path in dev_server_spec['mappings']:
|
| + dev_server_config.mappings.append((prefix, path))
|
| + shell_config.dev_servers.append(dev_server_config)
|
| + except (ValueError, KeyError):
|
| + raise ShellConfigurationException('Failed to parse dev_servers in '
|
| + 'the mojoconfig file.')
|
| return shell_config
|
|
|