Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 # Copyright 2017 The Chromium Authors. All rights reserved. | |
|
nednguyen
2017/03/24 20:12:37
Our convention is script has no .py tail. Also ple
| |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 import os | |
| 6 import shutil | |
| 7 import subprocess | |
| 8 import sys | |
| 9 import tempfile | |
| 10 import urllib2 | |
| 11 | |
| 12 | |
| 13 TEST_PAGES_LOCATION_BY_REPO = { | |
| 14 'test-pages': [ | |
| 15 'src/canvas-capture', | |
| 16 'src/multiple-peerconnections', | |
| 17 ], | |
| 18 'samples': [ | |
| 19 'src/content/datachannel/datatransfer', | |
| 20 'src/content/getusermedia/resolution', | |
| 21 'src/content/peerconnection/constraints', | |
| 22 'src/content/peerconnection/audio', | |
| 23 ], | |
| 24 } | |
| 25 | |
| 26 ADDED_SCRIPT_TAGS = ( | |
| 27 '<script src="%s.js"></script>\n' | |
| 28 '<script src="adapter.js"></script>\n' | |
| 29 '<script>function trace(arg) { console.log(arg); }</script>\n' | |
| 30 ) | |
| 31 | |
| 32 COPYRIGHT_NOTICE = [ | |
| 33 'Copyright 2017 The Chromium Authors. All rights reserved.\n', | |
| 34 'Use of this source code is governed by a BSD-style license that can be\n', | |
| 35 'found in the LICENSE file.\n', | |
| 36 ] | |
| 37 | |
| 38 JS_COPYRIGHT_NOTICE = ' * '.join(['/*\n'] + COPYRIGHT_NOTICE) + ' */\n' | |
| 39 HTML_COPYRIGHT_NOTICE = ' * '.join(['<!--\n'] + COPYRIGHT_NOTICE) + '-->\n' | |
| 40 | |
| 41 STRIPPED_TAGS = ['<meta', '<link', '<script'] | |
|
kjellander_chromium
2017/03/24 19:51:25
Do we really want to remove all <script> tags? It
ehmaldonado_chromium
2017/03/24 20:13:53
I tried to preserve the directory structure, but i
kjellander_chromium
2017/03/24 20:18:30
OK, if there's a limitation in how the files are s
| |
| 42 | |
| 43 WEBRTC_GITHUB_URL = 'https://github.com/webrtc/' | |
| 44 ADAPTER_LATEST_URL = 'https://webrtc.github.io/adapter/adapter-latest.js' | |
| 45 | |
| 46 | |
| 47 class TemporaryDirectory(object): | |
| 48 def __init__(self): | |
| 49 self._closed = False | |
| 50 self._name = None | |
| 51 self._name = tempfile.mkdtemp() | |
| 52 def __enter__(self): | |
| 53 return self._name | |
| 54 def __exit__(self, exc, value, tb): | |
| 55 if self._name and not self._closed: | |
| 56 shutil.rmtree(self._name) | |
| 57 self._closed = True | |
| 58 | |
| 59 | |
| 60 def CopyJSFile(origin, destination): | |
| 61 contents = [] | |
| 62 with open(origin) as input_file: | |
| 63 contents = input_file.readlines() | |
| 64 | |
| 65 contents = [JS_COPYRIGHT_NOTICE] + contents[8:] | |
|
kjellander_chromium
2017/03/24 19:51:25
I guess 8 comes from the WebRTC license header whi
ehmaldonado_chromium
2017/03/24 20:13:53
I could also try to delete the first (multiline) c
kjellander_chromium
2017/03/24 20:18:30
I think it should be, but no big deal since this i
| |
| 66 | |
| 67 with open(destination, 'w') as output_file: | |
| 68 output_file.writelines(contents) | |
| 69 | |
| 70 | |
| 71 def CopyHTMLFile(test_name, origin, destination): | |
| 72 contents = [] | |
| 73 with open(origin) as input_file: | |
| 74 for line in input_file: | |
| 75 if any(tag in line for tag in STRIPPED_TAGS): | |
|
kjellander_chromium
2017/03/24 19:51:25
This seems to assume each of the stripped tags are
ehmaldonado_chromium
2017/03/24 20:13:53
Will do.
| |
| 76 continue | |
| 77 if line.strip().startswith('</body>'): | |
| 78 contents.append(ADDED_SCRIPT_TAGS % test_name) | |
| 79 contents.append(line) | |
| 80 | |
| 81 contents = contents[:1] + [HTML_COPYRIGHT_NOTICE] + contents[8:] | |
| 82 | |
| 83 with open(destination, 'w') as output_file: | |
| 84 output_file.writelines(contents) | |
| 85 | |
| 86 | |
| 87 def main(): | |
| 88 output_dir = sys.argv[1] | |
| 89 | |
| 90 if not os.path.isdir(output_dir): | |
| 91 os.makedirs(output_dir) | |
| 92 | |
| 93 with TemporaryDirectory() as temp_dir: | |
| 94 for repo_name, test_dirs in TEST_PAGES_LOCATION_BY_REPO.items(): | |
| 95 p = subprocess.Popen(['git', 'clone', WEBRTC_GITHUB_URL + repo_name], | |
| 96 cwd=temp_dir) | |
| 97 p.wait() | |
|
kjellander_chromium
2017/03/24 19:51:25
How is the case when git clone fails handled? Does
ehmaldonado_chromium
2017/03/24 20:13:53
Yes. Git's output is printed to console.
kjellander_chromium
2017/03/24 20:18:30
That's fine then, since this will be run interacti
| |
| 98 | |
| 99 for test_dir in test_dirs: | |
| 100 test_dir = os.path.join(temp_dir, repo_name, test_dir) | |
| 101 test_name = os.path.basename(test_dir) | |
| 102 | |
| 103 CopyJSFile(os.path.join(test_dir, 'js', 'main.js'), | |
| 104 os.path.join(output_dir, test_name + '.js')) | |
| 105 CopyHTMLFile(test_name, os.path.join(test_dir, 'index.html'), | |
| 106 os.path.join(output_dir, test_name + '.html')) | |
| 107 | |
| 108 response = urllib2.urlopen(ADAPTER_LATEST_URL) | |
| 109 adapter_js_contents = JS_COPYRIGHT_NOTICE + response.read() | |
| 110 | |
| 111 with open(os.path.join(output_dir, 'adapter.js'), 'w') as output_file: | |
| 112 output_file.write(adapter_js_contents) | |
| 113 | |
|
kjellander_chromium
2017/03/24 19:51:25
+1 blank line
ehmaldonado_chromium
2017/03/24 20:13:53
Will do.
| |
| 114 if __name__ == '__main__': | |
| 115 main() | |
| OLD | NEW |