OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Convert SVN based DEPS into .DEPS.git for use with NewGit.""" | 6 """Convert SVN based DEPS into .DEPS.git for use with NewGit.""" |
7 | 7 |
8 import collections | 8 import collections |
9 from cStringIO import StringIO | 9 from cStringIO import StringIO |
10 import json | 10 import json |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 message_th.start() | 273 message_th.start() |
274 | 274 |
275 for th in threads: | 275 for th in threads: |
276 th.join() | 276 th.join() |
277 message_q.put(Queue.Empty) | 277 message_q.put(Queue.Empty) |
278 message_th.join() | 278 message_th.join() |
279 | 279 |
280 return results | 280 return results |
281 | 281 |
282 | 282 |
| 283 def convert_json(option, _, value, parser): |
| 284 """Provide an OptionParser callback to unmarshal a JSON string.""" |
| 285 setattr(parser.values, option.dest, json.loads(value)) |
| 286 |
| 287 |
283 def main(): | 288 def main(): |
284 parser = optparse.OptionParser() | 289 parser = optparse.OptionParser() |
285 parser.add_option('-d', '--deps', default='DEPS', | 290 parser.add_option('-d', '--deps', default='DEPS', |
286 help='path to the DEPS file to convert') | 291 help='path to the DEPS file to convert') |
287 parser.add_option('-o', '--out', | 292 parser.add_option('-o', '--out', |
288 help='path to the converted DEPS file (default: stdout)') | 293 help='path to the converted DEPS file (default: stdout)') |
289 parser.add_option('-j', '--num-threads', type='int', default=4, | 294 parser.add_option('-j', '--num-threads', type='int', default=4, |
290 help='Maximum number of threads') | 295 help='Maximum number of threads') |
291 parser.add_option('-t', '--type', | 296 parser.add_option('-t', '--type', |
292 help='[DEPRECATED] type of DEPS file (public, etc)') | 297 help='[DEPRECATED] type of DEPS file (public, etc)') |
293 parser.add_option('-x', '--extra-rules', | 298 parser.add_option('-x', '--extra-rules', |
294 help='Path to file with additional conversion rules.') | 299 help='Path to file with additional conversion rules.') |
295 parser.add_option('-r', '--repos', | 300 parser.add_option('-r', '--repos', |
296 help='path to the directory holding all the Git repos') | 301 help='path to the directory holding all the Git repos') |
297 parser.add_option('-w', '--workspace', metavar='PATH', | 302 parser.add_option('-w', '--workspace', metavar='PATH', |
298 help='top level of a git-based gclient checkout') | 303 help='top level of a git-based gclient checkout') |
299 parser.add_option('-c', '--cache_dir', | 304 parser.add_option('-c', '--cache_dir', |
300 help='top level of a gclient git cache diretory.') | 305 help='top level of a gclient git cache diretory.') |
301 parser.add_option('-s', '--shallow', action='store_true', | 306 parser.add_option('-s', '--shallow', action='store_true', |
302 help='Use shallow checkouts when populating cache dirs.') | 307 help='Use shallow checkouts when populating cache dirs.') |
| 308 parser.add_option('--var_overrides', action='callback', callback=convert_json, |
| 309 type='string', default=None, |
| 310 help='A dict in JSON format containing key-value pairs ' |
| 311 'that will override variables used in the DEPS file.') |
303 parser.add_option('--no_fail_fast', action='store_true', | 312 parser.add_option('--no_fail_fast', action='store_true', |
304 help='Try to process the whole DEPS, rather than failing ' | 313 help='Try to process the whole DEPS, rather than failing ' |
305 'on the first bad entry.') | 314 'on the first bad entry.') |
306 parser.add_option('--verify', action='store_true', | 315 parser.add_option('--verify', action='store_true', |
307 help='ping each Git repo to make sure it exists') | 316 help='ping each Git repo to make sure it exists') |
308 parser.add_option('--json', | 317 parser.add_option('--json', |
309 help='path to a JSON file for machine-readable output') | 318 help='path to a JSON file for machine-readable output') |
310 options = parser.parse_args()[0] | 319 options = parser.parse_args()[0] |
311 | 320 |
312 # Get the content of the DEPS file. | 321 # Get the content of the DEPS file. |
313 deps, deps_os, include_rules, skip_child_includes, hooks, deps_vars = ( | 322 deps, deps_os, include_rules, skip_child_includes, hooks, deps_vars = ( |
314 deps_utils.GetDepsContent(options.deps)) | 323 deps_utils.GetDepsContent(options.deps, options.var_overrides)) |
315 | 324 |
316 if options.extra_rules and options.type: | 325 if options.extra_rules and options.type: |
317 parser.error('Can\'t specify type and extra-rules at the same time.') | 326 parser.error('Can\'t specify type and extra-rules at the same time.') |
318 elif options.type: | 327 elif options.type: |
319 options.extra_rules = os.path.join( | 328 options.extra_rules = os.path.join( |
320 os.path.abspath(os.path.dirname(__file__)), | 329 os.path.abspath(os.path.dirname(__file__)), |
321 'svn_to_git_%s.py' % options.type) | 330 'svn_to_git_%s.py' % options.type) |
322 if options.cache_dir and options.repos: | 331 if options.cache_dir and options.repos: |
323 parser.error('Can\'t specify both cache_dir and repos at the same time.') | 332 parser.error('Can\'t specify both cache_dir and repos at the same time.') |
324 if options.shallow and not options.cache_dir: | 333 if options.shallow and not options.cache_dir: |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
426 return 0 | 435 return 0 |
427 | 436 |
428 # Write the DEPS file to disk. | 437 # Write the DEPS file to disk. |
429 deps_utils.WriteDeps(options.out, deps_vars, results.new_deps, deps_os, | 438 deps_utils.WriteDeps(options.out, deps_vars, results.new_deps, deps_os, |
430 include_rules, skip_child_includes, hooks) | 439 include_rules, skip_child_includes, hooks) |
431 return 0 | 440 return 0 |
432 | 441 |
433 | 442 |
434 if '__main__' == __name__: | 443 if '__main__' == __name__: |
435 sys.exit(main()) | 444 sys.exit(main()) |
OLD | NEW |