diff options
Diffstat (limited to 'Tools/Scripts/webkitpy/tool/commands/rebaseline.py')
-rw-r--r-- | Tools/Scripts/webkitpy/tool/commands/rebaseline.py | 62 |
1 files changed, 28 insertions, 34 deletions
diff --git a/Tools/Scripts/webkitpy/tool/commands/rebaseline.py b/Tools/Scripts/webkitpy/tool/commands/rebaseline.py index fc118949c..b375e8e05 100644 --- a/Tools/Scripts/webkitpy/tool/commands/rebaseline.py +++ b/Tools/Scripts/webkitpy/tool/commands/rebaseline.py @@ -38,7 +38,6 @@ from webkitpy.common.net.buildbot import BuildBot from webkitpy.common.net.layouttestresults import LayoutTestResults from webkitpy.common.system.executive import ScriptError from webkitpy.common.system.user import User -from webkitpy.common.system.zipfileset import ZipFileSet from webkitpy.layout_tests.controllers.test_result_writer import TestResultWriter from webkitpy.layout_tests.models import test_failures from webkitpy.layout_tests.models.test_configuration import TestConfiguration @@ -48,6 +47,7 @@ from webkitpy.tool.grammar import pluralize from webkitpy.tool.multicommandtool import AbstractDeclarativeCommand +# FIXME: Pull this from Port.baseline_extensions(). _baseline_suffix_list = ['png', 'wav', 'txt'] @@ -56,18 +56,24 @@ def _baseline_name(fs, test_name, suffix): return fs.splitext(test_name)[0] + TestResultWriter.FILENAME_SUFFIX_EXPECTED + "." + suffix -class RebaselineTest(AbstractDeclarativeCommand): +class AbstractRebaseliningCommand(AbstractDeclarativeCommand): + def __init__(self): + options = [ + optparse.make_option('--suffixes', default=','.join(_baseline_suffix_list), action='store', + help='file types to rebaseline')] + AbstractDeclarativeCommand.__init__(self, options=options) + self._baseline_suffix_list = _baseline_suffix_list + + +class RebaselineTest(AbstractRebaseliningCommand): name = "rebaseline-test" help_text = "Rebaseline a single test from a buildbot. (Currently works only with build.chromium.org buildbots.)" argument_names = "BUILDER_NAME TEST_NAME [PLATFORMS_TO_MOVE_EXISTING_BASELINES_TO]" - def __init__(self, options=None, **kwargs): - super(RebaselineTest, self).__init__(options, **kwargs) - self._zip_file_sets = {} - - def _results_zip_url(self, builder_name): + def _results_url(self, builder_name): # FIXME: Generalize this command to work with non-build.chromium.org builders. - return self._tool.chromium_buildbot().builder_with_name(builder_name).accumulated_results_url().replace('results/layout-test-results', 'layout-test-results.zip') + builder = self._tool.chromium_buildbot().builder_with_name(builder_name) + return builder.accumulated_results_url() def _baseline_directory(self, builder_name): port = self._tool.port_factory.get_from_builder_name(builder_name) @@ -133,42 +139,27 @@ class RebaselineTest(AbstractDeclarativeCommand): def _file_name_for_expected_result(self, test_name, suffix): return "%s-expected.%s" % (self._test_root(test_name), suffix) - def _zip_file_set(self, url): - return ZipFileSet(url) - - def _fetch_baseline(self, builder_name, test_name, suffix): - # FIXME: See https://bugs.webkit.org/show_bug.cgi?id=84762 ... fetching the whole - # zip file and then extracting individual results is much slower than just fetching - # the result directly from the buildbot, but it guarantees that we are getting correct results. - member_name = self._file_name_for_actual_result(test_name, suffix) - zip_url = self._results_zip_url(builder_name) - if not builder_name in self._zip_file_sets: - print "Retrieving " + zip_url - self._zip_file_sets[builder_name] = self._zip_file_set(zip_url) - - try: - data = self._zip_file_sets[builder_name].read('layout-test-results/' + member_name) - print " Found " + member_name - return data - except KeyError, e: - return None - def _rebaseline_test(self, builder_name, test_name, platforms_to_move_existing_baselines_to, suffix): + results_url = self._results_url(builder_name) baseline_directory = self._baseline_directory(builder_name) + source_baseline = "%s/%s" % (results_url, self._file_name_for_actual_result(test_name, suffix)) target_baseline = self._tool.filesystem.join(baseline_directory, self._file_name_for_expected_result(test_name, suffix)) if platforms_to_move_existing_baselines_to: self._copy_existing_baseline(platforms_to_move_existing_baselines_to, test_name, suffix) - self._save_baseline(self._fetch_baseline(builder_name, test_name, suffix), target_baseline) + print "Retrieving %s." % source_baseline + self._save_baseline(self._tool.web.get_binary(source_baseline, convert_404_to_None=True), target_baseline) def _rebaseline_test_and_update_expectations(self, builder_name, test_name, platforms_to_move_existing_baselines_to): - for suffix in _baseline_suffix_list: + for suffix in self._baseline_suffix_list: self._rebaseline_test(builder_name, test_name, platforms_to_move_existing_baselines_to, suffix) self._update_expectations_file(builder_name, test_name) def execute(self, options, args, tool): + self._baseline_suffix_list = options.suffixes.split(',') + if len(args) > 2: platforms_to_move_existing_baselines_to = args[2:] else: @@ -176,18 +167,19 @@ class RebaselineTest(AbstractDeclarativeCommand): self._rebaseline_test_and_update_expectations(args[0], args[1], platforms_to_move_existing_baselines_to) -class OptimizeBaselines(AbstractDeclarativeCommand): +class OptimizeBaselines(AbstractRebaseliningCommand): name = "optimize-baselines" help_text = "Reshuffles the baselines for the given tests to use as litte space on disk as possible." argument_names = "TEST_NAMES" def _optimize_baseline(self, test_name): - for suffix in _baseline_suffix_list: + for suffix in self._baseline_suffix_list: baseline_name = _baseline_name(self._tool.filesystem, test_name, suffix) if not self._baseline_optimizer.optimize(baseline_name): print "Hueristics failed to optimize %s" % baseline_name def execute(self, options, args, tool): + self._baseline_suffix_list = options.suffixes.split(',') self._baseline_optimizer = BaselineOptimizer(tool) self._port = tool.port_factory.get("chromium-win-win7") # FIXME: This should be selectable. @@ -196,7 +188,7 @@ class OptimizeBaselines(AbstractDeclarativeCommand): self._optimize_baseline(test_name) -class AnalyzeBaselines(AbstractDeclarativeCommand): +class AnalyzeBaselines(AbstractRebaseliningCommand): name = "analyze-baselines" help_text = "Analyzes the baselines for the given tests and prints results that are identical." argument_names = "TEST_NAMES" @@ -209,12 +201,13 @@ class AnalyzeBaselines(AbstractDeclarativeCommand): print ' '.join(results_names) def _analyze_baseline(self, test_name): - for suffix in _baseline_suffix_list: + for suffix in self._baseline_suffix_list: baseline_name = _baseline_name(self._tool.filesystem, test_name, suffix) directories_by_result = self._baseline_optimizer.directories_by_result(baseline_name) self._print(baseline_name, directories_by_result) def execute(self, options, args, tool): + self._baseline_suffix_list = options.suffixes.split(',') self._baseline_optimizer = BaselineOptimizer(tool) self._port = tool.port_factory.get("chromium-win-win7") # FIXME: This should be selectable. @@ -269,6 +262,7 @@ class RebaselineExpectations(AbstractDeclarativeCommand): for test_name in self._tests_to_rebaseline(self._tool.port_factory.get(port_name)): self._touched_test_names.add(test_name) print " %s" % test_name + # FIXME: need to extract the correct list of suffixes here. self._run_webkit_patch(['rebaseline-test', builder_name, test_name]) def execute(self, options, args, tool): |