[Piglit] [PATCH v3 7/7] Move re.compile for regex into Core
Jordan Justen
jljusten at gmail.com
Sun Mar 10 15:27:50 PDT 2013
v3 is now pushed.
I fixed two typos related to --no-concurrency, and made
piglit-print-commands.py also use args.tests != [].
Thanks,
-Jordan
On Fri, Mar 8, 2013 at 11:46 AM, Dylan Baker <baker.dylan.c at gmail.com> wrote:
> Move the re.compile into the core.Enivironment constructor, which
> reduces code duplication. It also allows us to pass environment data on
> initilization of the object, rather that having edit it's attributes
> individually.
>
> V2: - Does not remove deprecated options, only marks them as such
> V3: - Fixes deperecated warning for tests from V2 always being triggered
>
> Signed-off-by: Dylan Baker <baker.dylan.c at gmail.com>
> ---
> framework/core.py | 26 +++++++++++++++------
> piglit-print-commands.py | 29 +++++++++++------------
> piglit-run.py | 60 ++++++++++++++++++++----------------------------
> 3 files changed, 58 insertions(+), 57 deletions(-)
>
> diff --git a/framework/core.py b/framework/core.py
> index 645598f..3856ddf 100644
> --- a/framework/core.py
> +++ b/framework/core.py
> @@ -371,14 +371,26 @@ class TestrunResult:
> #############################################################################
>
> class Environment:
> - def __init__(self):
> - # If disabled, runs all tests serially from the main thread.
> - self.concurrent = True
> - self.execute = True
> - self.filter = []
> + def __init__(self, concurrent=True, execute=True, include_filter=[],
> + exclude_filter=[], valgrind=False):
> + self.concurrent = concurrent
> + self.execute = execute
> + self.filter = []
> self.exclude_filter = []
> - self.exclude_tests = set()
> - self.valgrind = False
> + self.exclude_tests = set()
> + self.valgrind = valgrind
> +
> + """
> + The filter lists that are read in should be a list of string objects,
> + however, the filters need to be a list or regex object.
> +
> + This code uses re.compile to rebuild the lists and set self.filter
> + """
> + for each in include_filter:
> + self.filter.append(re.compile(each))
> + for each in exclude_filter:
> + self.exclude_filter.append(re.compile(each))
> +
>
> def run(self, command):
> try:
> diff --git a/piglit-print-commands.py b/piglit-print-commands.py
> index 9dd2290..617952c 100755
> --- a/piglit-print-commands.py
> +++ b/piglit-print-commands.py
> @@ -24,7 +24,6 @@
>
> import argparse
> import os.path as path
> -import re
> import sys, os
> import time
> import traceback
> @@ -64,25 +63,25 @@ def main():
>
> args = parser.parse_args()
>
> - env = core.Environment()
> -
> - # If --tests is called warn that it is deprecated
> - if args.tests is no []:
> - print "Warning: Option --tests is deprecated. Use --include-tests"
> -
> - # Append includes and excludes to env
> - for each in args.include_tests:
> - env.filter.append(re.compile(each))
> - for each in args.tests:
> - env.filter.append(re.compile(each))
> - for each in args.exclude_tests:
> - env.exclude_filter.append(re.compile(each))
> + # Deprecated
> + # --include-tests is the standard going forward, but for backwards
> + # compatability merge args.tests into args.include_tests and drop
> + # duplicates
> + if args.tests is not []:
> + print "Warnings: Option --tests is deprecated, use --include-tests"
> + args.include_tests = list(set(args.include_tests + args.tests))
> +
> + # Set the environment, pass in the included and excluded tests
> + env = core.Environment(
> + exclude_filter=args.exclude_tests,
> + include_filter=args.include_tests,
> + )
>
> # Change to the piglit's path
> piglit_dir = path.dirname(path.realpath(sys.argv[0]))
> os.chdir(piglit_dir)
>
> - profile = core.loadTestProfile(args.testFile)
> + profile = core.loadTestProfile(args.testProfile)
>
> def getCommand(test):
> command = ''
> diff --git a/piglit-run.py b/piglit-run.py
> index 2d0afc1..17e6f6c 100755
> --- a/piglit-run.py
> +++ b/piglit-run.py
> @@ -24,7 +24,6 @@
>
> import argparse
> import os.path as path
> -import re
> import sys, os
> import time
> import traceback
> @@ -39,11 +38,8 @@ from framework.threads import synchronized_self
> #############################################################################
>
> def main():
> - env = core.Environment()
> -
> parser = argparse.ArgumentParser(sys.argv)
>
> -
> # Either require that a name for the test is passed or that
> # resume is requested
> excGroup1 = parser.add_mutually_exclusive_group()
> @@ -55,8 +51,10 @@ def main():
> action = "store_true",
> help = "Resume an interupted test run")
>
> + # Setting the --dry-run flag is equivalent to env.execute=false
> parser.add_argument("-d", "--dry-run",
> - action = "store_true",
> + action = "store_false",
> + dest = "execute",
> help = "Do not execute the tests")
> parser.add_argument("-t", "--include-tests",
> default = [],
> @@ -81,7 +79,8 @@ def main():
> # supplied, or it throws an error
> excGroup2 = parser.add_mutually_exclusive_group()
> excGroup2.add_argument("--no-concurrency",
> - action = "store_true",
> + action = "store_false",
> + dest = "concurrency",
> help = "Disable concurrent test runs")
> excGroup2.add_argument("-c", "--concurrent",
> action = "store",
> @@ -109,33 +108,26 @@ def main():
> if args.platform is not None:
> os.environ['PIGLIT_PLATFORM'] = args.platform
>
> - # Set dry-run
> - if args.dry_run is True:
> - env.execute = False
> -
> - # Set valgrind
> - if args.valgrind is True:
> - env.valgrind = True
> -
> - # Turn concurency off if requested
> - # Deprecated
> + # Deprecated:
> + # If the deprecated -c, --concurrent flag is passed, override
> + # args.concurrency (which would otherwise be set by the --no-concurrencc)
> + # flag and print a warning.
> if args.concurrent is not None:
> if (args.concurrent == '1' or args.concurrent == 'on'):
> - env.concurrent = True
> + args.concurrency = True
> print "Warning: Option -c, --concurrent is deprecated, " \
> "concurrent test runs are on by default"
> elif (args.concurrent == '0' or args.concurrent == 'off'):
> - env.concurrent = False
> + args.concurrency = False
> print "Warning: Option -c, --concurrent is deprecated, " \
> "use --no-concurrent for non-concurrent test runs"
> # Ne need for else, since argparse restricts the arguments allowed
>
> - # Not deprecated
> - elif args.no_concurrency is True:
> - env.concurrent = False
> -
> # If the deprecated tests option was passed print a warning
> if args.tests != []:
> + # This merges any options passed into the --tests option into the
> + # ones passed into -t or --tests-include and throws out duplicates
> + args.include_tests = list(set(args.include_tests + args.tests))
> print "Warning: Option --tests is deprecated, use " \
> "--include-tests instead"
>
> @@ -147,25 +139,23 @@ def main():
> # Load settings from the old results JSON
> old_results = core.loadTestResults(resultsDir)
> profileFilename = old_results.options['profile']
> - for value in old_results.options['filter']:
> - test_filter.append(value)
> - env.filter.append(re.compile(value))
> - for value in old_results.options['exclude_filter']:
> - exclude_filter.append(value)
> - env.exclude_filter.append(re.compile(value))
> +
> + # Changing the args to the old args allows us to set them
> + # all in one places down the way
> + args.exclude_tests = old_results.options['exclude_filter']
> + args.include_tests = old_results.options['filter']
>
> # Otherwise parse additional settings from the command line
> else:
> profileFilename = args.testProfile
> resultsDir = args.resultsPath
>
> - # Set the excluded and included tests regex
> - for each in args.include_tests:
> - env.filter.append(re.compile(each))
> - for each in args.tests:
> - env.filter.append(re.compile(each))
> - for each in args.exclude_tests:
> - env.exclude_filter.append(re.compile(each))
> + # Pass arguments into Environment
> + env = core.Environment(concurrent=args.concurrency,
> + exclude_filter=args.exclude_tests,
> + include_filter=args.include_tests,
> + execute=args.execute,
> + valgrind=args.valgrind)
>
> # Change working directory to the root of the piglit directory
> piglit_dir = path.dirname(path.realpath(sys.argv[0]))
> --
> 1.8.1.4
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit
More information about the Piglit
mailing list