run-webkit-tests calls out to webkit-build-directory twice
https://bugs.webkit.org/show_bug.cgi?id=77248
Reviewed by Dirk Pranke.
* Scripts/webkit-build-directory:
If called with no arguments, print out both the top-level directory and the
configuration directory
* Scripts/webkitpy/layout_tests/port/config.py:
(Config.build_directory):
When called with no arguments, get and cache both the top-level and configuration directories.
* Scripts/webkitpy/layout_tests/port/config_standalone.py:
(main):
* Scripts/webkitpy/layout_tests/port/config_unittest.py:
(ConfigTest.assert_configuration):
(ConfigTest.test_build_directory.mock_webkit_build_directory):
(ConfigTest.test_build_directory):
(ConfigTest.test_default_configuration__notfound):
* Scripts/webkitpy/layout_tests/port/webkit.py:
(WebKitPort._build_path):
Cache the build directory in the options object so that other users
of the options object don't need to call out to webkit-build-directory.
Also, properly support the existing --build-directory argument.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@106412 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Tools/ChangeLog b/Tools/ChangeLog
index 32e3eaf..19bae57 100644
--- a/Tools/ChangeLog
+++ b/Tools/ChangeLog
@@ -1,3 +1,31 @@
+2012-01-31 Ojan Vafai <ojan@chromium.org>
+
+ run-webkit-tests calls out to webkit-build-directory twice
+ https://bugs.webkit.org/show_bug.cgi?id=77248
+
+ Reviewed by Dirk Pranke.
+
+ * Scripts/webkit-build-directory:
+ If called with no arguments, print out both the top-level directory and the
+ configuration directory
+
+ * Scripts/webkitpy/layout_tests/port/config.py:
+ (Config.build_directory):
+ When called with no arguments, get and cache both the top-level and configuration directories.
+
+ * Scripts/webkitpy/layout_tests/port/config_standalone.py:
+ (main):
+ * Scripts/webkitpy/layout_tests/port/config_unittest.py:
+ (ConfigTest.assert_configuration):
+ (ConfigTest.test_build_directory.mock_webkit_build_directory):
+ (ConfigTest.test_build_directory):
+ (ConfigTest.test_default_configuration__notfound):
+ * Scripts/webkitpy/layout_tests/port/webkit.py:
+ (WebKitPort._build_path):
+ Cache the build directory in the options object so that other users
+ of the options object don't need to call out to webkit-build-directory.
+ Also, properly support the existing --build-directory argument.
+
2012-01-31 Ryosuke Niwa <rniwa@webkit.org>
Bump up the timeout for performance tests since DOM/DOMTable.html
diff --git a/Tools/Scripts/webkit-build-directory b/Tools/Scripts/webkit-build-directory
index bf7d66d..dab1d66 100755
--- a/Tools/Scripts/webkit-build-directory
+++ b/Tools/Scripts/webkit-build-directory
@@ -57,12 +57,15 @@
'help|h' => \$showHelp,
);
-if (!$getOptionsResult || $showHelp || (!$showConfigurationDirectory && !$showTopLevelDirectory)) {
+if (!$getOptionsResult || $showHelp) {
print STDERR $usage;
exit 1;
}
-if ($showTopLevelDirectory) {
+if (!$showConfigurationDirectory && !$showTopLevelDirectory) {
+ print baseProductDir() . "\n";
+ print productDir() . "\n";
+} elsif ($showTopLevelDirectory) {
print baseProductDir() . "\n";
} else {
print productDir() . "\n";
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/config.py b/Tools/Scripts/webkitpy/layout_tests/port/config.py
index c552907..6a1045f 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/config.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/config.py
@@ -74,12 +74,19 @@
flags = ["--configuration", self.flag_for_configuration(configuration)]
else:
configuration = ""
- flags = ["--top-level"]
+ flags = []
if not self._build_directories.get(configuration):
args = ["perl", self.script_path("webkit-build-directory")] + flags
- self._build_directories[configuration] = (
- self._executive.run_command(args, cwd=self.webkit_base_dir()).rstrip())
+ output = self._executive.run_command(args, cwd=self.webkit_base_dir()).rstrip()
+ parts = output.split("\n")
+ self._build_directories[configuration] = parts[0]
+
+ if len(parts) == 2:
+ default_configuration = parts[1][len(parts[0]):]
+ if default_configuration.startswith("/"):
+ default_configuration = default_configuration[1:]
+ self._build_directories[default_configuration] = parts[1]
return self._build_directories[configuration]
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/config_standalone.py b/Tools/Scripts/webkitpy/layout_tests/port/config_standalone.py
index 3dec3b9..5b04831 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/config_standalone.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/config_standalone.py
@@ -57,7 +57,7 @@
argv = sys.argv
if len(argv) == 3 and argv[1] == '--mock':
- e = executive_mock.MockExecutive2(output='foo')
+ e = executive_mock.MockExecutive2(output='foo\nfoo/%s' % argv[2])
fs = filesystem_mock.MockFileSystem({'foo/Configuration': argv[2]})
else:
e = executive.Executive()
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/config_unittest.py b/Tools/Scripts/webkitpy/layout_tests/port/config_unittest.py
index e557eef..51a7798 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/config_unittest.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/config_unittest.py
@@ -51,18 +51,21 @@
def assert_configuration(self, contents, expected):
# This tests that a configuration file containing
# _contents_ ends up being interpreted as _expected_.
- c = self.make_config('foo', {'foo/Configuration': contents})
+ output = 'foo\nfoo/%s' % contents
+ c = self.make_config(output, {'foo/Configuration': contents})
self.assertEqual(c.default_configuration(), expected)
def test_build_directory(self):
# --top-level
def mock_webkit_build_directory(arg_list):
if arg_list == ['--top-level']:
- return '/WebKitBuild'
+ return '/WebKitBuild/'
elif arg_list == ['--configuration', '--debug']:
return '/WebKitBuild/Debug'
elif arg_list == ['--configuration', '--release']:
return '/WebKitBuild/Release'
+ elif arg_list == []:
+ return '/WebKitBuild/\n/WebKitBuild//Debug\n'
return 'Error'
def mock_run_command(arg_list):
@@ -71,10 +74,10 @@
return 'Error'
c = self.make_config(run_command_fn=mock_run_command)
- self.assertTrue(c.build_directory(None).endswith('WebKitBuild'))
+ self.assertEqual(c.build_directory(None), '/WebKitBuild/')
# Test again to check caching
- self.assertTrue(c.build_directory(None).endswith('WebKitBuild'))
+ self.assertEqual(c.build_directory(None), '/WebKitBuild/')
# Test other values
self.assertTrue(c.build_directory('Release').endswith('/Release'))
@@ -95,7 +98,7 @@
def test_default_configuration__notfound(self):
# This tests what happens if the default configuration file doesn't exist.
- c = self.make_config(output='foo', files={'foo/Configuration': None})
+ c = self.make_config(output='foo\nfoo/Release', files={'foo/Configuration': None})
self.assertEqual(c.default_configuration(), "Release")
def test_default_configuration__unknown(self):
diff --git a/Tools/Scripts/webkitpy/layout_tests/port/webkit.py b/Tools/Scripts/webkitpy/layout_tests/port/webkit.py
index 41a152d..6f7967e 100644
--- a/Tools/Scripts/webkitpy/layout_tests/port/webkit.py
+++ b/Tools/Scripts/webkitpy/layout_tests/port/webkit.py
@@ -377,9 +377,12 @@
def _build_path(self, *comps):
# --root is used for running with a pre-built root (like from a nightly zip).
- build_directory = self.get_option('root')
+ build_directory = self.get_option('root') or self.get_option('build_directory')
if not build_directory:
build_directory = self._config.build_directory(self.get_option('configuration'))
+ # Set --build-directory here Since this modifies the options object used by the worker subprocesses,
+ # it avoids the slow call out to build_directory in each subprocess.
+ self.set_option_default('build_directory', build_directory)
return self._filesystem.join(build_directory, *comps)
def _path_to_driver(self):