From 5e48999478052265a5ec9b94c698dffd56c554d1 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Fri, 14 Jun 2013 13:40:41 +0200 Subject: [PATCH] Add --vagrant switch to the javascript style-checker Added -V|--vagrant switch to the javascript style-checker to run the checks in the Vagrant VM refs #4264 --- test/js/checkswag | 114 +++++++++++++++++++++++++++------------------- 1 file changed, 67 insertions(+), 47 deletions(-) diff --git a/test/js/checkswag b/test/js/checkswag index 3ea32ffe0..fec7a3f5e 100755 --- a/test/js/checkswag +++ b/test/js/checkswag @@ -3,6 +3,7 @@ import os import sys import subprocess +from pipes import quote from fnmatch import fnmatch from optparse import OptionParser, BadOptionError, AmbiguousOptionError @@ -10,6 +11,7 @@ from optparse import OptionParser, BadOptionError, AmbiguousOptionError APPLICATION = 'jshint' DEFAULT_ARGS = [] +VAGRANT_SCRIPT = '/vagrant/test/js/checkswag' REPORT_DIRECTORY = '../../build/log' @@ -70,62 +72,80 @@ def parse_commandline(): parser.add_option('-e', '--exclude', metavar='PATTERN', action='append', help='Exclude specific files/test cases. ' '(Can be supplied multiple times.)') + parser.add_option('-V', '--vagrant', action='store_true', + help='Run in vagrant VM') return parser.parse_args() def main(): options, arguments = parse_commandline() - # Environment preparation and verification - os.chdir(get_script_directory()) - application_path = execute_command('which {0}'.format(APPLICATION), - True, True).strip() - if not application_path: - print 'ERROR: {0} not found!'.format(APPLICATION) - return 2 + if options.vagrant and os.environ['USER'] != 'vagrant': + # Check if vagrant is installed + vagrant_path = execute_command('which vagrant', True, True).strip() + if not vagrant_path: + print 'ERROR: vagrant not found!' + return 2 - # Commandline preparation - command_options = [] - if options.build: - command_options.extend(['--reporter', 'jslint']) + # Call the script in the Vagrant VM with the same parameters + commandline = ' '.join(quote(p) for p in sys.argv[1:]) + return execute_command('vagrant ssh -c "{0} {1}"' + ''.format(VAGRANT_SCRIPT, commandline), + shell=True) else: - command_options.append('--verbose') - if options.verbose: - command_options.append('--show-non-errors') - path_args = [arguments.remove(a) or a - for a in arguments[:len(arguments)] - if os.path.isfile(a) or os.path.isdir(a)] - if not path_args: - path_args = ['../../application', '../../bin', '../../library/Icinga'] - if options.include: - path_args = [os.path.join(r, f) for a in path_args - for r, _, fs in os.walk(a) - for f in fs - if any(fnmatch(os.path.join(r, f), p) - for p in options.include)] - if options.exclude: - walk = lambda p: os.walk(p) if os.path.isdir(p) else \ - [(os.path.dirname(p), None, [os.path.basename(p)])] - path_args = [os.path.join(r, f) - for a in path_args - for r, _, fs in walk(a) - for f in fs - if not any(fnmatch(os.path.join(r, f), p) - for p in options.exclude)] + # Environment preparation and verification + os.chdir(get_script_directory()) + application_path = execute_command('which {0}'.format(APPLICATION), + True, True).strip() + if not application_path: + print 'ERROR: {0} not found!'.format(APPLICATION) + return 2 - # Application invocation.. - if options.build: - result_data = execute_command([application_path] + DEFAULT_ARGS + - command_options + arguments + - path_args, True) - result_path = os.path.join(get_report_directory(), - 'jshint_results.xml') - with open(result_path, 'w') as result_file: - result_file.write(result_data) - else: - execute_command([application_path] + DEFAULT_ARGS + - command_options + arguments + path_args) - return 0 + # Commandline preparation + command_options = [] + if options.build: + command_options.extend(['--reporter', 'jslint']) + else: + command_options.append('--verbose') + if options.verbose: + command_options.append('--show-non-errors') + path_args = [arguments.remove(a) or a + for a in arguments[:len(arguments)] + if os.path.isfile(a) or os.path.isdir(a)] + if not path_args: + path_args = ['../../application', '../../bin', + '../../library/Icinga'] + if options.include: + path_args = [os.path.join(r, f) + for a in path_args + for r, _, fs in os.walk(a) + for f in fs + if any(fnmatch(os.path.join(r, f), p) + for p in options.include)] + if options.exclude: + walk = lambda p: os.walk(p) if os.path.isdir(p) else \ + [(os.path.dirname(p), None, + [os.path.basename(p)])] + path_args = [os.path.join(r, f) + for a in path_args + for r, _, fs in walk(a) + for f in fs + if not any(fnmatch(os.path.join(r, f), p) + for p in options.exclude)] + + # Application invocation.. + if options.build: + result_data = execute_command([application_path] + DEFAULT_ARGS + + command_options + arguments + + path_args, True) + result_path = os.path.join(get_report_directory(), + 'jshint_results.xml') + with open(result_path, 'w') as result_file: + result_file.write(result_data) + else: + execute_command([application_path] + DEFAULT_ARGS + + command_options + arguments + path_args) + return 0 if __name__ == '__main__':