Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1368)

Side by Side Diff: chrome/browser/resources/vulcanize_gn.py

Issue 2915393002: vulcanize_gn.py: Stop writing twice to the declared GN output file. (Closed)
Patch Set: Fix Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/resources/vulcanize_gn_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2016 The Chromium Authors. All rights reserved. 2 # Copyright 2016 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import argparse 6 import argparse
7 import itertools 7 import itertools
8 import os 8 import os
9 import platform 9 import platform
10 import re 10 import re
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 151
152 # Grit includes are not supported, use HTML imports instead. 152 # Grit includes are not supported, use HTML imports instead.
153 output = output.replace('<include src="', '<include src-disabled="') 153 output = output.replace('<include src="', '<include src-disabled="')
154 154
155 if args.insert_in_head: 155 if args.insert_in_head:
156 assert '<head>' in output 156 assert '<head>' in output
157 # NOTE(dbeam): Vulcanize eats <base> tags after processing. This undoes 157 # NOTE(dbeam): Vulcanize eats <base> tags after processing. This undoes
158 # that by adding a <base> tag to the (post-processed) generated output. 158 # that by adding a <base> tag to the (post-processed) generated output.
159 output = output.replace('<head>', '<head>' + args.insert_in_head) 159 output = output.replace('<head>', '<head>' + args.insert_in_head)
160 160
161 with tempfile.NamedTemporaryFile(mode='wt+', delete=False) as tmp: 161 crisper_input = tempfile.NamedTemporaryFile(mode='wt+', delete=False)
162 tmp.write(output) 162 crisper_input.write(output)
163 crisper_input.close()
164
165 crisper_output = tempfile.NamedTemporaryFile(mode='wt+', delete=False)
166 crisper_output.close()
163 167
164 try: 168 try:
165 node.RunNode([node_modules.PathToCrisper(), 169 node.RunNode([node_modules.PathToCrisper(),
166 '--source', tmp.name, 170 '--source', crisper_input.name,
167 '--script-in-head', 'false', 171 '--script-in-head', 'false',
172 '--only-split',
168 '--html', html_out_path, 173 '--html', html_out_path,
169 '--js', js_out_path]) 174 '--js', crisper_output.name])
170 175
171 # Create an empty JS file if crisper did not create one. 176 # Crisper by default inserts a <script> tag with the name of the --js file,
172 if not os.path.isfile(js_out_path): 177 # but since we are using a temporary file, need to manually insert a
173 open(js_out_path, 'w').close() 178 # <script> tag with the correct final filename (in combination with
179 # --only-split flag). There is no way currently to manually specify the
180 # <script> tag's path, see https://github.com/PolymerLabs/crisper/issues/46.
181 with open(html_out_path, "r+") as f:
Dan Beam 2017/06/06 19:09:27 nit: rest of this file uses ' instead of "
dpapad 2017/06/06 19:30:46 Done.
182 data = f.read()
183 newData = data.replace(
Dan Beam 2017/06/06 19:09:27 python_vars_like_this
dpapad 2017/06/06 19:30:46 Done.
184 '</body></html>',
185 '<script src="' + args.js_out_file + '"></script></body></html>')
186 assert newData != data, 'Expected to find </body></html> token.'
187 f.seek(0)
188 f.write(newData)
189 f.truncate()
174 190
175 node.RunNode([node_modules.PathToUglifyJs(), js_out_path, 191 node.RunNode([node_modules.PathToUglifyJs(), crisper_output.name,
176 '--comments', '"/Copyright|license|LICENSE|\<\/?if/"', 192 '--comments', '"/Copyright|license|LICENSE|\<\/?if/"',
177 '--output', js_out_path]) 193 '--output', js_out_path])
178 finally: 194 finally:
179 os.remove(tmp.name) 195 if os.path.exists(crisper_input.name):
196 os.remove(crisper_input.name)
197 if os.path.exists(crisper_output.name):
198 os.remove(crisper_output.name)
180 199
181 200
182 def main(argv): 201 def main(argv):
183 parser = argparse.ArgumentParser() 202 parser = argparse.ArgumentParser()
184 parser.add_argument('--depfile', required=True) 203 parser.add_argument('--depfile', required=True)
185 parser.add_argument('--exclude', nargs='*') 204 parser.add_argument('--exclude', nargs='*')
186 parser.add_argument('--host', required=True) 205 parser.add_argument('--host', required=True)
187 parser.add_argument('--html_in_file', required=True) 206 parser.add_argument('--html_in_file', required=True)
188 parser.add_argument('--html_out_file', required=True) 207 parser.add_argument('--html_out_file', required=True)
189 parser.add_argument('--input', required=True) 208 parser.add_argument('--input', required=True)
190 parser.add_argument('--insert_in_head') 209 parser.add_argument('--insert_in_head')
191 parser.add_argument('--js_out_file', required=True) 210 parser.add_argument('--js_out_file', required=True)
192 parser.add_argument('--out_folder', required=True) 211 parser.add_argument('--out_folder', required=True)
193 args = parser.parse_args(argv) 212 args = parser.parse_args(argv)
194 213
195 # NOTE(dbeam): on Windows, GN can send dirs/like/this. When joined, you might 214 # NOTE(dbeam): on Windows, GN can send dirs/like/this. When joined, you might
196 # get dirs/like/this\file.txt. This looks odd to windows. Normalize to right 215 # get dirs/like/this\file.txt. This looks odd to windows. Normalize to right
197 # the slashes. 216 # the slashes.
198 args.depfile = os.path.normpath(args.depfile) 217 args.depfile = os.path.normpath(args.depfile)
199 args.input = os.path.normpath(args.input) 218 args.input = os.path.normpath(args.input)
200 args.out_folder = os.path.normpath(args.out_folder) 219 args.out_folder = os.path.normpath(args.out_folder)
201 220
202 _vulcanize(args.input, args) 221 _vulcanize(args.input, args)
203 _update_dep_file(args.input, args) 222 _update_dep_file(args.input, args)
204 223
205 224
206 if __name__ == '__main__': 225 if __name__ == '__main__':
207 main(sys.argv[1:]) 226 main(sys.argv[1:])
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/resources/vulcanize_gn_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698