#!/usr/bin/env python

import codecs, httplib, json, optparse, os, urllib, shutil, subprocess, sys

output_html_file = 'systrace_trace_viewer.html'

upstream_git = 'https://github.com/google/trace-viewer.git'

script_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
trace_viewer_dir = os.path.join(script_dir, 'trace-viewer')

parser = optparse.OptionParser()
parser.add_option('--local', dest='local_dir', metavar='DIR',
                  help='use a local trace-viewer')
parser.add_option('--no-min', dest='no_min', default=False, action='store_true',
                  help='skip minification')
options, args = parser.parse_args()

# Update the source if needed.
if options.local_dir is None:
  # Remove the old source tree.
  shutil.rmtree(trace_viewer_dir, True)

  # Pull the latest source from the upstream git.
  git_args = ['git', 'clone', upstream_git, trace_viewer_dir]
  p = subprocess.Popen(git_args, stdout=subprocess.PIPE, cwd=script_dir)
  p.communicate()
  if p.wait() != 0:
    print 'Failed to checkout source from upstream git.'
    sys.exit(1)
  
  shutil.rmtree(os.path.join(trace_viewer_dir, '.git'), True)

  # Update the UPSTREAM_REVISION file
  git_args = ['git', 'rev-parse', 'HEAD']
  p = subprocess.Popen(git_args, stdout=subprocess.PIPE, cwd=trace_viewer_dir)
  out, err = p.communicate()
  if p.wait() != 0:
    print 'Failed to get revision.'
    sys.exit(1)

  rev = out.strip()
  with open('UPSTREAM_REVISION', 'wt') as f:
    f.write(rev + '\n')
else:
  trace_viewer_dir = options.local_dir


# Generate the vulcanized result.
build_dir = os.path.join(trace_viewer_dir)
sys.path.append(build_dir)

from trace_viewer.build import vulcanize_trace_viewer
with codecs.open(output_html_file, encoding='utf-8', mode='w') as f:
  vulcanize_trace_viewer.WriteTraceViewer(
      f,
      config_name='systrace',
      minify=(not options.no_min),
      output_html_head_and_body=False)
print 'Generated %s' % output_html_file
