1b122baf563564a1d478804fb882fcba242a9949eChris Craik#!/usr/bin/env python 2d1270ce027b82d14c215719b236b3fe37695827eJamie Gennis 3b122baf563564a1d478804fb882fcba242a9949eChris Craikimport codecs, httplib, json, optparse, os, urllib, shutil, subprocess, sys 4d1270ce027b82d14c215719b236b3fe37695827eJamie Gennis 5b122baf563564a1d478804fb882fcba242a9949eChris Craikoutput_html_file = 'systrace_trace_viewer.html' 6d1270ce027b82d14c215719b236b3fe37695827eJamie Gennis 7b122baf563564a1d478804fb882fcba242a9949eChris Craikupstream_git = 'https://github.com/google/trace-viewer.git' 82da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 92da489cd246702bee5938545b18a6f710ed214bcJamie Gennisscript_dir = os.path.dirname(os.path.abspath(sys.argv[0])) 102da489cd246702bee5938545b18a6f710ed214bcJamie Gennistrace_viewer_dir = os.path.join(script_dir, 'trace-viewer') 112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 126907377c1209c22a89bd1fdb8700e49b6a80d9c0Jamie Gennisparser = optparse.OptionParser() 136907377c1209c22a89bd1fdb8700e49b6a80d9c0Jamie Gennisparser.add_option('--local', dest='local_dir', metavar='DIR', 146907377c1209c22a89bd1fdb8700e49b6a80d9c0Jamie Gennis help='use a local trace-viewer') 156907377c1209c22a89bd1fdb8700e49b6a80d9c0Jamie Gennisparser.add_option('--no-min', dest='no_min', default=False, action='store_true', 166907377c1209c22a89bd1fdb8700e49b6a80d9c0Jamie Gennis help='skip minification') 176907377c1209c22a89bd1fdb8700e49b6a80d9c0Jamie Gennisoptions, args = parser.parse_args() 186907377c1209c22a89bd1fdb8700e49b6a80d9c0Jamie Gennis 19b122baf563564a1d478804fb882fcba242a9949eChris Craik# Update the source if needed. 206907377c1209c22a89bd1fdb8700e49b6a80d9c0Jamie Gennisif options.local_dir is None: 21b122baf563564a1d478804fb882fcba242a9949eChris Craik # Remove the old source tree. 226907377c1209c22a89bd1fdb8700e49b6a80d9c0Jamie Gennis shutil.rmtree(trace_viewer_dir, True) 236907377c1209c22a89bd1fdb8700e49b6a80d9c0Jamie Gennis 24beca7ae1f35e7f6605f4a21b5f4edeaa72000e39Chris Craik # Pull the latest source from the upstream git. 25b122baf563564a1d478804fb882fcba242a9949eChris Craik git_args = ['git', 'clone', upstream_git, trace_viewer_dir] 26b122baf563564a1d478804fb882fcba242a9949eChris Craik p = subprocess.Popen(git_args, stdout=subprocess.PIPE, cwd=script_dir) 27b122baf563564a1d478804fb882fcba242a9949eChris Craik p.communicate() 28b122baf563564a1d478804fb882fcba242a9949eChris Craik if p.wait() != 0: 29b122baf563564a1d478804fb882fcba242a9949eChris Craik print 'Failed to checkout source from upstream git.' 306907377c1209c22a89bd1fdb8700e49b6a80d9c0Jamie Gennis sys.exit(1) 316907377c1209c22a89bd1fdb8700e49b6a80d9c0Jamie Gennis 32ad0b04f54dab7c049e98abd97353bd46ce30294bChris Craik trace_viewer_git_dir = os.path.join(trace_viewer_dir, '.git') 336907377c1209c22a89bd1fdb8700e49b6a80d9c0Jamie Gennis # Update the UPSTREAM_REVISION file 34b122baf563564a1d478804fb882fcba242a9949eChris Craik git_args = ['git', 'rev-parse', 'HEAD'] 35ad0b04f54dab7c049e98abd97353bd46ce30294bChris Craik p = subprocess.Popen(git_args, 36ad0b04f54dab7c049e98abd97353bd46ce30294bChris Craik stdout=subprocess.PIPE, 37ad0b04f54dab7c049e98abd97353bd46ce30294bChris Craik cwd=trace_viewer_dir, 38ad0b04f54dab7c049e98abd97353bd46ce30294bChris Craik env={"GIT_DIR":trace_viewer_git_dir}) 39b122baf563564a1d478804fb882fcba242a9949eChris Craik out, err = p.communicate() 40b122baf563564a1d478804fb882fcba242a9949eChris Craik if p.wait() != 0: 41b122baf563564a1d478804fb882fcba242a9949eChris Craik print 'Failed to get revision.' 426907377c1209c22a89bd1fdb8700e49b6a80d9c0Jamie Gennis sys.exit(1) 436907377c1209c22a89bd1fdb8700e49b6a80d9c0Jamie Gennis 44ad0b04f54dab7c049e98abd97353bd46ce30294bChris Craik shutil.rmtree(trace_viewer_git_dir, True) 45ad0b04f54dab7c049e98abd97353bd46ce30294bChris Craik 46b122baf563564a1d478804fb882fcba242a9949eChris Craik rev = out.strip() 47b122baf563564a1d478804fb882fcba242a9949eChris Craik with open('UPSTREAM_REVISION', 'wt') as f: 48b122baf563564a1d478804fb882fcba242a9949eChris Craik f.write(rev + '\n') 49b122baf563564a1d478804fb882fcba242a9949eChris Craikelse: 50b122baf563564a1d478804fb882fcba242a9949eChris Craik trace_viewer_dir = options.local_dir 516907377c1209c22a89bd1fdb8700e49b6a80d9c0Jamie Gennis 526907377c1209c22a89bd1fdb8700e49b6a80d9c0Jamie Gennis 53b122baf563564a1d478804fb882fcba242a9949eChris Craik# Generate the vulcanized result. 54b122baf563564a1d478804fb882fcba242a9949eChris Craikbuild_dir = os.path.join(trace_viewer_dir) 55b122baf563564a1d478804fb882fcba242a9949eChris Craiksys.path.append(build_dir) 566907377c1209c22a89bd1fdb8700e49b6a80d9c0Jamie Gennis 57b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikfrom tracing.build import vulcanize_trace_viewer 58b122baf563564a1d478804fb882fcba242a9949eChris Craikwith codecs.open(output_html_file, encoding='utf-8', mode='w') as f: 59b122baf563564a1d478804fb882fcba242a9949eChris Craik vulcanize_trace_viewer.WriteTraceViewer( 60b122baf563564a1d478804fb882fcba242a9949eChris Craik f, 61b122baf563564a1d478804fb882fcba242a9949eChris Craik config_name='systrace', 62b122baf563564a1d478804fb882fcba242a9949eChris Craik minify=(not options.no_min), 63b122baf563564a1d478804fb882fcba242a9949eChris Craik output_html_head_and_body=False) 64b122baf563564a1d478804fb882fcba242a9949eChris Craikprint 'Generated %s' % output_html_file 65