Changeset 90770 in webkit
- Timestamp:
- Jul 11, 2011, 11:51:13 AM (14 years ago)
- Location:
- trunk/Tools
- Files:
-
- 2 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r90762 r90770 1 2011-07-11 Adam Barth <abarth@webkit.org> 2 3 Add a webkit-patch command for rebaselining an individual test 4 https://bugs.webkit.org/show_bug.cgi?id=64246 5 6 Reviewed by Eric Seidel. 7 8 This patch introduces a command that's able to rebaseline a single 9 test. Currently, the command works only with the build.chromium.org 10 buildbots, but extending it to work with the build.webkit.org bots 11 shouldn't be that hard. 12 13 A complete rebaseling tool should also include an "optimize baselines" 14 command (which moves/deletes baselines in order to reduce the number of 15 expected results files), but that will come in a future patch. 16 17 Really BuilderToPort should be merged into builders.py, but I'm going 18 to save that for a future patch as well. (We need to stop shaving yaks 19 at some point.) 20 21 * Scripts/webkitpy/tool/commands/rebaseline.py: 22 1 23 2011-07-11 Adam Barth <abarth@webkit.org> 2 24 -
trunk/Tools/Scripts/webkitpy/common/host.py
r85768 r90770 32 32 from webkitpy.common.checkout.scm import default_scm 33 33 from webkitpy.common.config.ports import WebKitPort 34 from webkitpy.common.net import bugzilla, buildbot, statusserver 34 from webkitpy.common.net import bugzilla, buildbot, statusserver, web 35 35 from webkitpy.common.net.irc import ircproxy 36 36 from webkitpy.common.system import executive, filesystem, platforminfo, user, workspace … … 43 43 self.buildbot = buildbot.BuildBot() 44 44 self.executive = executive.Executive() 45 self.web = web.Web() 45 46 self._irc = None 46 47 self.filesystem = filesystem.FileSystem() -
trunk/Tools/Scripts/webkitpy/common/net/buildbot/buildbot.py
r90513 r90770 69 69 def results_url(self): 70 70 return "%s/results/%s" % (self._buildbot.buildbot_url, self.url_encoded_name()) 71 72 # In addition to per-build results, the build.chromium.org builders also 73 # keep a directory that accumulates test results over many runs. 74 def accumulated_results_url(self): 75 return None 71 76 72 77 def url_encoded_name(self): … … 281 286 282 287 class BuildBot(object): 283 def __init__(self, url=config_urls.buildbot_url): 284 self.buildbot_url = url 288 _builder_factory = Builder 289 _default_url = config_urls.buildbot_url 290 291 def __init__(self, url=None): 292 self.buildbot_url = url if url else self._default_url 285 293 self._builder_by_name = {} 286 294 … … 441 449 builder = self._builder_by_name.get(name) 442 450 if not builder: 443 builder = Builder(name, self)451 builder = self._builder_factory(name, self) 444 452 self._builder_by_name[name] = builder 445 453 return builder -
trunk/Tools/Scripts/webkitpy/layout_tests/port/builders.py
r89965 r90770 31 31 32 32 33 def _path_from_name(name): 34 return re.sub(r'[\s().]', '_', name) 33 def builder_path_from_name(builder_name): 34 return re.sub(r'[\s().]', '_', builder_name) 35 35 36 36 37 # Compiled manually from http://build.chromium.org/p/chromium/json/builders/help?as_text=1 … … 39 40 # FIXME Make the values in this map into lists. 40 41 CHROMIUM_PORT_TO_BUILDER_NAME = { 41 'chromium-gpu-linux': _path_from_name('Webkit Linux - GPU'),42 'chromium-gpu-linux': builder_path_from_name('Webkit Linux - GPU'), 42 43 43 'chromium-gpu-mac-snowleopard': _path_from_name('Webkit Mac10.6 - GPU'),44 'chromium-gpu-mac-leopard': _path_from_name('Webkit Mac10.5 - GPU'),44 'chromium-gpu-mac-snowleopard': builder_path_from_name('Webkit Mac10.6 - GPU'), 45 'chromium-gpu-mac-leopard': builder_path_from_name('Webkit Mac10.5 - GPU'), 45 46 46 'chromium-gpu-win-xp': _path_from_name('Webkit Win - GPU'),47 'chromium-gpu-win-vista': _path_from_name('Webkit Vista - GPU'),48 'chromium-gpu-win-win7': _path_from_name('Webkit Win7 - GPU'),47 'chromium-gpu-win-xp': builder_path_from_name('Webkit Win - GPU'), 48 'chromium-gpu-win-vista': builder_path_from_name('Webkit Vista - GPU'), 49 'chromium-gpu-win-win7': builder_path_from_name('Webkit Win7 - GPU'), 49 50 50 'chromium-linux-x86_64': _path_from_name('Linux Tests x64'),51 'chromium-linux-x86': _path_from_name('Linux Tests (dbg)(1)'),51 'chromium-linux-x86_64': builder_path_from_name('Linux Tests x64'), 52 'chromium-linux-x86': builder_path_from_name('Linux Tests (dbg)(1)'), 52 53 53 'chromium-mac-leopard': _path_from_name('Mac10.5 Tests (1)'),54 'chromium-mac-snowleopard': _path_from_name('Mac 10.6 Tests (dbg)(1)'),54 'chromium-mac-leopard': builder_path_from_name('Mac10.5 Tests (1)'), 55 'chromium-mac-snowleopard': builder_path_from_name('Mac 10.6 Tests (dbg)(1)'), 55 56 56 'chromium-win-xp': _path_from_name('XP Tests (dbg)(5)'),57 'chromium-win-vista': _path_from_name('Vista Tests (dbg)(1)'),57 'chromium-win-xp': builder_path_from_name('XP Tests (dbg)(5)'), 58 'chromium-win-vista': builder_path_from_name('Vista Tests (dbg)(1)'), 58 59 'chromium-win-win7': None, 59 60 -
trunk/Tools/Scripts/webkitpy/layout_tests/port/builders_unittest.py
r85040 r90770 39 39 } 40 40 for name, expected in tests.items(): 41 self.assertEquals(expected, builders. _path_from_name(name))41 self.assertEquals(expected, builders.builder_path_from_name(name)) 42 42 43 43 if __name__ == '__main__': -
trunk/Tools/Scripts/webkitpy/tool/commands/rebaseline.py
r90532 r90770 32 32 import urllib 33 33 34 import webkitpy.common.config.urls as config_urls 34 35 from webkitpy.common.net.buildbot import BuildBot 36 from webkitpy.common.net.buildbot.chromiumbuildbot import ChromiumBuildBot 35 37 from webkitpy.common.net.layouttestresults import LayoutTestResults 36 38 from webkitpy.common.system.user import User … … 41 43 42 44 43 # FIXME: I'm not sure where this logic should go in the end. 44 # For now it's here, until we have a second need for it. 45 # FIXME: This logic should be moved to builders.py. 45 46 class BuilderToPort(object): 46 47 _builder_name_to_port_name = { 48 # These builders are on build.webkit.org. 47 49 r"SnowLeopard": "mac-snowleopard", 48 50 r"Leopard": "mac-leopard", … … 53 55 r"Chromium Linux": "chromium-linux", 54 56 r"Chromium Win": "chromium-win", 57 58 # These builders are on build.chromium.org. 59 r"Webkit Win": "chromium-win-xp", 60 r"Webkit Vista": "chromium-win-vista", 61 r"Webkit Win7": "chromium-win-win7", 62 r"Webkit Win (dbg)(1)": "chromium-win-win7", # FIXME: Is this correct? 63 r"Webkit Win (dbg)(2)": "chromium-win-win7", # FIXME: Is this correct? 64 r"Webkit Linux": "chromium-linux-x86_64", 65 r"Webkit Linux 32": "chromium-linux-x86", 66 r"Webkit Linux (dbg)(1)": "chromium-linux-x86_64", 67 r"Webkit Linux (dbg)(2)": "chromium-linux-x86_64", 68 r"Webkit Mac10\.5": "chromium-mac-leopard", 69 r"Webkit Mac10\.5 (dbg)(1)": "chromium-mac-leopard", 70 r"Webkit Mac10\.5 (dbg)(2)": "chromium-mac-leopard", 71 r"Webkit Mac10\.6": "chromium-mac-snowleopard", 72 r"Webkit Mac10\.6 (dbg)": "chromium-mac-snowleopard", 55 73 } 56 74 … … 66 84 assert(port) # Need to update _builder_name_to_port_name 67 85 return port 86 87 88 class RebaselineTest(AbstractDeclarativeCommand): 89 name = "rebaseline-test" 90 help_text = "Rebaseline a single test from a buildbot. (Currently works only with build.chromium.org buildbots.)" 91 argument_names = "BUILDER_NAME TEST_NAME SUFFIX" 92 93 def _results_url(self, builder_name): 94 # FIXME: Generalize this command to work with non-build.chromium.org builders. 95 # FIXME: We should really get the buildbot from the tool! 96 builder = ChromiumBuildBot().builder_with_name(builder_name) 97 return builder.accumulated_results_url() 98 99 def _baseline_directory(self, builder_name): 100 port = BuilderToPort().port_for_builder(builder_name) 101 return port.baseline_path() 102 103 def _save_baseline(self, data, target_baseline): 104 self._tool.filesystem.write_binary_file(target_baseline, data) 105 if not self._tool.scm().exists(target_baseline): 106 self._tool.scm().add(target_baseline) 107 108 def _test_root(self, test_name): 109 return os.path.splitext(test_name)[0] 110 111 def _file_name_for_actual_result(self, test_name, suffix): 112 return "%s-actual.%s" % (self._test_root(test_name), suffix) 113 114 def _file_name_for_expected_result(self, test_name, suffix): 115 return "%s-expected.%s" % (self._test_root(test_name), suffix) 116 117 def _rebaseline_test(self, builder_name, test_name, suffix): 118 results_url = self._results_url(builder_name) 119 baseline_directory = self._baseline_directory(builder_name) 120 121 source_baseline = "%s/%s" % (results_url, self._file_name_for_actual_result(test_name, suffix)) 122 target_baseline = os.path.join(baseline_directory, self._file_name_for_expected_result(test_name, suffix)) 123 124 print "Retrieving %s ..." % source_baseline 125 self._save_baseline(self._tool.web.get_binary(source_baseline), target_baseline) 126 127 def execute(self, options, args, tool): 128 self._rebaseline_test(args[0], args[1], args[2]) 68 129 69 130 -
trunk/Tools/Scripts/webkitpy/tool/commands/rebaseline_unittest.py
r74927 r90770 31 31 from webkitpy.common.system.outputcapture import OutputCapture 32 32 from webkitpy.thirdparty.mock import Mock 33 from webkitpy.tool.commands.rebaseline import BuilderToPort, Rebaseline33 from webkitpy.tool.commands.rebaseline import * 34 34 from webkitpy.tool.mocktool import MockTool 35 35 36 36 37 class RebaselineTest(unittest.TestCase):37 class TestRebaseline(unittest.TestCase): 38 38 # This just makes sure the code runs without exceptions. 39 39 def test_tests_to_update(self): … … 44 44 45 45 46 class TestRebaselineTest(unittest.TestCase): 47 def test_tests_to_update(self): 48 command = RebaselineTest() 49 command.bind_to_tool(MockTool()) 50 build = Mock() 51 expected_stdout = "Retrieving http://build.chromium.org/f/chromium/layout_test_results/Webkit_Linux/results/layout-test-results/userscripts/another-test-actual.txt ...\n" 52 OutputCapture().assert_outputs(self, command._rebaseline_test, ["Webkit Linux", "userscripts/another-test.html", "txt"], expected_stdout=expected_stdout) 53 54 46 55 class BuilderToPortTest(unittest.TestCase): 47 56 def test_port_for_builder(self): -
trunk/Tools/Scripts/webkitpy/tool/mocktool.py
r90543 r90770 748 748 749 749 750 class MockWeb(object): 751 def get_binary(self, url): 752 return "MOCK Web result" 753 754 750 755 class MockTool(object): 751 756 … … 755 760 self.buildbot = MockBuildBot() 756 761 self.executive = MockExecutive(should_log=log_executive) 762 self.web = MockWeb() 757 763 self.filesystem = MockFileSystem() 758 764 self.workspace = MockWorkspace()
Note:
See TracChangeset
for help on using the changeset viewer.