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

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: sync_to_r10112 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
« no previous file with comments | « tools/rebaseline.py ('k') | tools/svndiff.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/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 '''
11 Rebaselines GM test results as individual image files 11 Rebaselines GM test results as individual image files
12 (the "old way", before https://goto.google.com/ChecksumTransitionDetail ). 12 (the "old way", before https://goto.google.com/ChecksumTransitionDetail ).
13 13
14 Once we have switched our expectations to JSON form for all platforms, 14 Once we have switched our expectations to JSON form for all platforms,
15 we can delete this file. 15 we can delete this file.
16 16
17 There is a lot of code duplicated between here and rebaseline.py, but 17 There is a lot of code duplicated between here and rebaseline.py, but
18 that's fine because we will delete this file soon. 18 that's fine because we will delete this file soon.
19
20 TODO(epoger): Fix indentation in this file (2-space indents, not 4-space).
19 ''' 21 '''
20 22
21 # System-level imports 23 # System-level imports
22 import os 24 import os
23 import re 25 import re
24 import subprocess 26 import subprocess
25 import sys 27 import sys
26 import urllib2 28 import urllib2
27 29
28 # Imports from within Skia 30 # Imports from within Skia
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 add_new=False, missing_json_is_fatal=False): 72 add_new=False, missing_json_is_fatal=False):
71 self._expectations_root = expectations_root 73 self._expectations_root = expectations_root
72 self._tests = tests 74 self._tests = tests
73 self._configs = configs 75 self._configs = configs
74 self._json_base_url = json_base_url 76 self._json_base_url = json_base_url
75 self._json_filename = json_filename 77 self._json_filename = json_filename
76 self._exception_handler = exception_handler 78 self._exception_handler = exception_handler
77 self._dry_run = dry_run 79 self._dry_run = dry_run
78 self._add_new = add_new 80 self._add_new = add_new
79 self._missing_json_is_fatal = missing_json_is_fatal 81 self._missing_json_is_fatal = missing_json_is_fatal
80 self._googlestorage_gm_actuals_root = ( 82 self._image_filename_re = re.compile(gm_json.IMAGE_FILENAME_PATTERN)
81 'http://chromium-skia-gm.commondatastorage.googleapis.com/gm')
82 self._testname_pattern = re.compile('(\S+)_(\S+).png')
83 self._is_svn_checkout = ( 83 self._is_svn_checkout = (
84 os.path.exists(os.path.join(expectations_root, '.svn')) or 84 os.path.exists(os.path.join(expectations_root, '.svn')) or
85 os.path.exists(os.path.join(expectations_root, os.pardir, '.svn'))) 85 os.path.exists(os.path.join(expectations_root, os.pardir, '.svn')))
86 self._is_git_checkout = ( 86 self._is_git_checkout = (
87 os.path.exists(os.path.join(expectations_root, '.git')) or 87 os.path.exists(os.path.join(expectations_root, '.git')) or
88 os.path.exists(os.path.join(expectations_root, os.pardir, '.git'))) 88 os.path.exists(os.path.join(expectations_root, os.pardir, '.git')))
89 89
90 # If dry_run is False, execute subprocess.call(cmd). 90 # If dry_run is False, execute subprocess.call(cmd).
91 # If dry_run is True, print the command we would have otherwise run. 91 # If dry_run is True, print the command we would have otherwise run.
92 # Raises a CommandFailedException if the command fails. 92 # Raises a CommandFailedException if the command fails.
93 def _Call(self, cmd): 93 def _Call(self, cmd):
94 if self._dry_run: 94 if self._dry_run:
95 print '%s' % ' '.join(cmd) 95 print '%s' % ' '.join(cmd)
96 return 96 return
97 if subprocess.call(cmd) != 0: 97 if subprocess.call(cmd) != 0:
98 raise CommandFailedException('error running command: ' + 98 raise CommandFailedException('error running command: ' +
99 ' '.join(cmd)) 99 ' '.join(cmd))
100 100
101 # Download a single actual result from GoogleStorage. 101 # Download a single actual result from GoogleStorage.
102 # Raises an exception if it fails. 102 # Raises an exception if it fails.
103 def _DownloadFromGoogleStorage(self, infilename, outfilename, all_results): 103 def _DownloadFromGoogleStorage(self, infilename, outfilename, all_results):
104 test_name = self._testname_pattern.match(infilename).group(1) 104 test_name = self._image_filename_re.match(infilename).group(1)
105 if not test_name: 105 if not test_name:
106 raise Exception('unable to find test_name for infilename %s' % 106 raise Exception('unable to find test_name for infilename %s' %
107 infilename) 107 infilename)
108 try: 108 try:
109 hash_type, hash_value = all_results[infilename] 109 hash_type, hash_value = all_results[infilename]
110 except KeyError: 110 except KeyError:
111 raise Exception('unable to find filename %s in all_results dict' % 111 raise Exception('unable to find filename %s in all_results dict' %
112 infilename) 112 infilename)
113 except ValueError as e: 113 except ValueError as e:
114 raise Exception( 114 raise Exception(
115 'ValueError reading filename %s from all_results dict: %s' % ( 115 'ValueError reading filename %s from all_results dict: %s' % (
116 infilename, e)) 116 infilename, e))
117 url = '%s/%s/%s/%s.png' % (self._googlestorage_gm_actuals_root, 117 url = gm_json.CreateGmActualUrl(
118 hash_type, test_name, hash_value) 118 test_name=test_name, hash_type=hash_type, hash_digest=hash_value)
119 try: 119 try:
120 self._DownloadFile(source_url=url, dest_filename=outfilename) 120 self._DownloadFile(source_url=url, dest_filename=outfilename)
121 except CommandFailedException: 121 except CommandFailedException:
122 raise Exception('Couldn\'t fetch gs_url %s as outfile %s' % ( 122 raise Exception('Couldn\'t fetch gs_url %s as outfile %s' % (
123 url, outfilename)) 123 url, outfilename))
124 124
125 # Download a single file, raising a CommandFailedException if it fails. 125 # Download a single file, raising a CommandFailedException if it fails.
126 def _DownloadFile(self, source_url, dest_filename): 126 def _DownloadFile(self, source_url, dest_filename):
127 # Download into a temporary file and then rename it afterwards, 127 # 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. 128 # so that we don't corrupt the existing file if it fails midway thru.
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 return 263 return
264 264
265 json_url = '/'.join([self._json_base_url, 265 json_url = '/'.join([self._json_base_url,
266 subdir, builder, subdir, 266 subdir, builder, subdir,
267 self._json_filename]) 267 self._json_filename])
268 all_results = self._GetActualResults(json_url=json_url) 268 all_results = self._GetActualResults(json_url=json_url)
269 filenames = self._GetFilesToRebaseline(json_url=json_url, 269 filenames = self._GetFilesToRebaseline(json_url=json_url,
270 add_new=self._add_new) 270 add_new=self._add_new)
271 skipped_files = [] 271 skipped_files = []
272 for filename in filenames: 272 for filename in filenames:
273 (test, config) = self._testname_pattern.match(filename).groups() 273 (test, config) = self._image_filename_re.match(filename).groups()
274 if self._tests: 274 if self._tests:
275 if test not in self._tests: 275 if test not in self._tests:
276 skipped_files.append(filename) 276 skipped_files.append(filename)
277 continue 277 continue
278 if self._configs: 278 if self._configs:
279 if config not in self._configs: 279 if config not in self._configs:
280 skipped_files.append(filename) 280 skipped_files.append(filename)
281 continue 281 continue
282 outfilename = os.path.join(self._expectations_root, subdir, 282 outfilename = os.path.join(self._expectations_root, subdir,
283 filename); 283 filename);
284 try: 284 try:
285 self._RebaselineOneFile(expectations_subdir=subdir, 285 self._RebaselineOneFile(expectations_subdir=subdir,
286 builder_name=builder, 286 builder_name=builder,
287 infilename=filename, 287 infilename=filename,
288 outfilename=outfilename, 288 outfilename=outfilename,
289 all_results=all_results) 289 all_results=all_results)
290 except BaseException as e: 290 except BaseException as e:
291 self._exception_handler.RaiseExceptionOrContinue(e) 291 self._exception_handler.RaiseExceptionOrContinue(e)
OLDNEW
« no previous file with comments | « tools/rebaseline.py ('k') | tools/svndiff.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698