| OLD | NEW | 
|---|
| 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  Loading... | 
| 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  Loading... | 
| 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) | 
| OLD | NEW | 
|---|