Jamie Gennis | 50dfd06 | 2012-05-22 16:29:02 -0700 | [diff] [blame] | 1 | #!/usr/bin/python2.6 |
Jamie Gennis | d1270ce | 2012-05-06 13:27:13 -0700 | [diff] [blame] | 2 | |
Jamie Gennis | 2da489c | 2012-09-19 18:06:29 -0700 | [diff] [blame^] | 3 | import httplib, json, os, urllib, shutil, subprocess, sys |
Jamie Gennis | d1270ce | 2012-05-06 13:27:13 -0700 | [diff] [blame] | 4 | |
Jamie Gennis | 2da489c | 2012-09-19 18:06:29 -0700 | [diff] [blame^] | 5 | minified_css_file = 'style.css' |
| 6 | minified_js_file = 'script.js' |
Jamie Gennis | d1270ce | 2012-05-06 13:27:13 -0700 | [diff] [blame] | 7 | |
Jamie Gennis | 2da489c | 2012-09-19 18:06:29 -0700 | [diff] [blame^] | 8 | upstream_svn = 'http://trace-viewer.googlecode.com/svn/trunk/' |
| 9 | |
| 10 | script_dir = os.path.dirname(os.path.abspath(sys.argv[0])) |
| 11 | trace_viewer_dir = os.path.join(script_dir, 'trace-viewer') |
| 12 | |
| 13 | # Remove the old source |
| 14 | shutil.rmtree(trace_viewer_dir, True) |
| 15 | |
| 16 | # Pull the latest source from the upstream svn |
| 17 | svn_co_args = ['svn', 'co', upstream_svn, trace_viewer_dir] |
| 18 | p = subprocess.Popen(svn_co_args, stdout=subprocess.PIPE) |
| 19 | svn_output = '' |
| 20 | while p.poll() is None: |
| 21 | svn_output += p.stdout.read() |
| 22 | if p.returncode != 0: |
| 23 | print 'Failed to checkout source from upstream svn.' |
| 24 | sys.exit(1) |
| 25 | |
| 26 | # Update the UPSTREAM_REVISION file |
| 27 | rev_str = svn_output.split('\n')[-2] |
| 28 | if not rev_str.startswith('Checked out revision '): |
| 29 | print 'Unrecognized revision string: %q' % rev_str |
| 30 | open('UPSTREAM_REVISION', 'wt').write(rev_str[21:-1] + '\n') |
| 31 | |
| 32 | # Generate the flattened JS and CSS |
| 33 | build_dir = os.path.join(trace_viewer_dir, 'build') |
| 34 | sys.path.append(build_dir) |
| 35 | gen = __import__('generate_standalone_timeline_view', {}, {}) |
| 36 | js_code = gen.generate_js() |
| 37 | css_code = gen.generate_css() |
Jamie Gennis | d1270ce | 2012-05-06 13:27:13 -0700 | [diff] [blame] | 38 | |
| 39 | # Define the parameters for the POST request and encode them in |
| 40 | # a URL-safe format. |
Jamie Gennis | 2da489c | 2012-09-19 18:06:29 -0700 | [diff] [blame^] | 41 | params = urllib.urlencode([ |
| 42 | ('js_code', js_code), |
Jamie Gennis | d1270ce | 2012-05-06 13:27:13 -0700 | [diff] [blame] | 43 | ('language', 'ECMASCRIPT5'), |
| 44 | ('compilation_level', 'SIMPLE_OPTIMIZATIONS'), |
Jamie Gennis | 50dfd06 | 2012-05-22 16:29:02 -0700 | [diff] [blame] | 45 | ('output_format', 'json'), |
| 46 | ('output_info', 'errors'), |
Jamie Gennis | d1270ce | 2012-05-06 13:27:13 -0700 | [diff] [blame] | 47 | ('output_info', 'compiled_code'), |
| 48 | ]) |
| 49 | |
| 50 | # Always use the following value for the Content-type header. |
| 51 | headers = { "Content-type": "application/x-www-form-urlencoded" } |
| 52 | conn = httplib.HTTPConnection('closure-compiler.appspot.com') |
| 53 | conn.request('POST', '/compile', params, headers) |
| 54 | response = conn.getresponse() |
| 55 | data = response.read() |
| 56 | conn.close |
| 57 | |
| 58 | if response.status != 200: |
| 59 | print sys.stderr, "error returned from JS compile service: %d" % response.status |
| 60 | sys.exit(1) |
| 61 | |
Jamie Gennis | 50dfd06 | 2012-05-22 16:29:02 -0700 | [diff] [blame] | 62 | result = json.loads(data) |
| 63 | if 'errors' in result: |
Jamie Gennis | 2da489c | 2012-09-19 18:06:29 -0700 | [diff] [blame^] | 64 | print 'Encountered error minifying Javascript. Writing intermediate code to flat_script.js' |
| 65 | open('flat_script.js', 'wt').write(js_code) |
Jamie Gennis | 50dfd06 | 2012-05-22 16:29:02 -0700 | [diff] [blame] | 66 | for e in result['errors']: |
| 67 | filenum = int(e['file'][6:]) |
Jamie Gennis | 2da489c | 2012-09-19 18:06:29 -0700 | [diff] [blame^] | 68 | filename = 'flat_script.js' |
Jamie Gennis | 50dfd06 | 2012-05-22 16:29:02 -0700 | [diff] [blame] | 69 | lineno = e['lineno'] |
| 70 | charno = e['charno'] |
| 71 | err = e['error'] |
| 72 | print '%s:%d:%d: %s' % (filename, lineno, charno, err) |
Jamie Gennis | 2da489c | 2012-09-19 18:06:29 -0700 | [diff] [blame^] | 73 | print 'Failed to generate %s.' % minified_js_file |
Jamie Gennis | 50dfd06 | 2012-05-22 16:29:02 -0700 | [diff] [blame] | 74 | sys.exit(1) |
| 75 | |
Jamie Gennis | 2da489c | 2012-09-19 18:06:29 -0700 | [diff] [blame^] | 76 | open(minified_js_file, 'wt').write(result['compiledCode'] + '\n') |
| 77 | print 'Generated %s' % minified_js_file |
Jamie Gennis | d1270ce | 2012-05-06 13:27:13 -0700 | [diff] [blame] | 78 | |
Jamie Gennis | 2da489c | 2012-09-19 18:06:29 -0700 | [diff] [blame^] | 79 | yuic_args = ['yui-compressor', '--type', 'css', '-o', minified_css_file] |
Jamie Gennis | d1270ce | 2012-05-06 13:27:13 -0700 | [diff] [blame] | 80 | p = subprocess.Popen(yuic_args, stdin=subprocess.PIPE) |
| 81 | p.communicate(input=css_code) |
| 82 | if p.wait() != 0: |
Jamie Gennis | 2da489c | 2012-09-19 18:06:29 -0700 | [diff] [blame^] | 83 | print 'Failed to generate %s.' % minified_css_file |
Jamie Gennis | d1270ce | 2012-05-06 13:27:13 -0700 | [diff] [blame] | 84 | sys.exit(1) |
| 85 | |
Jamie Gennis | 2da489c | 2012-09-19 18:06:29 -0700 | [diff] [blame^] | 86 | print 'Generated %s' % minified_css_file |