diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2016-05-03 14:09:56 -0700 |
---|---|---|
committer | Dylan Baker <dylan@pnwbakers.com> | 2016-05-10 14:35:19 -0700 |
commit | a7cad94da6e53ba47c6990792e9d7663513fd645 (patch) | |
tree | 022282ebd7df83aab4d237a032782aa2883ce88e | |
parent | cc4fcb5d966098ba4ea8b88e41441872694ef7ca (diff) |
framework: Add piglit-print-commands to the piglit command
This is mostly just restructuring code so that piglit-print-command
works like the other piglit-* commands, calling back into the same
module that the main piglit application does. This allows the addition
of the 'piglit print-cmds' for those who prefer that (or who use an
installed piglit and don't have piglit-*.
Signed-off-by: Dylan Baker <dylanx.c.baker@intel.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
-rw-r--r-- | framework/programs/print_commands.py | 85 | ||||
-rwxr-xr-x | piglit | 5 | ||||
-rwxr-xr-x | piglit-print-commands.py | 113 |
3 files changed, 119 insertions, 84 deletions
diff --git a/framework/programs/print_commands.py b/framework/programs/print_commands.py new file mode 100644 index 000000000..8330d55b6 --- /dev/null +++ b/framework/programs/print_commands.py @@ -0,0 +1,85 @@ +# Copyright (c) 2016 Intel Corporation + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +"""Print each test's command in a consumable format.""" + +from __future__ import ( + absolute_import, division, print_function, unicode_literals +) +import argparse +import os +import sys + +import six + +from . import parsers +from framework import options, profile, exceptions +from framework.test import Test, GleanTest + + +def get_command(test, piglit_dir): + """Get just the name of the command with a path relative to bin.""" + command = '' + if isinstance(test, GleanTest): + for var, val in test.env.items(): + command += "{}='{}'".format(var, val) + + # Make the test command relative to the piglit_dir + test_command = test.command[:] + test_command[0] = os.path.relpath(test_command[0], piglit_dir) + + command += ' '.join(test_command) + return command + + +@exceptions.handler +def main(input_): + """The main function.""" + parser = argparse.ArgumentParser(parents=[parsers.CONFIG]) + parser.add_argument("-t", "--include-tests", + default=[], + action="append", + metavar="<regex>", + help="Run only matching tests " + "(can be used more than once)") + parser.add_argument("-x", "--exclude-tests", + default=[], + action="append", + metavar="<regex>", + help="Exclude matching tests (can be used more than " + "once)") + parser.add_argument("testProfile", + metavar="<Path to testfile>", + help="Path to results folder") + args = parser.parse_args(input_) + + options.OPTIONS.exclude_filter = args.exclude_tests + options.OPTIONS.include_filter = args.include_tests + + # Change to the piglit's path + piglit_dir = os.path.dirname(os.path.realpath(sys.argv[0])) + os.chdir(piglit_dir) + + profile_ = profile.load_test_profile(args.testProfile) + + profile_._prepare_test_list() + for name, test in six.iteritems(profile_.test_list): + assert isinstance(test, Test) + print(name, ':::', get_command(test, piglit_dir)) @@ -110,6 +110,7 @@ def setup_module_search_path(): setup_module_search_path() import framework.programs.run as run import framework.programs.summary as summary +import framework.programs.print_commands as pc def main(): @@ -121,6 +122,10 @@ def main(): parser = argparse.ArgumentParser() subparsers = parser.add_subparsers() + print_cmd = subparsers.add_parser('print-cmd', + add_help=False, + help="Print piglit commands, one per line.") + print_cmd.set_defaults(func=pc.main) parse_run = subparsers.add_parser('run', add_help=False, diff --git a/piglit-print-commands.py b/piglit-print-commands.py index 46241c00b..aeabe928d 100755 --- a/piglit-print-commands.py +++ b/piglit-print-commands.py @@ -1,97 +1,42 @@ #!/usr/bin/env python -# -# Permission is hereby granted, free of charge, to any person -# obtaining a copy of this software and associated documentation -# files (the "Software"), to deal in the Software without -# restriction, including without limitation the rights to use, -# copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the -# Software is furnished to do so, subject to the following -# conditions: -# -# This permission notice shall be included in all copies or -# substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR(S) BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -# OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -# DEALINGS IN THE SOFTWARE. -"""Print each test's command in a consumable format.""" +# Copyright (c) 2014, 2016 Intel Corporation -from __future__ import ( - absolute_import, division, print_function, unicode_literals -) -import argparse -import os -import sys +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: -import six +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. -sys.path.append(os.path.dirname(os.path.realpath(sys.argv[0]))) -from framework import options, profile -from framework.programs import parsers -from framework.test import Test, GleanTest +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +"""Print piglit commands to the console. -def get_command(test, piglit_dir): - """Get just the name of the command with a path relative to bin.""" - command = '' - if isinstance(test, GleanTest): - for var, val in test.env.items(): - command += "{}='{}'".format(var, val) +Deprecated compatibility wrapper - # Make the test command relative to the piglit_dir - test_command = test.command[:] - test_command[0] = os.path.relpath(test_command[0], piglit_dir) +""" + +from __future__ import ( + absolute_import, division, print_function, unicode_literals +) +import sys - command += ' '.join(test_command) - return command +import six +from framework.programs.print_commands import main -def main(): - """The main function.""" +if __name__ == '__main__': if six.PY2: - input_ = [i.decode('utf-8') for i in sys.argv[1:]] + main([i.decode('utf-8') for i in sys.argv[1:]]) elif six.PY3: - input_ = sys.argv[1:] - - parser = argparse.ArgumentParser(parents=[parsers.CONFIG]) - parser.add_argument("-t", "--include-tests", - default=[], - action="append", - metavar="<regex>", - help="Run only matching tests " - "(can be used more than once)") - parser.add_argument("-x", "--exclude-tests", - default=[], - action="append", - metavar="<regex>", - help="Exclude matching tests (can be used more than " - "once)") - parser.add_argument("testProfile", - metavar="<Path to testfile>", - help="Path to results folder") - args = parser.parse_args(input_) - - options.OPTIONS.exclude_filter = args.exclude_tests - options.OPTIONS.include_filter = args.include_tests - - # Change to the piglit's path - piglit_dir = os.path.dirname(os.path.realpath(sys.argv[0])) - os.chdir(piglit_dir) - - profile_ = profile.load_test_profile(args.testProfile) - - profile_._prepare_test_list() - for name, test in six.iteritems(profile_.test_list): - assert isinstance(test, Test) - print(name, ':::', get_command(test, piglit_dir)) - - -if __name__ == "__main__": - main() + main(sys.argv[1:]) |