Modified: trunk/Tools/Scripts/webkitpy/tool/commands/rebaseline.py (133060 => 133061)
--- trunk/Tools/Scripts/webkitpy/tool/commands/rebaseline.py 2012-10-31 19:34:11 UTC (rev 133060)
+++ trunk/Tools/Scripts/webkitpy/tool/commands/rebaseline.py 2012-10-31 19:36:03 UTC (rev 133061)
@@ -69,6 +69,8 @@
platform_options = factory.platform_options()
+ results_directory_option = optparse.make_option("--results-directory", help="Local results directory to use")
+
suffixes_option = optparse.make_option("--suffixes", default=','.join(BASELINE_SUFFIX_LIST), action=""
help="Comma-separated-list of file types to rebaseline")
@@ -84,6 +86,7 @@
def __init__(self):
super(RebaselineTest, self).__init__(options=[
self.no_optimize_option,
+ self.results_directory_option,
self.suffixes_option,
optparse.make_option("--builder", help="Builder to pull new baselines from"),
optparse.make_option("--move-overwritten-baselines-to", action="" default=[],
@@ -164,8 +167,7 @@
def _file_name_for_expected_result(self, test_name, suffix):
return "%s-expected.%s" % (self._test_root(test_name), suffix)
- def _rebaseline_test(self, builder_name, test_name, move_overwritten_baselines_to, suffix):
- results_url = self._results_url(builder_name)
+ def _rebaseline_test(self, builder_name, test_name, move_overwritten_baselines_to, suffix, results_url):
baseline_directory = self._baseline_directory(builder_name)
source_baseline = "%s/%s" % (results_url, self._file_name_for_actual_result(test_name, suffix))
@@ -177,14 +179,15 @@
_log.debug("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):
+ def _rebaseline_test_and_update_expectations(self, builder_name, test_name, platforms_to_move_existing_baselines_to, results_url):
for suffix in self._baseline_suffix_list:
- self._rebaseline_test(builder_name, test_name, platforms_to_move_existing_baselines_to, suffix)
+ self._rebaseline_test(builder_name, test_name, platforms_to_move_existing_baselines_to, suffix, results_url)
self._update_expectations_file(builder_name, test_name)
def execute(self, options, args, tool):
self._baseline_suffix_list = options.suffixes.split(',')
- self._rebaseline_test_and_update_expectations(options.builder, options.test, options.move_overwritten_baselines_to)
+ results_url = options.results_directory or self._results_url(options.builder)
+ self._rebaseline_test_and_update_expectations(options.builder, options.test, options.move_overwritten_baselines_to, results_url)
print json.dumps(self._scm_changes)
@@ -274,7 +277,7 @@
builders_to_fallback_paths[builder] = fallback_path
return builders_to_fallback_paths.keys()
- def _rebaseline_commands(self, test_list, move_overwritten_baselines=False, verbose=False):
+ def _rebaseline_commands(self, test_list, options):
path_to_webkit_patch = self._tool.path()
cwd = self._tool.scm().checkout_root
@@ -283,11 +286,13 @@
for builder in self._builders_to_fetch_from(test_list[test]):
suffixes = ','.join(test_list[test][builder])
cmd_line = [path_to_webkit_patch, 'rebaseline-test-internal', '--suffixes', suffixes, '--builder', builder, '--test', test]
- if move_overwritten_baselines:
+ if options.move_overwritten_baselines:
move_overwritten_baselines_to = builders.move_overwritten_baselines_to(builder)
for platform in move_overwritten_baselines_to:
cmd_line.extend(['--move-overwritten-baselines-to', platform])
- if verbose:
+ if options.results_directory:
+ cmd_line.extend(['--results_directory', options.results_directory])
+ if options.verbose:
cmd_line.append('--verbose')
commands.append(tuple([cmd_line, cwd]))
return commands
@@ -325,7 +330,7 @@
for builder, suffixes in sorted(builders.items()):
_log.debug(" %s: %s" % (builder, ",".join(suffixes)))
- commands = self._rebaseline_commands(test_list, options.move_overwritten_baselines, options.verbose)
+ commands = self._rebaseline_commands(test_list, options)
command_results = self._tool.executive.run_in_parallel(commands)
log_output = '\n'.join(result[2] for result in command_results).replace('\n\n', '\n')
@@ -349,6 +354,7 @@
return super(RebaselineJson, self).__init__(options=[
self.move_overwritten_baselines_option,
self.no_optimize_option,
+ self.results_directory_option,
])
def execute(self, options, args, tool):
Modified: trunk/Tools/Scripts/webkitpy/tool/commands/rebaseline_unittest.py (133060 => 133061)
--- trunk/Tools/Scripts/webkitpy/tool/commands/rebaseline_unittest.py 2012-10-31 19:34:11 UTC (rev 133060)
+++ trunk/Tools/Scripts/webkitpy/tool/commands/rebaseline_unittest.py 2012-10-31 19:36:03 UTC (rev 133061)
@@ -38,6 +38,8 @@
class _BaseTestCase(unittest.TestCase):
MOCK_WEB_RESULT = 'MOCK Web result, convert 404 to None=True'
+ WEB_PREFIX = 'http://example.com/f/builders/WebKit Mac10.7/results/layout-test-results'
+
command_constructor = None
def setUp(self):
@@ -94,12 +96,12 @@
self._write("fast/css/large-list-of-rules-crash.html", "Dummy test contents")
self._write("userscripts/another-test.html", "Dummy test contents")
- self.command._rebaseline_test_and_update_expectations("WebKit Mac10.7", "userscripts/another-test.html", None)
+ self.command._rebaseline_test_and_update_expectations("WebKit Mac10.7", "userscripts/another-test.html", None, self.WEB_PREFIX)
self.assertEquals(self.tool.web.urls_fetched,
- ['http://example.com/f/builders/WebKit Mac10.7/results/layout-test-results/userscripts/another-test-actual.png',
- 'http://example.com/f/builders/WebKit Mac10.7/results/layout-test-results/userscripts/another-test-actual.wav',
- 'http://example.com/f/builders/WebKit Mac10.7/results/layout-test-results/userscripts/another-test-actual.txt'])
+ [self.WEB_PREFIX + '/userscripts/another-test-actual.png',
+ self.WEB_PREFIX + '/userscripts/another-test-actual.wav',
+ self.WEB_PREFIX + '/userscripts/another-test-actual.txt'])
new_expectations = self._read(self.lion_expectations_path)
self.assertEqual(new_expectations, """Bug(B) [ Mac Linux XP Debug ] fast/dom/Window/window-postmessage-clone-really-deep-array.html [ Pass ]
Bug(A) [ Debug ] : fast/css/large-list-of-rules-crash.html [ Failure ]
@@ -109,12 +111,12 @@
self._write(self.lion_expectations_path, "Bug(x) [ Mac ] userscripts/another-test.html [ ImageOnlyFailure ]\nbug(z) [ Linux ] userscripts/another-test.html [ ImageOnlyFailure ]\n")
self._write("userscripts/another-test.html", "Dummy test contents")
- self.command._rebaseline_test_and_update_expectations("WebKit Mac10.7", "userscripts/another-test.html", None)
+ self.command._rebaseline_test_and_update_expectations("WebKit Mac10.7", "userscripts/another-test.html", None, self.WEB_PREFIX)
self.assertEquals(self.tool.web.urls_fetched,
- ['http://example.com/f/builders/WebKit Mac10.7/results/layout-test-results/userscripts/another-test-actual.png',
- 'http://example.com/f/builders/WebKit Mac10.7/results/layout-test-results/userscripts/another-test-actual.wav',
- 'http://example.com/f/builders/WebKit Mac10.7/results/layout-test-results/userscripts/another-test-actual.txt'])
+ [self.WEB_PREFIX + '/userscripts/another-test-actual.png',
+ self.WEB_PREFIX + '/userscripts/another-test-actual.wav',
+ self.WEB_PREFIX + '/userscripts/another-test-actual.txt'])
new_expectations = self._read(self.lion_expectations_path)
self.assertEqual(new_expectations, "Bug(x) [ MountainLion SnowLeopard ] userscripts/another-test.html [ ImageOnlyFailure ]\nbug(z) [ Linux ] userscripts/another-test.html [ ImageOnlyFailure ]\n")
@@ -123,39 +125,43 @@
self._write(self.lion_port.path_from_chromium_base('skia', 'skia_test_expectations.txt'), "Bug(y) [ Mac ] other-test.html [ Failure ]\n")
self._write("userscripts/another-test.html", "Dummy test contents")
- self.command._rebaseline_test_and_update_expectations("WebKit Mac10.7", "userscripts/another-test.html", None)
+ self.command._rebaseline_test_and_update_expectations("WebKit Mac10.7", "userscripts/another-test.html", None, self.WEB_PREFIX)
self.assertEquals(self.tool.web.urls_fetched,
- ['http://example.com/f/builders/WebKit Mac10.7/results/layout-test-results/userscripts/another-test-actual.png',
- 'http://example.com/f/builders/WebKit Mac10.7/results/layout-test-results/userscripts/another-test-actual.wav',
- 'http://example.com/f/builders/WebKit Mac10.7/results/layout-test-results/userscripts/another-test-actual.txt'])
+ [self.WEB_PREFIX + '/userscripts/another-test-actual.png',
+ self.WEB_PREFIX + '/userscripts/another-test-actual.wav',
+ self.WEB_PREFIX + '/userscripts/another-test-actual.txt'])
new_expectations = self._read(self.lion_expectations_path)
self.assertEqual(new_expectations, "Bug(x) [ MountainLion SnowLeopard ] userscripts/another-test.html [ ImageOnlyFailure ]\nBug(z) [ Linux ] userscripts/another-test.html [ ImageOnlyFailure ]\n")
def test_rebaseline_test(self):
- self.command._rebaseline_test("WebKit Linux", "userscripts/another-test.html", None, "txt")
- self.assertEquals(self.tool.web.urls_fetched, ['http://example.com/f/builders/WebKit Linux/results/layout-test-results/userscripts/another-test-actual.txt'])
+ self.command._rebaseline_test("WebKit Linux", "userscripts/another-test.html", None, "txt", self.WEB_PREFIX)
+ self.assertEquals(self.tool.web.urls_fetched, [self.WEB_PREFIX + '/userscripts/another-test-actual.txt'])
+ def test_rebaseline_test_with_results_directory(self):
+ self.command._rebaseline_test("WebKit Linux", "userscripts/another-test.html", None, "txt", '/tmp')
+ self.assertEquals(self.tool.web.urls_fetched, ['/tmp/userscripts/another-test-actual.txt'])
+
def test_rebaseline_test_and_print_scm_changes(self):
self.command._print_scm_changes = True
self.command._scm_changes = {'add': [], 'delete': []}
self.tool._scm.exists = lambda x: False
- self.command._rebaseline_test("WebKit Linux", "userscripts/another-test.html", None, "txt")
+ self.command._rebaseline_test("WebKit Linux", "userscripts/another-test.html", None, "txt", None)
self.assertEquals(self.command._scm_changes, {'add': ['/mock-checkout/LayoutTests/platform/chromium-linux/userscripts/another-test-expected.txt'], 'delete': []})
def test_rebaseline_and_copy_test(self):
self._write("userscripts/another-test-expected.txt", "generic result")
- self.command._rebaseline_test("WebKit Mac10.7", "userscripts/another-test.html", ["chromium-mac-snowleopard"], "txt")
+ self.command._rebaseline_test("WebKit Mac10.7", "userscripts/another-test.html", ["chromium-mac-snowleopard"], "txt", None)
self.assertEquals(self._read('platform/chromium-mac-lion/userscripts/another-test-expected.txt'), self.MOCK_WEB_RESULT)
self.assertEquals(self._read('platform/chromium-mac-snowleopard/userscripts/another-test-expected.txt'), 'generic result')
def test_rebaseline_and_copy_test_no_existing_result(self):
- self.command._rebaseline_test("WebKit Mac10.7", "userscripts/another-test.html", ["chromium-mac-snowleopard"], "txt")
+ self.command._rebaseline_test("WebKit Mac10.7", "userscripts/another-test.html", ["chromium-mac-snowleopard"], "txt", None)
self.assertEquals(self._read('platform/chromium-mac-lion/userscripts/another-test-expected.txt'), self.MOCK_WEB_RESULT)
self.assertFalse(self.tool.filesystem.exists(self._expand('platform/chromium-mac-snowleopard/userscripts/another-test-expected.txt')))
@@ -163,9 +169,9 @@
def test_rebaseline_and_copy_test_with_lion_result(self):
self._write("platform/chromium-mac-lion/userscripts/another-test-expected.txt", "original lion result")
- self.command._rebaseline_test("WebKit Mac10.7", "userscripts/another-test.html", ["chromium-mac-snowleopard"], "txt")
+ self.command._rebaseline_test("WebKit Mac10.7", "userscripts/another-test.html", ["chromium-mac-snowleopard"], "txt", self.WEB_PREFIX)
- self.assertEquals(self.tool.web.urls_fetched, ["http://example.com/f/builders/WebKit Mac10.7/results/layout-test-results/userscripts/another-test-actual.txt"])
+ self.assertEquals(self.tool.web.urls_fetched, [self.WEB_PREFIX + '/userscripts/another-test-actual.txt'])
self.assertEquals(self._read("platform/chromium-mac-snowleopard/userscripts/another-test-expected.txt"), "original lion result")
self.assertEquals(self._read("platform/chromium-mac-lion/userscripts/another-test-expected.txt"), self.MOCK_WEB_RESULT)
@@ -173,7 +179,7 @@
self._write("platform/chromium-mac-lion/userscripts/another-test-expected.txt", "original lion result")
self._write("platform/chromium-mac-snowleopard/userscripts/another-test-expected.txt", "original snowleopard result")
- self.command._rebaseline_test("WebKit Mac10.7", "userscripts/another-test.html", ["chromium-mac-snowleopard"], "txt")
+ self.command._rebaseline_test("WebKit Mac10.7", "userscripts/another-test.html", ["chromium-mac-snowleopard"], "txt", None)
self.assertEquals(self._read("platform/chromium-mac-snowleopard/userscripts/another-test-expected.txt"), "original snowleopard result")
self.assertEquals(self._read("platform/chromium-mac-lion/userscripts/another-test-expected.txt"), self.MOCK_WEB_RESULT)
@@ -194,7 +200,8 @@
}
options = MockOptions(optimize=True, builder="MOCK SnowLeopard", suffixes="txt",
- move_overwritten_baselines_to=["test-mac-leopard"], verbose=True, test="failures/expected/image.html")
+ move_overwritten_baselines_to=["test-mac-leopard"], verbose=True, test="failures/expected/image.html",
+ results_directory=None)
oc.capture_output()
self.command.execute(options, [], self.tool)
@@ -224,7 +231,7 @@
super(TestRebaselineJson, self).tearDown()
def test_rebaseline_all(self):
- options = MockOptions(optimize=True, verbose=True, move_overwritten_baselines=False)
+ options = MockOptions(optimize=True, verbose=True, move_overwritten_baselines=False, results_directory=None)
self.command._rebaseline(options, {"user-scripts/another-test.html": {"MOCK builder": ["txt", "png"]}})
# Note that we have one run_in_parallel() call followed by a run_command()
@@ -233,7 +240,7 @@
['echo', '--verbose', 'optimize-baselines', '--suffixes', 'txt,png', 'user-scripts/another-test.html']])
def test_rebaseline_debug(self):
- options = MockOptions(optimize=True, verbose=True, move_overwritten_baselines=False)
+ options = MockOptions(optimize=True, verbose=True, move_overwritten_baselines=False, results_directory=None)
self.command._rebaseline(options, {"user-scripts/another-test.html": {"MOCK builder (Debug)": ["txt", "png"]}})
# Note that we have one run_in_parallel() call followed by a run_command()
@@ -242,7 +249,7 @@
['echo', '--verbose', 'optimize-baselines', '--suffixes', 'txt,png', 'user-scripts/another-test.html']])
def test_move_overwritten(self):
- options = MockOptions(optimize=True, verbose=True, move_overwritten_baselines=True)
+ options = MockOptions(optimize=True, verbose=True, move_overwritten_baselines=True, results_directory=None)
self.command._rebaseline(options, {"user-scripts/another-test.html": {"MOCK builder": ["txt", "png"]}})
# Note that we have one run_in_parallel() call followed by a run_command()
@@ -251,14 +258,22 @@
['echo', '--verbose', 'optimize-baselines', '--suffixes', 'txt,png', 'user-scripts/another-test.html']])
def test_no_optimize(self):
- options = MockOptions(optimize=False, verbose=True, move_overwritten_baselines=False)
+ options = MockOptions(optimize=False, verbose=True, move_overwritten_baselines=False, results_directory=None)
self.command._rebaseline(options, {"user-scripts/another-test.html": {"MOCK builder (Debug)": ["txt", "png"]}})
# Note that we have only one run_in_parallel() call
self.assertEquals(self.tool.executive.calls,
[[['echo', 'rebaseline-test-internal', '--suffixes', 'txt,png', '--builder', 'MOCK builder (Debug)', '--test', 'user-scripts/another-test.html', '--verbose']]])
+ def test_results_directory(self):
+ options = MockOptions(optimize=False, verbose=True, move_overwritten_baselines=False, results_directory='/tmp')
+ self.command._rebaseline(options, {"user-scripts/another-test.html": {"MOCK builder": ["txt", "png"]}})
+ # Note that we have only one run_in_parallel() call
+ self.assertEquals(self.tool.executive.calls,
+ [[['echo', 'rebaseline-test-internal', '--suffixes', 'txt,png', '--builder', 'MOCK builder', '--test', 'user-scripts/another-test.html', '--results_directory', '/tmp', '--verbose']]])
+
+
class TestRebaseline(_BaseTestCase):
# This command shares most of its logic with RebaselineJson, so these tests just test what is different.
@@ -310,7 +325,7 @@
self.tool.executive = MockExecutive2()
self.command._tests_to_rebaseline = lambda port: {'userscripts/another-test.html': set(['txt']), 'userscripts/images.svg': set(['png'])}
- self.command.execute(MockOptions(optimize=False, verbose=False, move_overwritten_baselines=False), [], self.tool)
+ self.command.execute(MockOptions(optimize=False, verbose=False, move_overwritten_baselines=False, results_directory=None), [], self.tool)
# FIXME: change this to use the test- ports.
calls = filter(lambda x: x != ['qmake', '-v'], self.tool.executive.calls)