| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371 |
- # 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()
|