diff --git a/tools/parse_test_results.py b/tools/parse_test_results.py index 42771a800..64e121d5f 100755 --- a/tools/parse_test_results.py +++ b/tools/parse_test_results.py @@ -46,9 +46,10 @@ def style_output(o): ret += '%s\n' % l elif '**passed**' in l: ret += '%s\n' % l - elif ': error: ' in l or ': fatal error: ' in l: + elif ': error: ' in l or ': fatal error: ' in l or ' : fatal error ' in l or \ + 'failed to write output file' in l: ret += '%s\n' % l - elif ': warning: ' in l: + elif ': warning: ' in l or ') : warning C' in l: ret += '%s\n' % l elif l == '====== END OUTPUT ======' and not subtle: ret += '%s\n' % l @@ -127,7 +128,6 @@ if not need_refresh: # test_primitives: { # output: ... # status: 1 -# warnings: 21 # } # } # } diff --git a/tools/run_regression_tests.py b/tools/run_regression_tests.py new file mode 100644 index 000000000..2863e8de5 --- /dev/null +++ b/tools/run_regression_tests.py @@ -0,0 +1,69 @@ +#!/bin/python + +import run_tests +import os +import time + +# returns a list of new revisions +def svn_fetch(): + + current_version = run_tests.svn_info()[0] + + p = subprocess.Popen(['svn', 'up'], stdout=subprocess.PIPE) + + revision = -1 + + output = '' + for l in p.stdout: + if 'At revision ' in l: + revision = int(l.split(':')[1].strip()) + output += l + + if revision == -1: + print '\n\nsvn update failed\n\n%s' % ouput + sys.exit(1) + + return range(current_version + 1, revision + 1) + +def svn_up(revision): + os.system('svn up %d' % revision) + +def print_usage(): + print '''usage: run_regression_tests.py remote-path [options] toolset [toolset...] + +toolset are bjam toolsets. For instance clang, gcc, darwin, msvc etc. +remote-path is an scp path where the results are copied. This path has +the form: user@hostname:/path + +options: + + -j use n parallel processes for running tests +''' + + +def loop(): + while True: + revs = svn_fetch() + # reverse the list to always run the tests for the + # latest version first, then fill in with the history + revs.reverse() + + if len(sys.argv) < 3: + print_usage() + sys.exit(1) + + remote_path = sys.argv[1] + root_path = os.path.join(os.getcwd(), 'regression_tests') + + for r in revs: + print '\n\nREVISION %d ===\n' % r + svn_up(r) + + run_tests.main(sys.argv[2:]) + + os.system('scp -r %s %s' % (os.path.join(root_path, '%d' % r), remote_path)) + + time.sleep(120) + +if __name__ == "__main__": + loop() diff --git a/tools/run_tests.py b/tools/run_tests.py index 93d5959e8..cf19c094b 100755 --- a/tools/run_tests.py +++ b/tools/run_tests.py @@ -89,9 +89,7 @@ def run_tests(toolset, tests, features, options, test_dir): for t in tests: p = subprocess.Popen(['bjam', '--out-xml=%s' % xml_file, toolset, t] + options + features.split(' '), stdout=subprocess.PIPE) output = '' - warnings = 0 for l in p.stdout: - if 'warning: ' in l: warnings += 1 output += l p.wait() @@ -124,7 +122,7 @@ def run_tests(toolset, tests, features, options, test_dir): try: os.unlink(xml_file) except: pass - r = { 'status': p.returncode, 'output': output, 'warnings': warnings, 'command': command } + r = { 'status': p.returncode, 'output': output, 'command': command } results[t + '|' + features] = r fail_color = '\033[31;1m' @@ -136,9 +134,9 @@ def run_tests(toolset, tests, features, options, test_dir): pass_color == '' end_seq = '' - print '%s [%s] [%s]' % (t, toolset, features), - if p.returncode == 0: print pass_color + 'PASSED' + end_seq - else: print fail_color + 'FAILED' + end_seq + if p.returncode == 0: sys.stdout.write('.') + else: sys.stdout.write('X') + sys.stdout.flush() return (toolset, results) @@ -149,13 +147,13 @@ options: -h prints this message and exits ''' -def main(): +def main(argv): toolsets = [] num_processes = 4 - for arg in sys.argv[1:]: + for arg in argv: if arg[0] == '-': if arg[1] == 'j': num_processes = int(arg[2:]) @@ -209,8 +207,8 @@ def main(): print '%d - %s - %s' % (revision, author, timestamp) - print 'toolsets: ', toolsets - print 'configs: ', configs + print 'toolsets: %s' % ' '.join(toolsets) +# print 'configs: %s' % '|'.join(configs) rev_dir = os.path.join(os.getcwd(), 'regression_tests') try: os.mkdir(rev_dir) @@ -236,7 +234,6 @@ def main(): print 'found %d tests' % len(tests) for toolset in toolsets: - print 'toolset %s' % toolset results = {} toolset_found = False @@ -258,5 +255,5 @@ def main(): f.close() if __name__ == "__main__": - main() + main(sys.argv[1:])