| Index: Tools/Scripts/webkitpy/layout_tests/controllers/manager.py
|
| diff --git a/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py b/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py
|
| index b5d4cce27c8d5b33c1ca1a3a9811b38f2f6aa9d0..ee9b6f9adaacaed50cd5da5ac6743f2baf099c78 100644
|
| --- a/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py
|
| +++ b/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py
|
| @@ -155,30 +155,33 @@ class Manager(object):
|
| def _rename_results_folder(self):
|
| try:
|
| timestamp = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime(self._filesystem.mtime(self._filesystem.join(self._results_directory, "results.html"))))
|
| - except OSError, e:
|
| + except (IOError, OSError), e:
|
| # It might be possible that results.html was not generated in previous run, because the test
|
| # run was interrupted even before testing started. In those cases, don't archive the folder.
|
| # Simply override the current folder contents with new results.
|
| import errno
|
| - if e.errno == errno.EEXIST:
|
| + if e.errno == errno.EEXIST or e.errno == errno.ENOENT:
|
| _log.warning("No results.html file found in previous run, skipping it.")
|
| return None
|
| archived_name = ''.join((self._filesystem.basename(self._results_directory), "_", timestamp))
|
| archived_path = self._filesystem.join(self._filesystem.dirname(self._results_directory), archived_name)
|
| self._filesystem.move(self._results_directory, archived_path)
|
|
|
| - def _clobber_old_archived_results(self):
|
| + def _delete_dirs(self, dir_list):
|
| + for dir in dir_list:
|
| + self._filesystem.rmtree(dir)
|
| +
|
| + def _limit_archived_results_count(self):
|
| results_directory_path = self._filesystem.dirname(self._results_directory)
|
| file_list = self._filesystem.listdir(results_directory_path)
|
| results_directories = []
|
| for dir in file_list:
|
| file_path = self._filesystem.join(results_directory_path, dir)
|
| - if self._filesystem.isdir(file_path):
|
| + if self._filesystem.isdir(file_path) and self._results_directory in file_path:
|
| results_directories.append(file_path)
|
| results_directories.sort(key=lambda x: self._filesystem.mtime(x))
|
| - self._printer.write_update("Clobbering old archived results in %s" % results_directory_path)
|
| - for dir in results_directories[:-self.ARCHIVED_RESULTS_LIMIT]:
|
| - self._filesystem.rmtree(dir)
|
| + self._printer.write_update("Clobbering excess archived results in %s" % results_directory_path)
|
| + self._delete_dirs(results_directories[:-self.ARCHIVED_RESULTS_LIMIT])
|
|
|
| def _set_up_run(self, test_names):
|
| self._printer.write_update("Checking build ...")
|
| @@ -202,14 +205,12 @@ class Manager(object):
|
| self._port.stop_helper()
|
| return exit_code
|
|
|
| - if self._options.enable_versioned_results and self._filesystem.exists(self._results_directory):
|
| - if self._options.clobber_old_results:
|
| - _log.warning("Flag --enable_versioned_results overrides --clobber-old-results.")
|
| - self._clobber_old_archived_results()
|
| + if self._options.clobber_old_results:
|
| + self._clobber_old_results()
|
| + elif self._filesystem.exists(self._results_directory):
|
| + self._limit_archived_results_count()
|
| # Rename the existing results folder for archiving.
|
| self._rename_results_folder()
|
| - elif self._options.clobber_old_results:
|
| - self._clobber_old_results()
|
|
|
| # Create the output directory if it doesn't already exist.
|
| self._port.host.filesystem.maybe_make_directory(self._results_directory)
|
| @@ -395,16 +396,17 @@ class Manager(object):
|
| writer.write_crash_log(crash_log)
|
|
|
| def _clobber_old_results(self):
|
| - # Just clobber the actual test results directories since the other
|
| - # files in the results directory are explicitly used for cross-run
|
| - # tracking.
|
| - self._printer.write_update("Clobbering old results in %s" %
|
| - self._results_directory)
|
| - layout_tests_dir = self._port.layout_tests_dir()
|
| - possible_dirs = self._port.test_dirs()
|
| - for dirname in possible_dirs:
|
| - if self._filesystem.isdir(self._filesystem.join(layout_tests_dir, dirname)):
|
| - self._filesystem.rmtree(self._filesystem.join(self._results_directory, dirname))
|
| + dir_above_results_path = self._filesystem.dirname(self._results_directory)
|
| + self._printer.write_update("Clobbering old results in %s" % dir_above_results_path)
|
| + if not self._filesystem.exists(dir_above_results_path):
|
| + return
|
| + file_list = self._filesystem.listdir(dir_above_results_path)
|
| + results_directories = []
|
| + for dir in file_list:
|
| + file_path = self._filesystem.join(dir_above_results_path, dir)
|
| + if self._filesystem.isdir(file_path) and self._results_directory in file_path:
|
| + results_directories.append(file_path)
|
| + self._delete_dirs(results_directories)
|
|
|
| # Port specific clean-up.
|
| self._port.clobber_old_port_specific_results()
|
|
|