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