ext: Add support for comma-separated inputs of testlib argparser
authorHoa Nguyen <hoanguyen@ucdavis.edu>
Tue, 8 Sep 2020 20:04:14 +0000 (13:04 -0700)
committerHoa Nguyen <hoanguyen@ucdavis.edu>
Wed, 14 Oct 2020 08:41:23 +0000 (08:41 +0000)
Currently, the --isa, --variant and --length options of testlib
do not support comma-separated inputs. This commit adds the
support for such an input for those options.

The argument parser now supports specifying the parameters multiple
times as well as specifying multiple options at a time.

JIRA: https://gem5.atlassian.net/jira/software/c/projects/GEM5/issues/GEM5-770

Change-Id: I3c276a9b9d9c6b0b802ecf8e7f1f9a3dfafe45d1
Signed-off-by: Hoa Nguyen <hoanguyen@ucdavis.edu>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/34198
Maintainer: Bobby R. Bruce <bbruce@ucdavis.edu>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
ext/testlib/configuration.py

index 1267c25b8a2e81da397affff0b16ba116950a9b5..c9c10ead4bb8b73f86e4fda9ca1c64baf09a7260 100644 (file)
@@ -486,6 +486,8 @@ def define_common_args(config):
     '''
     global common_args
 
+    parse_comma_separated_string = lambda st: st.split(',')
+
     # A list of common arguments/flags used across cli parsers.
     common_args = [
         Argument(
@@ -503,20 +505,23 @@ def define_common_args(config):
             help='A tag comparison used to select tests.'),
         Argument(
             '--isa',
-            action='append',
+            action='extend',
             default=[],
+            type=parse_comma_separated_string,
             help="Only tests that are valid with one of these ISAs. "
                  "Comma separated."),
         Argument(
             '--variant',
-            action='append',
+            action='extend',
             default=[],
+            type=parse_comma_separated_string,
             help="Only tests that are valid with one of these binary variants"
                  "(e.g., opt, debug). Comma separated."),
         Argument(
             '--length',
-            action='append',
+            action='extend',
             default=[],
+            type=parse_comma_separated_string,
             help="Only tests that are one of these lengths. Comma separated."),
         Argument(
             '--host',
@@ -596,6 +601,11 @@ def define_common_args(config):
 
 @add_metaclass(abc.ABCMeta)
 class ArgParser(object):
+    class ExtendAction(argparse.Action):
+        def __call__(self, parser, namespace, values, option_string=None):
+            items = getattr(namespace, self.dest, [])
+            items.extend(values)
+            setattr(namespace, self.dest, items)
 
     def __init__(self, parser):
         # Copy public methods of the parser.
@@ -603,6 +613,7 @@ class ArgParser(object):
             if not attr.startswith('_'):
                 setattr(self, attr, getattr(parser, attr))
         self.parser = parser
+        self.parser.register('action', 'extend', ArgParser.ExtendAction)
         self.add_argument = self.parser.add_argument
 
         # Argument will be added to all parsers and subparsers.