| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 | 2 |
| 3 ''' | 3 ''' |
| 4 Copyright 2012 Google Inc. | 4 Copyright 2012 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 the given GM tests, on all bots and all configurations. | 11 Rebaselines the given GM tests, on all bots and all configurations. |
| 12 Must be run from the gm-expected directory. If run from a git or SVN | 12 Must be run from the gm-expected directory. If run from a git or SVN |
| 13 checkout, the files will be added to the staging area for commit. | 13 checkout, the files will be added to the staging area for commit. |
| 14 |
| 15 TODO(epoger): Fix indentation in this file (2-space indents, not 4-space). |
| 14 ''' | 16 ''' |
| 15 | 17 |
| 16 # System-level imports | 18 # System-level imports |
| 17 import argparse | 19 import argparse |
| 18 import os | 20 import os |
| 19 import re | 21 import re |
| 20 import sys | 22 import sys |
| 21 import urllib2 | 23 import urllib2 |
| 22 | 24 |
| 23 # Imports from local directory | 25 # Imports from local directory |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 actuals_base_url, actuals_filename, exception_handler, | 141 actuals_base_url, actuals_filename, exception_handler, |
| 140 tests=None, configs=None, add_new=False): | 142 tests=None, configs=None, add_new=False): |
| 141 self._expectations_root = expectations_root | 143 self._expectations_root = expectations_root |
| 142 self._expectations_filename = expectations_filename | 144 self._expectations_filename = expectations_filename |
| 143 self._tests = tests | 145 self._tests = tests |
| 144 self._configs = configs | 146 self._configs = configs |
| 145 self._actuals_base_url = actuals_base_url | 147 self._actuals_base_url = actuals_base_url |
| 146 self._actuals_filename = actuals_filename | 148 self._actuals_filename = actuals_filename |
| 147 self._exception_handler = exception_handler | 149 self._exception_handler = exception_handler |
| 148 self._add_new = add_new | 150 self._add_new = add_new |
| 149 self._testname_pattern = re.compile('(\S+)_(\S+).png') | 151 self._image_filename_re = re.compile(gm_json.IMAGE_FILENAME_PATTERN) |
| 150 | 152 |
| 151 # Returns the full contents of filepath, as a single string. | 153 # Returns the full contents of filepath, as a single string. |
| 152 # If filepath looks like a URL, try to read it that way instead of as | 154 # If filepath looks like a URL, try to read it that way instead of as |
| 153 # a path on local storage. | 155 # a path on local storage. |
| 154 # | 156 # |
| 155 # Raises _InternalException if there is a problem. | 157 # Raises _InternalException if there is a problem. |
| 156 def _GetFileContents(self, filepath): | 158 def _GetFileContents(self, filepath): |
| 157 if filepath.startswith('http:') or filepath.startswith('https:'): | 159 if filepath.startswith('http:') or filepath.startswith('https:'): |
| 158 try: | 160 try: |
| 159 return urllib2.urlopen(filepath).read() | 161 return urllib2.urlopen(filepath).read() |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 # Read in current expectations. | 225 # Read in current expectations. |
| 224 expectations_json_filepath = os.path.join( | 226 expectations_json_filepath = os.path.join( |
| 225 self._expectations_root, subdir, self._expectations_filename) | 227 self._expectations_root, subdir, self._expectations_filename) |
| 226 expectations_dict = gm_json.LoadFromFile(expectations_json_filepath) | 228 expectations_dict = gm_json.LoadFromFile(expectations_json_filepath) |
| 227 | 229 |
| 228 # Update the expectations in memory, skipping any tests/configs that | 230 # Update the expectations in memory, skipping any tests/configs that |
| 229 # the caller asked to exclude. | 231 # the caller asked to exclude. |
| 230 skipped_images = [] | 232 skipped_images = [] |
| 231 if results_to_update: | 233 if results_to_update: |
| 232 for (image_name, image_results) in results_to_update.iteritems(): | 234 for (image_name, image_results) in results_to_update.iteritems(): |
| 233 (test, config) = self._testname_pattern.match(image_name).groups
() | 235 (test, config) = \ |
| 236 self._image_filename_re.match(image_name).groups() |
| 234 if self._tests: | 237 if self._tests: |
| 235 if test not in self._tests: | 238 if test not in self._tests: |
| 236 skipped_images.append(image_name) | 239 skipped_images.append(image_name) |
| 237 continue | 240 continue |
| 238 if self._configs: | 241 if self._configs: |
| 239 if config not in self._configs: | 242 if config not in self._configs: |
| 240 skipped_images.append(image_name) | 243 skipped_images.append(image_name) |
| 241 continue | 244 continue |
| 242 expectations_dict[gm_json.JSONKEY_EXPECTEDRESULTS] \ | 245 expectations_dict \ |
| 243 [image_name] \ | 246 [gm_json.JSONKEY_EXPECTEDRESULTS] \ |
| 244 [gm_json.JSONKEY_EXPECTEDRESULTS_ALLOWEDDIGESTS
] = \ | 247 [image_name] \ |
| 245 [image_results] | 248 [gm_json.JSONKEY_EXPECTEDRESULTS_ALLOWEDDIGESTS] = \ |
| 249 [image_results] |
| 246 | 250 |
| 247 # Write out updated expectations. | 251 # Write out updated expectations. |
| 248 gm_json.WriteToFile(expectations_dict, expectations_json_filepath) | 252 gm_json.WriteToFile(expectations_dict, expectations_json_filepath) |
| 249 | 253 |
| 250 | 254 |
| 251 # main... | 255 # main... |
| 252 | 256 |
| 253 parser = argparse.ArgumentParser() | 257 parser = argparse.ArgumentParser() |
| 254 parser.add_argument('--actuals-base-url', | 258 parser.add_argument('--actuals-base-url', |
| 255 help='base URL from which to read files containing JSON ' + | 259 help='base URL from which to read files containing JSON ' + |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 exception_handler=exception_handler, | 356 exception_handler=exception_handler, |
| 353 add_new=args.add_new, | 357 add_new=args.add_new, |
| 354 missing_json_is_fatal=missing_json_is_fatal) | 358 missing_json_is_fatal=missing_json_is_fatal) |
| 355 | 359 |
| 356 try: | 360 try: |
| 357 rebaseliner.RebaselineSubdir(subdir=subdir, builder=builder) | 361 rebaseliner.RebaselineSubdir(subdir=subdir, builder=builder) |
| 358 except BaseException as e: | 362 except BaseException as e: |
| 359 exception_handler.RaiseExceptionOrContinue(e) | 363 exception_handler.RaiseExceptionOrContinue(e) |
| 360 | 364 |
| 361 exception_handler.ReportAllFailures() | 365 exception_handler.ReportAllFailures() |
| OLD | NEW |