📄 boostbook_report.py
字号:
import ftplibimport optparseimport osimport timeimport urlparseimport utilsimport shutilimport sysimport zipfileimport xml.sax.saxutilsimport utils.libxsltdef get_date( words ): date = words[ 5: -1 ] t = time.localtime() month_names = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ] year = time.localtime()[0] # If year is not secified is it the current year month = month_names.index( date[0] ) + 1 day = int( date[1] ) hours = 0 minutes = 0 if date[2].find( ":" ) != -1: ( hours, minutes ) = [ int(x) for x in date[2].split( ":" ) ] else: # there is no way to get seconds for not current year dates year = int( date[2] ) return ( year, month, day, hours, minutes, 0, 0, 0, 0 )#def check_for_new_upload( target_dir, boostbook_info ):def accept_args( args ): parser = optparse.OptionParser() parser.add_option( '-t', '--tag', dest='tag', help="the tag for the results (i.e. 'RC_1_34_0')" ) parser.add_option( '-d', '--destination', dest='destination', help='destination directory' ) if len(args) == 0: parser.print_help() sys.exit( 1 ) (options, args) = parser.parse_args() if not options.destination: print '-d is required' parser.print_help() sys.exit( 1 ) return optionsdef unzip( archive_path, result_dir ): utils.log( 'Unpacking %s into %s' % ( archive_path, result_dir ) ) z = zipfile.ZipFile( archive_path, 'r', zipfile.ZIP_DEFLATED ) for f in z.infolist(): dir = os.path.join( result_dir, os.path.dirname( f.filename ) ) if not os.path.exists( dir ): os.makedirs( dir ) result = open( os.path.join( result_dir, f.filename ), 'wb' ) result.write( z.read( f.filename ) ) result.close() z.close()def boostbook_report( options ): site = 'fx.meta-comm.com' site_path = '/boost-regression/%s' % options.tag utils.log( 'Opening %s ...' % site ) f = ftplib.FTP( site ) f.login() utils.log( ' cd %s ...' % site_path ) f.cwd( site_path ) utils.log( ' dir' ) lines = [] f.dir( lambda x: lines.append( x ) ) word_lines = [ x.split( None, 8 ) for x in lines ] boostbook_info = [ ( l[-1], get_date( l ) ) for l in word_lines if l[-1] == "BoostBook.zip" ] if len( boostbook_info ) > 0: boostbook_info = boostbook_info[0] utils.log( 'BoostBook found! (%s)' % ( boostbook_info, ) ) local_copy = os.path.join( options.destination,'BoostBook-%s.zip' % options.tag ) if 1: if os.path.exists( local_copy ): utils.log( 'Local copy exists. Checking if it is older than uploaded one...' ) uploaded_mtime = time.mktime( boostbook_info[1] ) local_mtime = os.path.getmtime( local_copy ) utils.log( ' uploaded: %s %s, local: %s %s' % ( uploaded_mtime , boostbook_info[1] , local_mtime , time.localtime( local_mtime )) ) modtime = time.localtime( os.path.getmtime( local_copy ) ) if uploaded_mtime <= local_mtime: utils.log( 'Local copy is newer: exiting' ) sys.exit() if 1: temp = os.path.join( options.destination,'BoostBook.zip' ) result = open( temp, 'wb' ) f.retrbinary( 'RETR %s' % boostbook_info[0], result.write ) result.close() if os.path.exists( local_copy ): os.unlink( local_copy ) os.rename( temp, local_copy ) m = time.mktime( boostbook_info[1] ) os.utime( local_copy, ( m, m ) ) docs_name = os.path.splitext( os.path.basename( local_copy ) )[0] if 1: unpacked_docs_dir = os.path.join( options.destination, docs_name ) utils.log( 'Dir %s ' % unpacked_docs_dir ) if os.path.exists( unpacked_docs_dir ): utils.log( 'Cleaning up...' ) shutil.rmtree( unpacked_docs_dir ) os.makedirs( unpacked_docs_dir ) unzip( local_copy, unpacked_docs_dir ) utils.system( [ 'cd %s' % unpacked_docs_dir , 'tar -c -f ../%s.tar.gz -z --exclude=tarball *' % docs_name ] ) process_boostbook_build_log( os.path.join( unpacked_docs_dir, 'boostbook.log' ), read_timestamp( unpacked_docs_dir ) ) utils.libxslt( log , os.path.abspath( os.path.join( unpacked_docs_dir, 'boostbook.log.xml' ) ) , os.path.abspath( os.path.join( os.path.dirname( __file__ ), 'xsl', 'v2', 'boostbook_log.xsl' ) ) , os.path.abspath( os.path.join( unpacked_docs_dir, 'boostbook.log.html' ) ) ) def log( msg ): print msg def process_boostbook_build_log( path, timestamp ): f = open( path + '.xml', 'w' ) g = xml.sax.saxutils.XMLGenerator( f ) lines = open( path ).read().splitlines() output_lines = [] result = 'success' for line in lines: type = 'output' if line.startswith( '...failed' ): type = 'failure' result='failure' if line.startswith( 'runtime error:' ): type = 'failure' if line.startswith( '...skipped' ): type = 'skipped' output_lines.append( ( type, line ) ) g.startDocument() g.startElement( 'build', { 'result': result, 'timestamp': timestamp } ) for line in output_lines: g.startElement( 'line', { 'type': line[0]} ) g.characters( line[1] ) g.endElement( 'line' ) g.endElement( 'build' ) g.endDocument() def read_timestamp( docs_directory ): f = open( os.path.join( docs_directory, 'timestamp' ) ) try: return f.readline() finally: f.close() def main(): options = accept_args( sys.argv[1:]) boostbook_report( options )if __name__ == '__main__': main()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -