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

Side by Side Diff: tools/rebaseline_imagefiles.py

Issue 18416005: rebaseline.py: error out early if --expectations-root not pointing at gm-expected dir (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: add_test_to_exercise_bad_dir_warning Created 7 years, 5 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 | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 2
3 ''' 3 '''
4 Copyright 2013 Google Inc. 4 Copyright 2013 Google Inc.
5 5
6 Use of this source code is governed by a BSD-style license that can be 6 Use of this source code is governed by a BSD-style license that can be
7 found in the LICENSE file. 7 found in the LICENSE file.
8 ''' 8 '''
9 9
10 ''' 10 '''
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 # If dry_run is True, print the command we would have otherwise run. 89 # If dry_run is True, print the command we would have otherwise run.
90 # Raises a CommandFailedException if the command fails. 90 # Raises a CommandFailedException if the command fails.
91 def _Call(self, cmd): 91 def _Call(self, cmd):
92 if self._dry_run: 92 if self._dry_run:
93 print '%s' % ' '.join(cmd) 93 print '%s' % ' '.join(cmd)
94 return 94 return
95 if subprocess.call(cmd) != 0: 95 if subprocess.call(cmd) != 0:
96 raise CommandFailedException('error running command: ' + 96 raise CommandFailedException('error running command: ' +
97 ' '.join(cmd)) 97 ' '.join(cmd))
98 98
99 # Download a single actual result from GoogleStorage, returning True if it 99 # Download a single actual result from GoogleStorage.
100 # succeeded. 100 # Raises an exception if it fails.
101 def _DownloadFromGoogleStorage(self, infilename, outfilename, all_results): 101 def _DownloadFromGoogleStorage(self, infilename, outfilename, all_results):
102 test_name = self._testname_pattern.match(infilename).group(1) 102 test_name = self._testname_pattern.match(infilename).group(1)
103 if not test_name: 103 if not test_name:
104 print '# unable to find test_name for infilename %s' % infilename 104 raise Exception('unable to find test_name for infilename %s' %
105 return False 105 infilename)
106 try: 106 try:
107 hash_type, hash_value = all_results[infilename] 107 hash_type, hash_value = all_results[infilename]
108 except KeyError: 108 except KeyError:
109 print ('# unable to find filename %s in all_results dict' % 109 raise Exception('unable to find filename %s in all_results dict' %
110 infilename) 110 infilename)
111 return False
112 except ValueError as e: 111 except ValueError as e:
113 print '# ValueError reading filename %s from all_results dict: %s'%( 112 raise Exception(
114 infilename, e) 113 'ValueError reading filename %s from all_results dict: %s' % (
115 return False 114 infilename, e))
116 url = '%s/%s/%s/%s.png' % (self._googlestorage_gm_actuals_root, 115 url = '%s/%s/%s/%s.png' % (self._googlestorage_gm_actuals_root,
117 hash_type, test_name, hash_value) 116 hash_type, test_name, hash_value)
118 try: 117 try:
119 self._DownloadFile(source_url=url, dest_filename=outfilename) 118 self._DownloadFile(source_url=url, dest_filename=outfilename)
120 return True
121 except CommandFailedException: 119 except CommandFailedException:
122 print '# Couldn\'t fetch gs_url %s' % url 120 raise Exception('Couldn\'t fetch gs_url %s as outfile %s' % (
123 return False 121 url, outfilename))
124 122
125 # Download a single file, raising a CommandFailedException if it fails. 123 # Download a single file, raising a CommandFailedException if it fails.
126 def _DownloadFile(self, source_url, dest_filename): 124 def _DownloadFile(self, source_url, dest_filename):
127 # Download into a temporary file and then rename it afterwards, 125 # Download into a temporary file and then rename it afterwards,
128 # so that we don't corrupt the existing file if it fails midway thru. 126 # so that we don't corrupt the existing file if it fails midway thru.
129 temp_filename = os.path.join(os.path.dirname(dest_filename), 127 temp_filename = os.path.join(os.path.dirname(dest_filename),
130 '.temp-' + os.path.basename(dest_filename)) 128 '.temp-' + os.path.basename(dest_filename))
131 129
132 # TODO(epoger): Replace calls to "curl"/"mv" (which will only work on 130 # TODO(epoger): Replace calls to "curl"/"mv" (which will only work on
133 # Unix) with a Python HTTP library (which should work cross-platform) 131 # Unix) with a Python HTTP library (which should work cross-platform)
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 print '#' 221 print '#'
224 return files_to_rebaseline 222 return files_to_rebaseline
225 223
226 # Rebaseline a single file. 224 # Rebaseline a single file.
227 def _RebaselineOneFile(self, expectations_subdir, builder_name, 225 def _RebaselineOneFile(self, expectations_subdir, builder_name,
228 infilename, outfilename, all_results): 226 infilename, outfilename, all_results):
229 if self._dry_run: 227 if self._dry_run:
230 print '' 228 print ''
231 print '# ' + infilename 229 print '# ' + infilename
232 230
233 # Download this result image from Google Storage; if that fails, 231 # Download this result image from Google Storage.
234 # raise an exception (because if actual-results.json told us that 232 # If it fails, an exception will be raised.
235 # a particular image version is available for download, we should 233 self._DownloadFromGoogleStorage(infilename=infilename,
236 # always be able to get it!) 234 outfilename=outfilename,
237 if not self._DownloadFromGoogleStorage(infilename=infilename, 235 all_results=all_results)
238 outfilename=outfilename,
239 all_results=all_results):
240 raise Exception('# Couldn\'t fetch infilename ' + infilename)
241 236
242 # Add this file to version control (if appropriate). 237 # Add this file to version control (if appropriate).
243 if self._add_new: 238 if self._add_new:
244 if self._is_svn_checkout: 239 if self._is_svn_checkout:
245 cmd = [ 'svn', 'add', '--quiet', outfilename ] 240 cmd = [ 'svn', 'add', '--quiet', outfilename ]
246 self._Call(cmd) 241 self._Call(cmd)
247 cmd = [ 'svn', 'propset', '--quiet', 'svn:mime-type', 242 cmd = [ 'svn', 'propset', '--quiet', 'svn:mime-type',
248 'image/png', outfilename ]; 243 'image/png', outfilename ];
249 self._Call(cmd) 244 self._Call(cmd)
250 elif self._is_git_checkout: 245 elif self._is_git_checkout:
251 cmd = [ 'git', 'add', outfilename ] 246 cmd = [ 'git', 'add', outfilename ]
252 self._Call(cmd) 247 self._Call(cmd)
253 248
254 # Rebaseline all tests/types we specified in the constructor, 249 # Rebaseline all tests/types we specified in the constructor,
255 # within this gm-expectations subdir. 250 # within this gm-expectations subdir.
256 # 251 #
257 # params: 252 # params:
258 # subdir : e.g. 'base-shuttle-win7-intel-float' 253 # subdir : e.g. 'base-shuttle-win7-intel-float'
259 # builder : e.g. 'Test-Win7-ShuttleA-HD2000-x86-Release' 254 # builder : e.g. 'Test-Win7-ShuttleA-HD2000-x86-Release'
260 def RebaselineSubdir(self, subdir, builder): 255 def RebaselineSubdir(self, subdir, builder):
256 if not os.path.isdir(os.path.join(self._expectations_root, subdir)):
257 raise Exception((
258 'Could not find "%s" subdir within expectations_root "%s". ' +
259 'Are you sure --expectations-root is pointing at a valid ' +
260 'gm-expected directory?') % (subdir, self._expectations_root))
261
261 json_url = '/'.join([self._json_base_url, 262 json_url = '/'.join([self._json_base_url,
262 subdir, builder, subdir, 263 subdir, builder, subdir,
263 self._json_filename]) 264 self._json_filename])
264 all_results = self._GetActualResults(json_url=json_url) 265 all_results = self._GetActualResults(json_url=json_url)
265 filenames = self._GetFilesToRebaseline(json_url=json_url, 266 filenames = self._GetFilesToRebaseline(json_url=json_url,
266 add_new=self._add_new) 267 add_new=self._add_new)
267 skipped_files = [] 268 skipped_files = []
268 for filename in filenames: 269 for filename in filenames:
269 (test, config) = self._testname_pattern.match(filename).groups() 270 (test, config) = self._testname_pattern.match(filename).groups()
270 if self._tests: 271 if self._tests:
271 if test not in self._tests: 272 if test not in self._tests:
272 skipped_files.append(filename) 273 skipped_files.append(filename)
273 continue 274 continue
274 if self._configs: 275 if self._configs:
275 if config not in self._configs: 276 if config not in self._configs:
276 skipped_files.append(filename) 277 skipped_files.append(filename)
277 continue 278 continue
278 outfilename = os.path.join(subdir, filename); 279 outfilename = os.path.join(self._expectations_root, subdir,
280 filename);
279 self._RebaselineOneFile(expectations_subdir=subdir, 281 self._RebaselineOneFile(expectations_subdir=subdir,
280 builder_name=builder, 282 builder_name=builder,
281 infilename=filename, 283 infilename=filename,
282 outfilename=outfilename, 284 outfilename=outfilename,
283 all_results=all_results) 285 all_results=all_results)
284
285 if skipped_files:
286 print ('Skipped these files due to test/config filters: %s' %
287 skipped_files)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698