| Index: third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py
|
| diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py
|
| index 8455ba5155cc205801c226f16688fd6865cf21c1..293d2593adcb107f262da267f11d04e1ff8236c1 100644
|
| --- a/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py
|
| +++ b/third_party/WebKit/Tools/Scripts/webkitpy/layout_tests/port/base.py
|
| @@ -176,21 +176,6 @@ class Port(object):
|
| self._http_lock = None # FIXME: Why does this live on the port object?
|
| self._dump_reader = None
|
|
|
| - # Python's Popen has a bug that causes any pipes opened to a
|
| - # process that can't be executed to be leaked. Since this
|
| - # code is specifically designed to tolerate exec failures
|
| - # to gracefully handle cases where wdiff is not installed,
|
| - # the bug results in a massive file descriptor leak. As a
|
| - # workaround, if an exec failure is ever experienced for
|
| - # wdiff, assume it's not available. This will leak one
|
| - # file descriptor but that's better than leaking each time
|
| - # wdiff would be run.
|
| - #
|
| - # http://mail.python.org/pipermail/python-list/
|
| - # 2008-August/505753.html
|
| - # http://bugs.python.org/issue3210
|
| - self._wdiff_available = None
|
| -
|
| # FIXME: prettypatch.py knows this path, why is it copied here?
|
| self._pretty_patch_path = self.path_from_webkit_base("Tools", "Scripts", "webkitruby", "PrettyPatch", "prettify.rb")
|
| self._pretty_patch_available = None
|
| @@ -238,11 +223,6 @@ class Port(object):
|
| # well (for things like ASAN, Valgrind, etc.)
|
| return 3.0 * float(self.get_option('time_out_ms', '0')) / self.default_timeout_ms()
|
|
|
| - def wdiff_available(self):
|
| - if self._wdiff_available is None:
|
| - self._wdiff_available = self.check_wdiff(more_logging=False)
|
| - return self._wdiff_available
|
| -
|
| def pretty_patch_available(self):
|
| if self._pretty_patch_available is None:
|
| self._pretty_patch_available = self.check_pretty_patch(more_logging=False)
|
| @@ -346,9 +326,8 @@ class Port(object):
|
| if self.get_option('pixel_tests'):
|
| result = self.check_image_diff() and result
|
|
|
| - # It's okay if pretty patch and wdiff aren't available, but we will at least log messages.
|
| + # It's okay if pretty patch isn't available, but we will at least log messages.
|
| self._pretty_patch_available = self.check_pretty_patch()
|
| - self._wdiff_available = self.check_wdiff()
|
|
|
| if self._dump_reader:
|
| result = self._dump_reader.check_is_functional() and result
|
| @@ -426,27 +405,6 @@ class Port(object):
|
|
|
| return True
|
|
|
| - def check_wdiff(self, more_logging=True):
|
| - if not self._path_to_wdiff():
|
| - # Don't need to log here since this is the port choosing not to use wdiff.
|
| - return False
|
| -
|
| - try:
|
| - _ = self._executive.run_command([self._path_to_wdiff(), '--help'])
|
| - except OSError:
|
| - if more_logging:
|
| - message = self._wdiff_missing_message()
|
| - if message:
|
| - for line in message.splitlines():
|
| - _log.warning(' ' + line)
|
| - _log.warning('')
|
| - return False
|
| -
|
| - return True
|
| -
|
| - def _wdiff_missing_message(self):
|
| - return 'wdiff is not installed; please install it to generate word-by-word diffs.'
|
| -
|
| def check_httpd(self):
|
| httpd_path = self.path_to_apache()
|
| if httpd_path:
|
| @@ -1377,70 +1335,6 @@ class Port(object):
|
| """Returns the repository path for the chromium code base."""
|
| return self.path_from_chromium_base('build')
|
|
|
| - _WDIFF_DEL = '##WDIFF_DEL##'
|
| - _WDIFF_ADD = '##WDIFF_ADD##'
|
| - _WDIFF_END = '##WDIFF_END##'
|
| -
|
| - def _format_wdiff_output_as_html(self, wdiff):
|
| - wdiff = cgi.escape(wdiff)
|
| - wdiff = wdiff.replace(self._WDIFF_DEL, "<span class=del>")
|
| - wdiff = wdiff.replace(self._WDIFF_ADD, "<span class=add>")
|
| - wdiff = wdiff.replace(self._WDIFF_END, "</span>")
|
| - html = "<head><style>.del { background: #faa; } "
|
| - html += ".add { background: #afa; }</style></head>"
|
| - html += "<pre>%s</pre>" % wdiff
|
| - return html
|
| -
|
| - def _wdiff_command(self, actual_filename, expected_filename):
|
| - executable = self._path_to_wdiff()
|
| - return [executable,
|
| - "--start-delete=%s" % self._WDIFF_DEL,
|
| - "--end-delete=%s" % self._WDIFF_END,
|
| - "--start-insert=%s" % self._WDIFF_ADD,
|
| - "--end-insert=%s" % self._WDIFF_END,
|
| - actual_filename,
|
| - expected_filename]
|
| -
|
| - @staticmethod
|
| - def _handle_wdiff_error(script_error):
|
| - # Exit 1 means the files differed, any other exit code is an error.
|
| - if script_error.exit_code != 1:
|
| - raise script_error
|
| -
|
| - def _run_wdiff(self, actual_filename, expected_filename):
|
| - """Runs wdiff and may throw exceptions.
|
| - This is mostly a hook for unit testing.
|
| - """
|
| - # Diffs are treated as binary as they may include multiple files
|
| - # with conflicting encodings. Thus we do not decode the output.
|
| - command = self._wdiff_command(actual_filename, expected_filename)
|
| - wdiff = self._executive.run_command(command, decode_output=False,
|
| - error_handler=self._handle_wdiff_error)
|
| - return self._format_wdiff_output_as_html(wdiff)
|
| -
|
| - _wdiff_error_html = "Failed to run wdiff, see error log."
|
| -
|
| - def wdiff_text(self, actual_filename, expected_filename):
|
| - """Returns a string of HTML indicating the word-level diff of the
|
| - contents of the two filenames. Returns an empty string if word-level
|
| - diffing isn't available.
|
| - """
|
| - if not self.wdiff_available():
|
| - return ""
|
| - try:
|
| - # It's possible to raise a ScriptError we pass wdiff invalid paths.
|
| - return self._run_wdiff(actual_filename, expected_filename)
|
| - except OSError as error:
|
| - if error.errno in (errno.ENOENT, errno.EACCES, errno.ECHILD):
|
| - # Silently ignore cases where wdiff is missing.
|
| - self._wdiff_available = False
|
| - return ""
|
| - raise
|
| - except ScriptError as error:
|
| - _log.error("Failed to run wdiff: %s", error)
|
| - self._wdiff_available = False
|
| - return self._wdiff_error_html
|
| -
|
| # This is a class variable so we can test error output easily.
|
| _pretty_patch_error_html = "Failed to run PrettyPatch, see error log."
|
|
|
| @@ -1533,17 +1427,6 @@ class Port(object):
|
| """
|
| return self._build_path('image_diff')
|
|
|
| - @memoized
|
| - def _path_to_wdiff(self):
|
| - """Returns the full path to the wdiff binary, or None if it is not available.
|
| -
|
| - This is likely used only by wdiff_text()
|
| - """
|
| - for path in ("/usr/bin/wdiff", "/usr/bin/dwdiff"):
|
| - if self._filesystem.exists(path):
|
| - return path
|
| - return None
|
| -
|
| def _absolute_baseline_path(self, platform_dir):
|
| """Return the absolute path to the top of the baseline tree for a
|
| given platform directory.
|
|
|