[lit] Use argparse instead of optparse
authorChris Bieneman <beanz@apple.com>
Mon, 3 Oct 2016 22:12:42 +0000 (22:12 +0000)
committerChris Bieneman <beanz@apple.com>
Mon, 3 Oct 2016 22:12:42 +0000 (22:12 +0000)
Summary:
optparse is deprecated in Python 2.7, which is the minimum version of
Python required to run the LLVM test suite. Replace its usage in lit
with argparse, optparse's 2.7 replacement module.

argparse has several benefits over optparse, but this commit does not
make use of those benefits yet. Instead, it simply uses the new API,
and attempts to keep the number of changes to a minimum.

Confirmed that lit's test suite, as well as LLVM's regression test suite,
still pass with these changes.

Patch By Brian Gesiak!

Reviewers: ddunbar, echristo, beanz, delcypher

Subscribers: llvm-commits, mehdi_amini

Differential Revision: https://reviews.llvm.org/D25173

llvm-svn: 283152

llvm/utils/lit/lit/main.py
llvm/utils/lit/tests/usage.py

index 91077d508b58666904cc5d86ba3c4a2e634ec5b5..055c7f90ed6cbf6a7ba66e7f3665a5d6efa6865d 100755 (executable)
@@ -13,6 +13,7 @@ import random
 import re
 import sys
 import time
+import argparse
 import tempfile
 import shutil
 
@@ -164,123 +165,121 @@ def main(builtinParameters = {}):
             shutil.rmtree(lit_tmp)
 
 def main_with_tmp(builtinParameters):
-    global options
-    from optparse import OptionParser, OptionGroup
-    parser = OptionParser("usage: %prog [options] {file-or-path}")
+    parser = argparse.ArgumentParser()
+    parser.add_argument('test_paths',
+                        nargs='*',
+                        help='Files or paths to include in the test suite')
 
-    parser.add_option("", "--version", dest="show_version",
+    parser.add_argument("--version", dest="show_version",
                       help="Show version and exit",
                       action="store_true", default=False)
-    parser.add_option("-j", "--threads", dest="numThreads", metavar="N",
+    parser.add_argument("-j", "--threads", dest="numThreads", metavar="N",
                       help="Number of testing threads",
-                      type=int, action="store", default=None)
-    parser.add_option("", "--config-prefix", dest="configPrefix",
+                      type=int, default=None)
+    parser.add_argument("--config-prefix", dest="configPrefix",
                       metavar="NAME", help="Prefix for 'lit' config files",
                       action="store", default=None)
-    parser.add_option("-D", "--param", dest="userParameters",
+    parser.add_argument("-D", "--param", dest="userParameters",
                       metavar="NAME=VAL",
                       help="Add 'NAME' = 'VAL' to the user defined parameters",
                       type=str, action="append", default=[])
 
-    group = OptionGroup(parser, "Output Format")
+    format_group = parser.add_argument_group("Output Format")
     # FIXME: I find these names very confusing, although I like the
     # functionality.
-    group.add_option("-q", "--quiet", dest="quiet",
+    format_group.add_argument("-q", "--quiet",
                      help="Suppress no error output",
                      action="store_true", default=False)
-    group.add_option("-s", "--succinct", dest="succinct",
+    format_group.add_argument("-s", "--succinct",
                      help="Reduce amount of output",
                      action="store_true", default=False)
-    group.add_option("-v", "--verbose", dest="showOutput",
+    format_group.add_argument("-v", "--verbose", dest="showOutput",
                      help="Show test output for failures",
                      action="store_true", default=False)
-    group.add_option("-a", "--show-all", dest="showAllOutput",
+    format_group.add_argument("-a", "--show-all", dest="showAllOutput",
                      help="Display all commandlines and output",
                      action="store_true", default=False)
-    group.add_option("-o", "--output", dest="output_path",
+    format_group.add_argument("-o", "--output", dest="output_path",
                      help="Write test results to the provided path",
-                     action="store", type=str, metavar="PATH")
-    group.add_option("", "--no-progress-bar", dest="useProgressBar",
+                     action="store", metavar="PATH")
+    format_group.add_argument("--no-progress-bar", dest="useProgressBar",
                      help="Do not use curses based progress bar",
                      action="store_false", default=True)
-    group.add_option("", "--show-unsupported", dest="show_unsupported",
+    format_group.add_argument("--show-unsupported",
                      help="Show unsupported tests",
                      action="store_true", default=False)
-    group.add_option("", "--show-xfail", dest="show_xfail",
+    format_group.add_argument("--show-xfail",
                      help="Show tests that were expected to fail",
                      action="store_true", default=False)
-    parser.add_option_group(group)
 
-    group = OptionGroup(parser, "Test Execution")
-    group.add_option("", "--path", dest="path",
+    execution_group = parser.add_argument_group("Test Execution")
+    execution_group.add_argument("--path",
                      help="Additional paths to add to testing environment",
                      action="append", type=str, default=[])
-    group.add_option("", "--vg", dest="useValgrind",
+    execution_group.add_argument("--vg", dest="useValgrind",
                      help="Run tests under valgrind",
                      action="store_true", default=False)
-    group.add_option("", "--vg-leak", dest="valgrindLeakCheck",
+    execution_group.add_argument("--vg-leak", dest="valgrindLeakCheck",
                      help="Check for memory leaks under valgrind",
                      action="store_true", default=False)
-    group.add_option("", "--vg-arg", dest="valgrindArgs", metavar="ARG",
+    execution_group.add_argument("--vg-arg", dest="valgrindArgs", metavar="ARG",
                      help="Specify an extra argument for valgrind",
                      type=str, action="append", default=[])
-    group.add_option("", "--time-tests", dest="timeTests",
+    execution_group.add_argument("--time-tests", dest="timeTests",
                      help="Track elapsed wall time for each test",
                      action="store_true", default=False)
-    group.add_option("", "--no-execute", dest="noExecute",
+    execution_group.add_argument("--no-execute", dest="noExecute",
                      help="Don't execute any tests (assume PASS)",
                      action="store_true", default=False)
-    group.add_option("", "--xunit-xml-output", dest="xunit_output_file",
+    execution_group.add_argument("--xunit-xml-output", dest="xunit_output_file",
                       help=("Write XUnit-compatible XML test reports to the"
                             " specified file"), default=None)
-    group.add_option("", "--timeout", dest="maxIndividualTestTime",
+    execution_group.add_argument("--timeout", dest="maxIndividualTestTime",
                      help="Maximum time to spend running a single test (in seconds)."
                      "0 means no time limit. [Default: 0]",
                     type=int, default=None)
-    group.add_option("", "--max-failures", dest="maxFailures",
+    execution_group.add_argument("--max-failures", dest="maxFailures",
                      help="Stop execution after the given number of failures.",
                      action="store", type=int, default=None)
-    parser.add_option_group(group)
 
-    group = OptionGroup(parser, "Test Selection")
-    group.add_option("", "--max-tests", dest="maxTests", metavar="N",
+    selection_group = parser.add_argument_group("Test Selection")
+    selection_group.add_argument("--max-tests", dest="maxTests", metavar="N",
                      help="Maximum number of tests to run",
                      action="store", type=int, default=None)
-    group.add_option("", "--max-time", dest="maxTime", metavar="N",
+    selection_group.add_argument("--max-time", dest="maxTime", metavar="N",
                      help="Maximum time to spend testing (in seconds)",
                      action="store", type=float, default=None)
-    group.add_option("", "--shuffle", dest="shuffle",
+    selection_group.add_argument("--shuffle",
                      help="Run tests in random order",
                      action="store_true", default=False)
-    group.add_option("-i", "--incremental", dest="incremental",
+    selection_group.add_argument("-i", "--incremental",
                      help="Run modified and failing tests first (updates "
                      "mtimes)",
                      action="store_true", default=False)
-    group.add_option("", "--filter", dest="filter", metavar="REGEX",
+    selection_group.add_argument("--filter", metavar="REGEX",
                      help=("Only run tests with paths matching the given "
                            "regular expression"),
                      action="store", default=None)
-    parser.add_option_group(group)
 
-    group = OptionGroup(parser, "Debug and Experimental Options")
-    group.add_option("", "--debug", dest="debug",
+    debug_group = parser.add_argument_group("Debug and Experimental Options")
+    debug_group.add_argument("--debug",
                       help="Enable debugging (for 'lit' development)",
                       action="store_true", default=False)
-    group.add_option("", "--show-suites", dest="showSuites",
+    debug_group.add_argument("--show-suites", dest="showSuites",
                       help="Show discovered test suites",
                       action="store_true", default=False)
-    group.add_option("", "--show-tests", dest="showTests",
+    debug_group.add_argument("--show-tests", dest="showTests",
                       help="Show all discovered tests",
                       action="store_true", default=False)
-    group.add_option("", "--use-processes", dest="useProcesses",
+    debug_group.add_argument("--use-processes", dest="useProcesses",
                       help="Run tests in parallel with processes (not threads)",
                       action="store_true", default=True)
-    group.add_option("", "--use-threads", dest="useProcesses",
+    debug_group.add_argument("--use-threads", dest="useProcesses",
                       help="Run tests in parallel with threads (not processes)",
                       action="store_false", default=True)
-    parser.add_option_group(group)
 
-    (opts, args) = parser.parse_args()
+    opts = parser.parse_args()
+    args = opts.test_paths
 
     if opts.show_version:
         print("lit %s" % (lit.__version__,))
index e10d6134a03c29a63ebd139cc4ae55a00aef64de..d168c5eff9e3c59db4a7c74f9e94ab498eedf97e 100644 (file)
@@ -3,4 +3,4 @@
 # RUN: %{lit} --help > %t.out
 # RUN: FileCheck < %t.out %s
 #
-# CHECK: Usage: lit.py [options] {file-or-path}
+# CHECK: usage: lit.py [-h]