[llvm-commits] [LNT] r165145 - in /lnt/trunk/lnt: lnttool/convert.py lnttool/create.py lnttool/import_data.py lnttool/main.py lnttool/updatedb.py util/multitool.py
Daniel Dunbar
daniel at zuster.org
Wed Oct 3 12:25:12 PDT 2012
Author: ddunbar
Date: Wed Oct 3 14:25:11 2012
New Revision: 165145
URL: http://llvm.org/viewvc/llvm-project?rev=165145&view=rev
Log:
lnttool: Factor out a MultiTool helper class.
Added:
lnt/trunk/lnt/util/multitool.py
Modified:
lnt/trunk/lnt/lnttool/convert.py
lnt/trunk/lnt/lnttool/create.py
lnt/trunk/lnt/lnttool/import_data.py
lnt/trunk/lnt/lnttool/main.py
lnt/trunk/lnt/lnttool/updatedb.py
Modified: lnt/trunk/lnt/lnttool/convert.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/lnttool/convert.py?rev=165145&r1=165144&r2=165145&view=diff
==============================================================================
--- lnt/trunk/lnt/lnttool/convert.py (original)
+++ lnt/trunk/lnt/lnttool/convert.py Wed Oct 3 14:25:11 2012
@@ -18,7 +18,7 @@
from optparse import OptionParser, OptionGroup
from lnt import formats
- parser = OptionParser("%%prog %s [options] [<input>, [<output>]]" % name)
+ parser = OptionParser("%s [options] [<input>, [<output>]]" % name)
parser.add_option("", "--from", dest="inputFormat", metavar="NAME",
help="input format name [%default]", default='<auto>',
choices=formats.format_names + ['<auto>'])
Modified: lnt/trunk/lnt/lnttool/create.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/lnttool/create.py?rev=165145&r1=165144&r2=165145&view=diff
==============================================================================
--- lnt/trunk/lnt/lnttool/create.py (original)
+++ lnt/trunk/lnt/lnttool/create.py Wed Oct 3 14:25:11 2012
@@ -87,7 +87,7 @@
"""create an LLVM nightly test installation"""
from optparse import OptionParser, OptionGroup
- parser = OptionParser("%%prog %s [options] <path>" % name)
+ parser = OptionParser("%s [options] <path>" % name)
parser.add_option("", "--name", dest="name", default="LNT",
help="name to use for the installation [%default]")
parser.add_option("", "--config", dest="config", default="lnt.cfg",
Modified: lnt/trunk/lnt/lnttool/import_data.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/lnttool/import_data.py?rev=165145&r1=165144&r2=165145&view=diff
==============================================================================
--- lnt/trunk/lnt/lnttool/import_data.py (original)
+++ lnt/trunk/lnt/lnttool/import_data.py Wed Oct 3 14:25:11 2012
@@ -9,7 +9,7 @@
from optparse import OptionParser, OptionGroup
- parser = OptionParser("%%prog %s [options] <instance path> <file>+"%name)
+ parser = OptionParser("%s [options] <instance path> <file>+"%name)
parser.add_option("", "--database", dest="database", default="default",
help="database to write to [%default]")
parser.add_option("", "--format", dest="format",
Modified: lnt/trunk/lnt/lnttool/main.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/lnttool/main.py?rev=165145&r1=165144&r2=165145&view=diff
==============================================================================
--- lnt/trunk/lnt/lnttool/main.py (original)
+++ lnt/trunk/lnt/lnttool/main.py Wed Oct 3 14:25:11 2012
@@ -10,6 +10,7 @@
import StringIO
import lnt
+import lnt.util.multitool
import lnt.util.ImportData
from lnt import testing
from lnt.testing.util.commands import note, warning, error, fatal
@@ -18,7 +19,7 @@
"""start a new development server"""
parser = OptionParser("""\
-%%prog %s [options] <instance path>
+%s [options] <instance path>
Start the LNT server using a development WSGI server. Additional options can be
used to control the server host and port, as well as useful development features
@@ -94,7 +95,7 @@
def action_checkformat(name, args):
"""check the format of an LNT test report file"""
- parser = OptionParser("%%prog %s [options] files" % name)
+ parser = OptionParser("%s [options] files" % name)
(opts, args) = parser.parse_args(args)
if len(args) > 1:
@@ -117,7 +118,7 @@
def action_runtest(name, args):
"""run a builtin test application"""
- parser = OptionParser("%%prog %s test-name [options]" % name)
+ parser = OptionParser("%s test-name [options]" % name)
parser.disable_interspersed_args()
parser.add_option("", "--submit", dest="submit_url", metavar="URLORPATH",
help=("autosubmit the test result to the given server "
@@ -190,7 +191,7 @@
def action_showtests(name, args):
"""show the available built-in tests"""
- parser = OptionParser("%%prog %s" % name)
+ parser = OptionParser("%s" % name)
(opts, args) = parser.parse_args(args)
if len(args) != 0:
parser.error("incorrect number of argments")
@@ -207,7 +208,7 @@
def action_submit(name, args):
"""submit a test report to the server"""
- parser = OptionParser("%%prog %s [options] <url> <file>+" % name)
+ parser = OptionParser("%s [options] <url> <file>+" % name)
parser.add_option("", "--commit", dest="commit", type=int,
help=("whether the result should be committed "
"[%default]"),
@@ -226,7 +227,7 @@
def action_update(name, args):
"""create and or auto-update the given database"""
- parser = OptionParser("%%prog %s [options] <db path>" % name)
+ parser = OptionParser("%s [options] <db path>" % name)
parser.add_option("", "--show-sql", dest="show_sql", default=False,
action="store_true", help="show all SQL queries")
@@ -256,29 +257,8 @@
###
-commands = dict((name[7:], f) for name,f in locals().items()
- if name.startswith('action_'))
-def main():
- cmds_width = max(map(len, commands))
- parser = OptionParser("""\
-%%prog [options] <command> ... arguments ...
-
-Available commands:
-%s""" % ("\n".join(" %-*s - %s" % (cmds_width, name, func.__doc__)
- for name, func in sorted(commands.items()))),
- version = "lnt version %s" % lnt.__version__)
- parser.disable_interspersed_args()
- (opts, args) = parser.parse_args()
-
- if not args:
- parser.print_usage()
- return
-
- cmd = args[0]
- if cmd not in commands:
- parser.error("invalid command: %r" % cmd)
-
- commands[cmd](cmd, args[1:])
+tool = lnt.util.multitool.MultiTool(locals())
+main = tool.main
if __name__ == '__main__':
main()
Modified: lnt/trunk/lnt/lnttool/updatedb.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/lnttool/updatedb.py?rev=165145&r1=165144&r2=165145&view=diff
==============================================================================
--- lnt/trunk/lnt/lnttool/updatedb.py (original)
+++ lnt/trunk/lnt/lnttool/updatedb.py Wed Oct 3 14:25:11 2012
@@ -9,7 +9,7 @@
from optparse import OptionParser, OptionGroup
- parser = OptionParser("%%prog %s [options] <instance> <file>+"%name)
+ parser = OptionParser("%s [options] <instance> <file>+"%name)
parser.add_option("", "--database", dest="database", default="default",
help="database to modify [%default]")
parser.add_option("", "--testsuite", dest="testsuite",
Added: lnt/trunk/lnt/util/multitool.py
URL: http://llvm.org/viewvc/llvm-project/lnt/trunk/lnt/util/multitool.py?rev=165145&view=auto
==============================================================================
--- lnt/trunk/lnt/util/multitool.py (added)
+++ lnt/trunk/lnt/util/multitool.py Wed Oct 3 14:25:11 2012
@@ -0,0 +1,60 @@
+import os
+import sys
+
+class MultiTool(object):
+ """
+ This object defines a generic command line tool instance, which dynamically
+ builds its commands from a module dictionary.
+
+ Example usage::
+
+ import multitool
+
+ def action_foo(name, args):
+ "the foo command"
+
+ ...
+
+ tool = multitool.MultiTool(locals())
+ if __name__ == '__main__':
+ tool.main(sys.argv)
+
+ Any function beginning with "action_" is considered a tool command. It's
+ name is defined by the function name suffix. Underscores in the function
+ name are converted to '-' in the command line syntax. Actions ending ith
+ "-debug" are not listed in the help.
+ """
+
+ def __init__(self, locals):
+ # Create the list of commands.
+ self.commands = dict((name[7:].replace('_','-'), f)
+ for name,f in locals.items()
+ if name.startswith('action_'))
+
+ def usage(self, name):
+ print >>sys.stderr, "Usage: %s <command> [options] ... arguments ..." %(
+ os.path.basename(name),)
+ print >>sys.stderr
+ print >>sys.stderr, """\
+Use ``%s <command> --help`` for more information on a specific command.\n""" % (
+ os.path.basename(name),)
+ print >>sys.stderr, "Available commands:"
+ cmds_width = max(map(len, self.commands))
+ for name,func in sorted(self.commands.items()):
+ if name.endswith("-debug"):
+ continue
+
+ print >>sys.stderr, " %-*s - %s" % (cmds_width, name, func.__doc__)
+ sys.exit(1)
+
+ def main(self, args=None):
+ if args is None:
+ args = sys.argv
+
+ if len(args) < 2 or args[1] not in self.commands:
+ if len(args) >= 2:
+ print >>sys.stderr,"error: invalid command %r\n" % args[1]
+ self.usage(args[0])
+
+ cmd = args[1]
+ self.commands[cmd]('%s %s' % (os.path.basename(args[0]), cmd), args[2:])
More information about the llvm-commits
mailing list