diff options
Diffstat (limited to 'tools/regression/xsl_reports/report.py')
-rw-r--r-- | tools/regression/xsl_reports/report.py | 371 |
1 files changed, 371 insertions, 0 deletions
diff --git a/tools/regression/xsl_reports/report.py b/tools/regression/xsl_reports/report.py new file mode 100644 index 0000000000..75ee1b31bc --- /dev/null +++ b/tools/regression/xsl_reports/report.py @@ -0,0 +1,371 @@ + +# Copyright (c) MetaCommunications, Inc. 2003-2004 +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import shutil +import os.path +import os +import string +import time +import sys + +import utils +import runner + + +report_types = [ 'us', 'ds', 'ud', 'dd', 'l', 'p', 'x', 'i', 'n', 'ddr', 'dsr' ] + +if __name__ == '__main__': + run_dir = os.path.abspath( os.path.dirname( sys.argv[ 0 ] ) ) +else: + run_dir = os.path.abspath( os.path.dirname( sys.modules[ __name__ ].__file__ ) ) + + +def map_path( path ): + return os.path.join( run_dir, path ) + + +def xsl_path( xsl_file_name, v2 = 0 ): + if v2: + return map_path( os.path.join( 'xsl/v2', xsl_file_name ) ) + else: + return map_path( os.path.join( 'xsl', xsl_file_name ) ) + + +def make_result_pages( + test_results_file + , expected_results_file + , failures_markup_file + , tag + , run_date + , comment_file + , results_dir + , result_prefix + , reports + , v2 + ): + + utils.log( 'Producing the reports...' ) + __log__ = 1 + + output_dir = os.path.join( results_dir, result_prefix ) + utils.makedirs( output_dir ) + + if comment_file != '': + comment_file = os.path.abspath( comment_file ) + + if expected_results_file != '': + expected_results_file = os.path.abspath( expected_results_file ) + else: + expected_results_file = os.path.abspath( map_path( 'empty_expected_results.xml' ) ) + + + extended_test_results = os.path.join( output_dir, 'extended_test_results.xml' ) + if 'x' in reports: + utils.log( ' Merging with expected results...' ) + utils.libxslt( + utils.log + , test_results_file + , xsl_path( 'add_expected_results.xsl', v2 ) + , extended_test_results + , { 'expected_results_file': expected_results_file + , 'failures_markup_file' : failures_markup_file + , 'source' : tag } + ) + + links = os.path.join( output_dir, 'links.html' ) + + utils.makedirs( os.path.join( output_dir, 'output' ) ) + for mode in ( 'developer', 'user' ): + utils.makedirs( os.path.join( output_dir, mode , 'output' ) ) + + if 'l' in reports: + utils.log( ' Making test output files...' ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'links_page.xsl', v2 ) + , links + , { + 'source': tag + , 'run_date': run_date + , 'comment_file': comment_file + , 'explicit_markup_file': failures_markup_file + } + ) + + + issues = os.path.join( output_dir, 'developer', 'issues.html' ) + if 'i' in reports: + utils.log( ' Making issues list...' ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'issues_page.xsl', v2 ) + , issues + , { + 'source': tag + , 'run_date': run_date + , 'comment_file': comment_file + , 'explicit_markup_file': failures_markup_file + } + ) + + for mode in ( 'developer', 'user' ): + if mode[0] + 'd' in reports: + utils.log( ' Making detailed %s report...' % mode ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'result_page.xsl', v2 ) + , os.path.join( output_dir, mode, 'index.html' ) + , { + 'links_file': 'links.html' + , 'mode': mode + , 'source': tag + , 'run_date': run_date + , 'comment_file': comment_file + , 'expected_results_file': expected_results_file + , 'explicit_markup_file' : failures_markup_file + } + ) + + for mode in ( 'developer', 'user' ): + if mode[0] + 's' in reports: + utils.log( ' Making summary %s report...' % mode ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'summary_page.xsl', v2 ) + , os.path.join( output_dir, mode, 'summary.html' ) + , { + 'mode' : mode + , 'source': tag + , 'run_date': run_date + , 'comment_file': comment_file + , 'explicit_markup_file' : failures_markup_file + } + ) + + if v2 and "ddr" in reports: + utils.log( ' Making detailed %s release report...' % mode ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'result_page.xsl', v2 ) + , os.path.join( output_dir, "developer", 'index_release.html' ) + , { + 'links_file': 'links.html' + , 'mode': "developer" + , 'source': tag + , 'run_date': run_date + , 'comment_file': comment_file + , 'expected_results_file': expected_results_file + , 'explicit_markup_file' : failures_markup_file + , 'release': "yes" + } + ) + + if v2 and "dsr" in reports: + utils.log( ' Making summary %s release report...' % mode ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'summary_page.xsl', v2 ) + , os.path.join( output_dir, "developer", 'summary_release.html' ) + , { + 'mode' : "developer" + , 'source': tag + , 'run_date': run_date + , 'comment_file': comment_file + , 'explicit_markup_file' : failures_markup_file + , 'release': 'yes' + } + ) + + if 'e' in reports: + utils.log( ' Generating expected_results ...' ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'produce_expected_results.xsl', v2 ) + , os.path.join( output_dir, 'expected_results.xml' ) + ) + + if v2 and 'n' in reports: + utils.log( ' Making runner comment files...' ) + utils.libxslt( + utils.log + , extended_test_results + , xsl_path( 'runners.xsl', v2 ) + , os.path.join( output_dir, 'runners.html' ) + ) + + shutil.copyfile( + xsl_path( 'html/master.css', v2 ) + , os.path.join( output_dir, 'master.css' ) + ) + + +def build_xsl_reports( + locate_root_dir + , tag + , expected_results_file + , failures_markup_file + , comment_file + , results_dir + , result_file_prefix + , dont_collect_logs = 0 + , reports = report_types + , v2 = 0 + , user = None + , upload = False + ): + + ( run_date ) = time.strftime( '%Y-%m-%dT%H:%M:%SZ', time.gmtime() ) + + test_results_file = os.path.join( results_dir, 'test_results.xml' ) + bin_boost_dir = os.path.join( locate_root_dir, 'bin', 'boost' ) + + if v2: + import merger + merger.merge_logs( + tag + , user + , results_dir + , test_results_file + , dont_collect_logs + ) + else: + utils.log( ' dont_collect_logs: %s' % dont_collect_logs ) + if not dont_collect_logs: + f = open( test_results_file, 'w+' ) + f.write( '<tests>\n' ) + runner.collect_test_logs( [ bin_boost_dir ], f ) + f.write( '</tests>\n' ) + f.close() + + make_result_pages( + test_results_file + , expected_results_file + , failures_markup_file + , tag + , run_date + , comment_file + , results_dir + , result_file_prefix + , reports + , v2 + ) + + if v2 and upload: + upload_dir = 'regression-logs/' + utils.log( 'Uploading v2 results into "%s" [connecting as %s]...' % ( upload_dir, user ) ) + + archive_name = '%s.tar.gz' % result_file_prefix + utils.tar( + os.path.join( results_dir, result_file_prefix ) + , archive_name + ) + + utils.sourceforge.upload( os.path.join( results_dir, archive_name ), upload_dir, user ) + utils.sourceforge.untar( os.path.join( upload_dir, archive_name ), user, background = True ) + + +def accept_args( args ): + args_spec = [ + 'locate-root=' + , 'tag=' + , 'expected-results=' + , 'failures-markup=' + , 'comment=' + , 'results-dir=' + , 'results-prefix=' + , 'dont-collect-logs' + , 'reports=' + , 'v2' + , 'user=' + , 'upload' + , 'help' + ] + + options = { + '--comment': '' + , '--expected-results': '' + , '--failures-markup': '' + , '--reports': string.join( report_types, ',' ) + , '--tag': None + , '--user': None + , 'upload': False + } + + utils.accept_args( args_spec, args, options, usage ) + if not options.has_key( '--results-dir' ): + options[ '--results-dir' ] = options[ '--locate-root' ] + + if not options.has_key( '--results-prefix' ): + if options.has_key( '--v2' ): + options[ '--results-prefix' ] = 'all' + else: + options[ '--results-prefix' ] = '' + + return ( + options[ '--locate-root' ] + , options[ '--tag' ] + , options[ '--expected-results' ] + , options[ '--failures-markup' ] + , options[ '--comment' ] + , options[ '--results-dir' ] + , options[ '--results-prefix' ] + , options.has_key( '--dont-collect-logs' ) + , options[ '--reports' ].split( ',' ) + , options.has_key( '--v2' ) + , options[ '--user' ] + , options.has_key( '--upload' ) + ) + + +def usage(): + print 'Usage: %s [options]' % os.path.basename( sys.argv[0] ) + print ''' +\t--locate-root the same as --locate-root in compiler_status +\t--tag the tag for the results (i.e. 'CVS-HEAD') +\t--expected-results the file with the results to be compared with +\t the current run +\t--failures-markup the file with the failures markup +\t--comment an html comment file (will be inserted in the reports) +\t--results-dir the directory containing -links.html, -fail.html +\t files produced by compiler_status (by default the +\t same as specified in --locate-root) +\t--results-prefix the prefix of -links.html, -fail.html +\t files produced by compiler_status +\t--v2 v2 reports (combine multiple runners results into a +\t single set of reports) + +The following options are valid only for v2 reports: + +\t--user SourceForge user name for a shell account +\t--upload upload v2 reports to SourceForge + +The following options are useful in debugging: + +\t--dont-collect-logs dont collect the test logs +\t--reports produce only the specified reports +\t us - user summary +\t ds - developer summary +\t ud - user detailed +\t dd - developer detailed +\t l - links +\t p - patches +\t x - extended results file +\t i - issues +''' + +def main(): + build_xsl_reports( *accept_args( sys.argv[ 1 : ] ) ) + +if __name__ == '__main__': + main() |