| Index: tools/cr/main.py
|
| diff --git a/tools/cr/main.py b/tools/cr/main.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..56ddf7c0c918b490c12f47a18c440a4b2731a8e1
|
| --- /dev/null
|
| +++ b/tools/cr/main.py
|
| @@ -0,0 +1,94 @@
|
| +# Copyright (c) 2013 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.
|
| +
|
| +"""Chromium cr tool main module.
|
| +
|
| +Holds the main function and all it's support code.
|
| +"""
|
| +
|
| +import os
|
| +import sys
|
| +import cr
|
| +import cr.auto.user
|
| +import cr.autocomplete
|
| +import cr.loader
|
| +
|
| +_CONTACT = 'iancottrell@chromium.org'
|
| +
|
| +
|
| +def Main():
|
| + """Chromium cr tool main function.
|
| +
|
| + This is the main entry point of the cr tool, it finds and loads all the
|
| + plugins, creates the context and then activates and runs the specified
|
| + command.
|
| + """
|
| +
|
| + # Add the users plugin dir to the cr.auto.user package scan
|
| + user_path = os.path.expanduser(os.path.join('~', '.config', 'cr'))
|
| + cr.auto.user.__path__.append(user_path)
|
| +
|
| + cr.loader.Scan()
|
| +
|
| + # Build the command context
|
| + context = cr.Context(
|
| + description='The chrome dev build tool.',
|
| + epilog='Contact ' + _CONTACT + ' if you have issues with this tool.',
|
| + )
|
| + # Install the sub-commands
|
| + for command in cr.Command.Plugins():
|
| + context.AddSubParser(command)
|
| +
|
| + # test for the special autocomplete command
|
| + if context.autocompleting:
|
| + # After plugins are loaded so pylint: disable=g-import-not-at-top
|
| + cr.autocomplete.Complete(context)
|
| + return
|
| + # Speculative argument processing to add config specific args
|
| + context.ParseArgs(True)
|
| + cr.plugin.Activate(context)
|
| + # At this point we should know what command we are going to use
|
| + command = cr.Command.GetActivePlugin(context)
|
| + # Do some early processing, in case it changes the build dir
|
| + if command:
|
| + command.EarlyArgProcessing(context)
|
| + # Update the activated set again, in case the early processing changed it
|
| + cr.plugin.Activate(context)
|
| + # Load the build specific configuration
|
| + found_build_dir = cr.base.client.LoadConfig(context)
|
| + # Final processing or arguments
|
| + context.ParseArgs()
|
| + cr.plugin.Activate(context)
|
| + # If we did not get a command before, it might have been fixed.
|
| + if command is None:
|
| + command = cr.Command.GetActivePlugin(context)
|
| + # If the verbosity level is 3 or greater, then print the environment here
|
| + if context.verbose >= 3:
|
| + context.DumpValues(context.verbose > 3)
|
| + if command is None:
|
| + print context.Substitute('No command specified.')
|
| + exit(1)
|
| + if command.requires_build_dir:
|
| + if not found_build_dir:
|
| + if not context.Find('CR_OUT_FULL'):
|
| + print context.Substitute(
|
| + 'No build directory specified. Please use cr init to make one.')
|
| + else:
|
| + print context.Substitute(
|
| + 'Build {CR_BUILD_DIR} not a valid build directory')
|
| + exit(1)
|
| + if context.Find('CR_VERSION') != cr.base.client.VERSION:
|
| + print context.Substitute(
|
| + 'Build {CR_BUILD_DIR} is for the wrong version of cr')
|
| + print 'Please run cr init to reset it'
|
| + exit(1)
|
| + cr.Platform.Prepare(context)
|
| + if context.verbose >= 1:
|
| + print context.Substitute(
|
| + 'Running cr ' + command.name + ' for {CR_BUILD_DIR}')
|
| + # Invoke the given command
|
| + command.Run(context)
|
| +
|
| +if __name__ == '__main__':
|
| + sys.exit(Main())
|
|
|