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

Side by Side Diff: tools/rebaseline_imagefiles.py

Issue 19112002: svndiff.py: add ability to compare before-and-after JSON files, not just raw images (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: add_CreateGmActualURL 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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 tests=None, configs=None, dry_run=False, 68 tests=None, configs=None, dry_run=False,
69 add_new=False, missing_json_is_fatal=False): 69 add_new=False, missing_json_is_fatal=False):
70 self._expectations_root = expectations_root 70 self._expectations_root = expectations_root
71 self._tests = tests 71 self._tests = tests
72 self._configs = configs 72 self._configs = configs
73 self._json_base_url = json_base_url 73 self._json_base_url = json_base_url
74 self._json_filename = json_filename 74 self._json_filename = json_filename
75 self._dry_run = dry_run 75 self._dry_run = dry_run
76 self._add_new = add_new 76 self._add_new = add_new
77 self._missing_json_is_fatal = missing_json_is_fatal 77 self._missing_json_is_fatal = missing_json_is_fatal
78 self._googlestorage_gm_actuals_root = ( 78 self._image_filename_re = re.compile(gm_json.IMAGE_FILENAME_PATTERN)
79 'http://chromium-skia-gm.commondatastorage.googleapis.com/gm')
80 self._testname_pattern = re.compile('(\S+)_(\S+).png')
81 self._is_svn_checkout = ( 79 self._is_svn_checkout = (
82 os.path.exists(os.path.join(expectations_root, '.svn')) or 80 os.path.exists(os.path.join(expectations_root, '.svn')) or
83 os.path.exists(os.path.join(expectations_root, os.pardir, '.svn'))) 81 os.path.exists(os.path.join(expectations_root, os.pardir, '.svn')))
84 self._is_git_checkout = ( 82 self._is_git_checkout = (
85 os.path.exists(os.path.join(expectations_root, '.git')) or 83 os.path.exists(os.path.join(expectations_root, '.git')) or
86 os.path.exists(os.path.join(expectations_root, os.pardir, '.git'))) 84 os.path.exists(os.path.join(expectations_root, os.pardir, '.git')))
87 85
88 # If dry_run is False, execute subprocess.call(cmd). 86 # If dry_run is False, execute subprocess.call(cmd).
89 # If dry_run is True, print the command we would have otherwise run. 87 # If dry_run is True, print the command we would have otherwise run.
90 # Raises a CommandFailedException if the command fails. 88 # Raises a CommandFailedException if the command fails.
91 def _Call(self, cmd): 89 def _Call(self, cmd):
92 if self._dry_run: 90 if self._dry_run:
93 print '%s' % ' '.join(cmd) 91 print '%s' % ' '.join(cmd)
94 return 92 return
95 if subprocess.call(cmd) != 0: 93 if subprocess.call(cmd) != 0:
96 raise CommandFailedException('error running command: ' + 94 raise CommandFailedException('error running command: ' +
97 ' '.join(cmd)) 95 ' '.join(cmd))
98 96
99 # Download a single actual result from GoogleStorage. 97 # Download a single actual result from GoogleStorage.
100 # Raises an exception if it fails. 98 # Raises an exception if it fails.
101 def _DownloadFromGoogleStorage(self, infilename, outfilename, all_results): 99 def _DownloadFromGoogleStorage(self, infilename, outfilename, all_results):
102 test_name = self._testname_pattern.match(infilename).group(1) 100 test_name = self._image_filename_re.match(infilename).group(1)
103 if not test_name: 101 if not test_name:
104 raise Exception('unable to find test_name for infilename %s' % 102 raise Exception('unable to find test_name for infilename %s' %
105 infilename) 103 infilename)
106 try: 104 try:
107 hash_type, hash_value = all_results[infilename] 105 hash_type, hash_value = all_results[infilename]
108 except KeyError: 106 except KeyError:
109 raise Exception('unable to find filename %s in all_results dict' % 107 raise Exception('unable to find filename %s in all_results dict' %
110 infilename) 108 infilename)
111 except ValueError as e: 109 except ValueError as e:
112 raise Exception( 110 raise Exception(
113 'ValueError reading filename %s from all_results dict: %s' % ( 111 'ValueError reading filename %s from all_results dict: %s' % (
114 infilename, e)) 112 infilename, e))
115 url = '%s/%s/%s/%s.png' % (self._googlestorage_gm_actuals_root, 113 url = gm_json.CreateGmActualUrl(
116 hash_type, test_name, hash_value) 114 test_name=test_name, hash_type=hash_type, hash_digest=hash_value)
117 try: 115 try:
118 self._DownloadFile(source_url=url, dest_filename=outfilename) 116 self._DownloadFile(source_url=url, dest_filename=outfilename)
119 except CommandFailedException: 117 except CommandFailedException:
120 raise Exception('Couldn\'t fetch gs_url %s as outfile %s' % ( 118 raise Exception('Couldn\'t fetch gs_url %s as outfile %s' % (
121 url, outfilename)) 119 url, outfilename))
122 120
123 # Download a single file, raising a CommandFailedException if it fails. 121 # Download a single file, raising a CommandFailedException if it fails.
124 def _DownloadFile(self, source_url, dest_filename): 122 def _DownloadFile(self, source_url, dest_filename):
125 # Download into a temporary file and then rename it afterwards, 123 # Download into a temporary file and then rename it afterwards,
126 # so that we don't corrupt the existing file if it fails midway thru. 124 # so that we don't corrupt the existing file if it fails midway thru.
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 'gm-expected directory?') % (subdir, self._expectations_root)) 258 'gm-expected directory?') % (subdir, self._expectations_root))
261 259
262 json_url = '/'.join([self._json_base_url, 260 json_url = '/'.join([self._json_base_url,
263 subdir, builder, subdir, 261 subdir, builder, subdir,
264 self._json_filename]) 262 self._json_filename])
265 all_results = self._GetActualResults(json_url=json_url) 263 all_results = self._GetActualResults(json_url=json_url)
266 filenames = self._GetFilesToRebaseline(json_url=json_url, 264 filenames = self._GetFilesToRebaseline(json_url=json_url,
267 add_new=self._add_new) 265 add_new=self._add_new)
268 skipped_files = [] 266 skipped_files = []
269 for filename in filenames: 267 for filename in filenames:
270 (test, config) = self._testname_pattern.match(filename).groups() 268 (test, config) = self._image_filename_re.match(filename).groups()
271 if self._tests: 269 if self._tests:
272 if test not in self._tests: 270 if test not in self._tests:
273 skipped_files.append(filename) 271 skipped_files.append(filename)
274 continue 272 continue
275 if self._configs: 273 if self._configs:
276 if config not in self._configs: 274 if config not in self._configs:
277 skipped_files.append(filename) 275 skipped_files.append(filename)
278 continue 276 continue
279 outfilename = os.path.join(self._expectations_root, subdir, 277 outfilename = os.path.join(self._expectations_root, subdir,
280 filename); 278 filename);
281 # TODO(epoger): Until we resolve 279 # TODO(epoger): Until we resolve
282 # https://code.google.com/p/skia/issues/detail?id=1410 ('some GM 280 # https://code.google.com/p/skia/issues/detail?id=1410 ('some GM
283 # result images not available for download from Google Storage'), 281 # result images not available for download from Google Storage'),
284 # keep going in the face of missing results for any one test. 282 # keep going in the face of missing results for any one test.
285 try: 283 try:
286 self._RebaselineOneFile(expectations_subdir=subdir, 284 self._RebaselineOneFile(expectations_subdir=subdir,
287 builder_name=builder, 285 builder_name=builder,
288 infilename=filename, 286 infilename=filename,
289 outfilename=outfilename, 287 outfilename=outfilename,
290 all_results=all_results) 288 all_results=all_results)
291 except Exception as e: 289 except Exception as e:
292 print 'WARNING: swallowing exception %s' % e 290 print 'WARNING: swallowing exception %s' % e
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698