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

Unified Diff: grit/grit_runner.py

Issue 7994004: Initial source commit to grit-i18n project. (Closed) Base URL: http://grit-i18n.googlecode.com/svn/trunk/
Patch Set: Created 9 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « grit/grit-todo.xml ('k') | grit/grit_runner_unittest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: grit/grit_runner.py
===================================================================
--- grit/grit_runner.py (revision 0)
+++ grit/grit_runner.py (revision 0)
@@ -0,0 +1,212 @@
+#!/usr/bin/python2.4
+# Copyright (c) 2006-2008 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(sys.argv[0]), '..'))
+
+import getopt
+
+from grit import util
+
+import grit.exception
+
+import grit.tool.build
+import grit.tool.count
+import grit.tool.diff_structures
+import grit.tool.menu_from_parts
+import grit.tool.newgrd
+import grit.tool.resize
+import grit.tool.rc2grd
+import grit.tool.test
+import grit.tool.transl2tc
+import grit.tool.unit
+
+
+# Copyright notice
+_COPYRIGHT = '''\
+GRIT - the Google Resource and Internationalization Tool
+Copyright (c) Google Inc. %d
+''' % util.GetCurrentYear()
+
+# Keys for the following map
+_CLASS = 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', { _CLASS : grit.tool.build.RcBuilder, _REQUIRES_INPUT : True }],
+ ['newgrd', { _CLASS : grit.tool.newgrd.NewGrd, _REQUIRES_INPUT : False }],
+ ['rc2grd', { _CLASS : grit.tool.rc2grd.Rc2Grd, _REQUIRES_INPUT : False }],
+ ['transl2tc', { _CLASS : grit.tool.transl2tc.TranslationToTc,
+ _REQUIRES_INPUT : False }],
+ ['sdiff', { _CLASS : grit.tool.diff_structures.DiffStructures,
+ _REQUIRES_INPUT : False }],
+ ['resize', {
+ _CLASS : grit.tool.resize.ResizeDialog, _REQUIRES_INPUT : True }],
+ ['unit', { _CLASS : grit.tool.unit.UnitTestTool, _REQUIRES_INPUT : False }],
+ ['count', { _CLASS : grit.tool.count.CountMessage, _REQUIRES_INPUT : True }],
+ ['test', {
+ _CLASS: grit.tool.test.TestTool, _REQUIRES_INPUT : True,
+ _HIDDEN : True }],
+ ['menufromparts', {
+ _CLASS: grit.tool.menu_from_parts.MenuTranslationsFromParts,
+ _REQUIRES_INPUT : True, _HIDDEN : True }],
+]
+
+
+def PrintUsage():
+ print _COPYRIGHT
+
+ tool_list = ''
+ for (tool, info) in _TOOLS:
+ if not _HIDDEN in info.keys():
+ tool_list += ' %-12s %s\n' % (tool, info[_CLASS]().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 '''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.
+
+ -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.input = None
+ self.verbose = False
+ self.extra_verbose = False
+ self.output_stream = sys.stdout
+ self.profile_dest = None
+
+ def ReadOptions(self, args):
+ '''Reads options from the start of args and returns the remainder.'''
+ (opts, args) = getopt.getopt(args, 'g:dvxc:i:p:')
+ for (key, val) in opts:
+ if key == '-d': self.disconnected = True
+ elif key == '-c': self.client = 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
+
+ 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 = filter(lambda t: t[0] == tool, _TOOLS)
+ if not len(matches):
+ return None
+ else:
+ return matches[0][1]
+
+
+def Main(args):
+ '''Parses arguments and does the appropriate thing.'''
+ util.ChangeStdoutEncoding()
+
+ if not len(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)[_CLASS].__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
+
+ toolobject = _GetToolInfo(tool)[_CLASS]()
+ 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:]))
+
Property changes on: grit/grit_runner.py
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « grit/grit-todo.xml ('k') | grit/grit_runner_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698