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

Unified Diff: tools/grit/grit/grit_runner.py

Issue 1410853008: Move grit from DEPS into src. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: webview licenses Created 5 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/grit/grit/grit-todo.xml ('k') | tools/grit/grit/grit_runner_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/grit/grit/grit_runner.py
diff --git a/tools/grit/grit/grit_runner.py b/tools/grit/grit/grit_runner.py
new file mode 100755
index 0000000000000000000000000000000000000000..6c1cf5e969e5647a0f6aec9459dc2f22c2663a19
--- /dev/null
+++ b/tools/grit/grit/grit_runner.py
@@ -0,0 +1,272 @@
+#!/usr/bin/env python
+# Copyright (c) 2012 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.
+
+"""Command processor for GRIT. This is the script you invoke to run the various
+GRIT tools.
+"""
+
+import os
+import sys
+if __name__ == '__main__':
+ sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
+
+import getopt
+
+from grit import util
+
+import grit.extern.FP
+
+# Tool info factories; these import only within each factory to avoid
+# importing most of the GRIT code until required.
+def ToolFactoryBuild():
+ import grit.tool.build
+ return grit.tool.build.RcBuilder()
+
+def ToolFactoryBuildInfo():
+ import grit.tool.buildinfo
+ return grit.tool.buildinfo.DetermineBuildInfo()
+
+def ToolFactoryCount():
+ import grit.tool.count
+ return grit.tool.count.CountMessage()
+
+def ToolFactoryDiffStructures():
+ import grit.tool.diff_structures
+ return grit.tool.diff_structures.DiffStructures()
+
+def ToolFactoryMenuTranslationsFromParts():
+ import grit.tool.menu_from_parts
+ return grit.tool.menu_from_parts.MenuTranslationsFromParts()
+
+def ToolFactoryNewGrd():
+ import grit.tool.newgrd
+ return grit.tool.newgrd.NewGrd()
+
+def ToolFactoryResizeDialog():
+ import grit.tool.resize
+ return grit.tool.resize.ResizeDialog()
+
+def ToolFactoryRc2Grd():
+ import grit.tool.rc2grd
+ return grit.tool.rc2grd.Rc2Grd()
+
+def ToolFactoryTest():
+ import grit.tool.test
+ return grit.tool.test.TestTool()
+
+def ToolFactoryTranslationToTc():
+ import grit.tool.transl2tc
+ return grit.tool.transl2tc.TranslationToTc()
+
+def ToolFactoryUnit():
+ import grit.tool.unit
+ return grit.tool.unit.UnitTestTool()
+
+def ToolFactoryXmb():
+ import grit.tool.xmb
+ return grit.tool.xmb.OutputXmb()
+
+def ToolAndroid2Grd():
+ import grit.tool.android2grd
+ return grit.tool.android2grd.Android2Grd()
+
+# Keys for the following map
+_FACTORY = 1
+_REQUIRES_INPUT = 2
+_HIDDEN = 3 # optional key - presence indicates tool is hidden
+
+# Maps tool names to the tool's module. Done as a list of (key, value) tuples
+# instead of a map to preserve ordering.
+_TOOLS = [
+ ['build', { _FACTORY : ToolFactoryBuild, _REQUIRES_INPUT : True }],
+ ['buildinfo', { _FACTORY : ToolFactoryBuildInfo, _REQUIRES_INPUT : True }],
+ ['count', { _FACTORY : ToolFactoryCount, _REQUIRES_INPUT : True }],
+ ['menufromparts', {
+ _FACTORY: ToolFactoryMenuTranslationsFromParts,
+ _REQUIRES_INPUT : True, _HIDDEN : True }],
+ ['newgrd', { _FACTORY : ToolFactoryNewGrd, _REQUIRES_INPUT : False }],
+ ['rc2grd', { _FACTORY : ToolFactoryRc2Grd, _REQUIRES_INPUT : False }],
+ ['resize', {
+ _FACTORY : ToolFactoryResizeDialog, _REQUIRES_INPUT : True }],
+ ['sdiff', { _FACTORY : ToolFactoryDiffStructures,
+ _REQUIRES_INPUT : False }],
+ ['test', {
+ _FACTORY: ToolFactoryTest, _REQUIRES_INPUT : True,
+ _HIDDEN : True }],
+ ['transl2tc', { _FACTORY : ToolFactoryTranslationToTc,
+ _REQUIRES_INPUT : False }],
+ ['unit', { _FACTORY : ToolFactoryUnit, _REQUIRES_INPUT : False }],
+ ['xmb', { _FACTORY : ToolFactoryXmb, _REQUIRES_INPUT : True }],
+ ['android2grd', {
+ _FACTORY: ToolAndroid2Grd,
+ _REQUIRES_INPUT : False }],
+]
+
+
+def PrintUsage():
+ tool_list = ''
+ for (tool, info) in _TOOLS:
+ if not _HIDDEN in info.keys():
+ tool_list += ' %-12s %s\n' % (tool, info[_FACTORY]().ShortDescription())
+
+ # TODO(joi) Put these back into the usage when appropriate:
+ #
+ # -d Work disconnected. This causes GRIT not to attempt connections with
+ # e.g. Perforce.
+ #
+ # -c Use the specified Perforce CLIENT when talking to Perforce.
+ print """GRIT - the Google Resource and Internationalization Tool
+
+Usage: grit [GLOBALOPTIONS] TOOL [args to tool]
+
+Global options:
+
+ -i INPUT Specifies the INPUT file to use (a .grd file). If this is not
+ specified, GRIT will look for the environment variable GRIT_INPUT.
+ If it is not present either, GRIT will try to find an input file
+ named 'resource.grd' in the current working directory.
+
+ -h MODULE Causes GRIT to use MODULE.UnsignedFingerPrint instead of
+ grit.extern.FP.UnsignedFingerprint. MODULE must be
+ available somewhere in the PYTHONPATH search path.
+
+ -v Print more verbose runtime information.
+
+ -x Print extremely verbose runtime information. Implies -v
+
+ -p FNAME Specifies that GRIT should profile its execution and output the
+ results to the file FNAME.
+
+Tools:
+
+ TOOL can be one of the following:
+%s
+ For more information on how to use a particular tool, and the specific
+ arguments you can send to that tool, execute 'grit help TOOL'
+""" % (tool_list)
+
+
+class Options(object):
+ """Option storage and parsing."""
+
+ def __init__(self):
+ self.disconnected = False
+ self.client = ''
+ self.hash = None
+ self.input = None
+ self.verbose = False
+ self.extra_verbose = False
+ self.output_stream = sys.stdout
+ self.profile_dest = None
+ self.psyco = False
+
+ def ReadOptions(self, args):
+ """Reads options from the start of args and returns the remainder."""
+ (opts, args) = getopt.getopt(args, 'g:qdvxc:i:p:h:', ('psyco',))
+ for (key, val) in opts:
+ if key == '-d': self.disconnected = True
+ elif key == '-c': self.client = val
+ elif key == '-h': self.hash = val
+ elif key == '-i': self.input = val
+ elif key == '-v':
+ self.verbose = True
+ util.verbose = True
+ elif key == '-x':
+ self.verbose = True
+ util.verbose = True
+ self.extra_verbose = True
+ util.extra_verbose = True
+ elif key == '-p': self.profile_dest = val
+ elif key == '--psyco': self.psyco = True
+
+ if not self.input:
+ if 'GRIT_INPUT' in os.environ:
+ self.input = os.environ['GRIT_INPUT']
+ else:
+ self.input = 'resource.grd'
+
+ return args
+
+ def __repr__(self):
+ return '(disconnected: %d, verbose: %d, client: %s, input: %s)' % (
+ self.disconnected, self.verbose, self.client, self.input)
+
+
+def _GetToolInfo(tool):
+ """Returns the info map for the tool named 'tool' or None if there is no
+ such tool."""
+ matches = [t for t in _TOOLS if t[0] == tool]
+ if not matches:
+ return None
+ else:
+ return matches[0][1]
+
+
+def Main(args):
+ """Parses arguments and does the appropriate thing."""
+ util.ChangeStdoutEncoding()
+
+ if sys.version_info < (2, 6):
+ print "GRIT requires Python 2.6 or later."
+ return 2
+ elif not args or (len(args) == 1 and args[0] == 'help'):
+ PrintUsage()
+ return 0
+ elif len(args) == 2 and args[0] == 'help':
+ tool = args[1].lower()
+ if not _GetToolInfo(tool):
+ print "No such tool. Try running 'grit help' for a list of tools."
+ return 2
+
+ print ("Help for 'grit %s' (for general help, run 'grit help'):\n"
+ % (tool))
+ print _GetToolInfo(tool)[_FACTORY]().__doc__
+ return 0
+ else:
+ options = Options()
+ args = options.ReadOptions(args) # args may be shorter after this
+ if not args:
+ print "No tool provided. Try running 'grit help' for a list of tools."
+ return 2
+ tool = args[0]
+ if not _GetToolInfo(tool):
+ print "No such tool. Try running 'grit help' for a list of tools."
+ return 2
+
+ try:
+ if _GetToolInfo(tool)[_REQUIRES_INPUT]:
+ os.stat(options.input)
+ except OSError:
+ print ('Input file %s not found.\n'
+ 'To specify a different input file:\n'
+ ' 1. Use the GRIT_INPUT environment variable.\n'
+ ' 2. Use the -i command-line option. This overrides '
+ 'GRIT_INPUT.\n'
+ ' 3. Specify neither GRIT_INPUT or -i and GRIT will try to load '
+ "'resource.grd'\n"
+ ' from the current directory.' % options.input)
+ return 2
+
+ if options.psyco:
+ # Psyco is a specializing JIT for Python. Early tests indicate that it
+ # could speed up GRIT (at the expense of more memory) for large GRIT
+ # compilations. See http://psyco.sourceforge.net/
+ import psyco
+ psyco.profile()
+
+ if options.hash:
+ grit.extern.FP.UseUnsignedFingerPrintFromModule(options.hash)
+
+ toolobject = _GetToolInfo(tool)[_FACTORY]()
+ if options.profile_dest:
+ import hotshot
+ prof = hotshot.Profile(options.profile_dest)
+ prof.runcall(toolobject.Run, options, args[1:])
+ else:
+ toolobject.Run(options, args[1:])
+
+
+if __name__ == '__main__':
+ sys.exit(Main(sys.argv[1:]))
« no previous file with comments | « tools/grit/grit/grit-todo.xml ('k') | tools/grit/grit/grit_runner_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698