Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(513)

Side by Side Diff: mojo/devtools/common/devtoolslib/shell_config.py

Issue 1268403002: Automatically discover the mojoconfig file. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Address Ben's comments. Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « mojo/devtools/common/devtoolslib/shell_arguments.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 """
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 'These arguments apply only when running on desktop.') 83 'These arguments apply only when running on desktop.')
84 desktop_group.add_argument('--use-osmesa', action='store_true', 84 desktop_group.add_argument('--use-osmesa', action='store_true',
85 help='Configure the native viewport service ' 85 help='Configure the native viewport service '
86 'for off-screen rendering.') 86 'for off-screen rendering.')
87 87
88 config_file_group = parser.add_argument_group('Configuration file', 88 config_file_group = parser.add_argument_group('Configuration file',
89 'These arguments allow to modify the behavior regarding the mojoconfig ' 89 'These arguments allow to modify the behavior regarding the mojoconfig '
90 'file.') 90 'file.')
91 config_file_group.add_argument('--config-file', type=file, 91 config_file_group.add_argument('--config-file', type=file,
92 help='Path of the configuration file to use.') 92 help='Path of the configuration file to use.')
93 config_file_group.add_argument('--no-config-file', action='store_true',
94 help='Pass to skip automatic discovery of the '
95 'mojoconfig file.')
93 96
94 # Arguments allowing to indicate the build directory we are targeting when 97 # 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 98 # running within a Chromium-like checkout (e.g. Mojo checkout). These will go
96 # away once we have devtools config files, see 99 # away once we have devtools config files, see
97 # https://github.com/domokit/devtools/issues/28. 100 # https://github.com/domokit/devtools/issues/28.
98 chromium_checkout_group = parser.add_argument_group( 101 chromium_checkout_group = parser.add_argument_group(
99 'Chromium-like checkout configuration', 102 'Chromium-like checkout configuration',
100 'These arguments allow to infer paths to tools and build results ' 103 'These arguments allow to infer paths to tools and build results '
101 'when running within a Chromium-like checkout') 104 'when running within a Chromium-like checkout')
102 debug_group = chromium_checkout_group.add_mutually_exclusive_group() 105 debug_group = chromium_checkout_group.add_mutually_exclusive_group()
103 debug_group.add_argument('--debug', help='Debug build (default)', 106 debug_group.add_argument('--debug', help='Debug build (default)',
104 default=True, action='store_true') 107 default=True, action='store_true')
105 debug_group.add_argument('--release', help='Release build', default=False, 108 debug_group.add_argument('--release', help='Release build', default=False,
106 dest='debug', action='store_false') 109 dest='debug', action='store_false')
107 chromium_checkout_group.add_argument('--target-cpu', 110 chromium_checkout_group.add_argument('--target-cpu',
108 help='CPU architecture to run for.', 111 help='CPU architecture to run for.',
109 choices=['x64', 'x86', 'arm']) 112 choices=['x64', 'x86', 'arm'])
110 113
111 114
115 def _discover_config_file():
116 config_file_path = paths.find_within_ancestors('mojoconfig')
117 if not config_file_path:
118 return None
119 return open(config_file_path, 'r')
120
121
112 def _read_config_file(config_file, aliases): 122 def _read_config_file(config_file, aliases):
113 spec = config_file.read() 123 spec = config_file.read()
114 for alias_pattern, alias_value in aliases: 124 for alias_pattern, alias_value in aliases:
115 spec = spec.replace(alias_pattern, alias_value) 125 spec = spec.replace(alias_pattern, alias_value)
116 return ast.literal_eval(spec) 126 return ast.literal_eval(spec)
117 127
118 128
119 def get_shell_config(script_args): 129 def get_shell_config(script_args):
120 """Processes command-line options defined in add_shell_arguments(), applying 130 """Processes command-line options defined in add_shell_arguments(), applying
121 any inferred default paths and produces an instance of ShellConfig. 131 any inferred default paths and produces an instance of ShellConfig.
(...skipping 22 matching lines...) Expand all
144 shell_config.logcat_tags = script_args.logcat_tags 154 shell_config.logcat_tags = script_args.logcat_tags
145 155
146 # Desktop-only. 156 # Desktop-only.
147 shell_config.use_osmesa = script_args.use_osmesa 157 shell_config.use_osmesa = script_args.use_osmesa
148 158
149 if (shell_config.android and not shell_config.origin and 159 if (shell_config.android and not shell_config.origin and
150 inferred_paths['build_dir_path']): 160 inferred_paths['build_dir_path']):
151 shell_config.origin = inferred_paths['build_dir_path'] 161 shell_config.origin = inferred_paths['build_dir_path']
152 162
153 # Read the mojoconfig file. 163 # Read the mojoconfig file.
154 if script_args.config_file: 164 config_file = script_args.config_file
155 config_file_aliases = [] 165 if not script_args.no_config_file:
156 if inferred_paths['build_dir_path']: 166 config_file = config_file or _discover_config_file()
157 config_file_aliases.append(('@{BUILD_DIR}',
158 inferred_paths['build_dir_path']))
159 167
160 mojoconfig = None 168 if config_file:
161 try: 169 with config_file:
162 mojoconfig = _read_config_file(script_args.config_file, 170 config_file_aliases = []
163 config_file_aliases) 171 if inferred_paths['build_dir_path']:
164 except SyntaxError: 172 config_file_aliases.append(('@{BUILD_DIR}',
165 raise ShellConfigurationException('Failed to parse the mojoconfig file.') 173 inferred_paths['build_dir_path']))
166 174
167 if 'dev_servers' in mojoconfig: 175 config = None
168 try: 176 try:
169 for dev_server_spec in mojoconfig['dev_servers']: 177 if script_args.verbose:
178 print 'Reading config file from: ' + config_file.name
179 config = _read_config_file(config_file, config_file_aliases)
180 except SyntaxError:
181 raise ShellConfigurationException('Failed to parse the mojoconfig '
182 'file.')
183
184 if 'dev_servers' in config:
185 try:
186 for dev_server_spec in config['dev_servers']:
170 dev_server_config = DevServerConfig() 187 dev_server_config = DevServerConfig()
171 dev_server_config.host = dev_server_spec['host'] 188 dev_server_config.host = dev_server_spec['host']
172 dev_server_config.mappings = [] 189 dev_server_config.mappings = []
173 for prefix, path in dev_server_spec['mappings']: 190 for prefix, path in dev_server_spec['mappings']:
174 dev_server_config.mappings.append((prefix, path)) 191 dev_server_config.mappings.append((prefix, path))
175 shell_config.dev_servers.append(dev_server_config) 192 shell_config.dev_servers.append(dev_server_config)
176 except (ValueError, KeyError): 193 except (ValueError, KeyError):
177 raise ShellConfigurationException('Failed to parse dev_servers in ' 194 raise ShellConfigurationException('Failed to parse dev_servers in '
178 'the mojoconfig file.') 195 'the mojoconfig file.')
179 return shell_config 196 return shell_config
OLDNEW
« no previous file with comments | « mojo/devtools/common/devtoolslib/shell_arguments.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698