summaryrefslogtreecommitdiff
path: root/Tools/Scripts/webkitpy/tool/commands/rebaseline.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/Scripts/webkitpy/tool/commands/rebaseline.py')
-rw-r--r--Tools/Scripts/webkitpy/tool/commands/rebaseline.py62
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):