<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[192395] trunk/Tools</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/192395">192395</a></dd>
<dt>Author</dt> <dd>bfulgham@apple.com</dd>
<dt>Date</dt> <dd>2015-11-12 16:21:13 -0800 (Thu, 12 Nov 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[Win] webkitpy is applying abspath to DOS paths, yielding invalid paths
https://bugs.webkit.org/show_bug.cgi?id=151156

Reviewed by Anders Carlsson.

My earlier patch was incomplete. There are some Python libraries that want
to receive UNIX style paths, even though all of our applications and tools
use DOS paths. To handle this special case, we need to track a UNIX-style
absolute path that can be given to things like the Python socket server.
        
When we cut over to all-native Windows Python we can get rid of this
special case code.
        
* Scripts/webkitpy/common/system/filesystem.py:
(FileSystem.abspath): Add special code for Cygwin to convert a DOS-style
path into something Cygwin can use internally.
* Scripts/webkitpy/port/base.py:
(Port.results_directory): Remove custom Windows code. Instead, override
the method in the windows port object.
(Port.abs_results_directory): Add stub.
(Port.to.start_websocket_server): For Cygwin, use special cygwin absolute
path.
* Scripts/webkitpy/port/win.py:
(WinPort.__init__): Added to initialze new _abs_results_directory value.
(WinPort.abs_results_directory): Added,
(WinPort.results_directory): Modified to also create a value for
_abs_results_directory</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsScriptswebkitpycommonsystemfilesystempy">trunk/Tools/Scripts/webkitpy/common/system/filesystem.py</a></li>
<li><a href="#trunkToolsScriptswebkitpyportbasepy">trunk/Tools/Scripts/webkitpy/port/base.py</a></li>
<li><a href="#trunkToolsScriptswebkitpyportwinpy">trunk/Tools/Scripts/webkitpy/port/win.py</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (192394 => 192395)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2015-11-13 00:15:35 UTC (rev 192394)
+++ trunk/Tools/ChangeLog        2015-11-13 00:21:13 UTC (rev 192395)
</span><span class="lines">@@ -1,3 +1,33 @@
</span><ins>+2015-11-12  Brent Fulgham  &lt;bfulgham@apple.com&gt;
+
+        [Win] webkitpy is applying abspath to DOS paths, yielding invalid paths
+        https://bugs.webkit.org/show_bug.cgi?id=151156
+
+        Reviewed by Anders Carlsson.
+
+        My earlier patch was incomplete. There are some Python libraries that want
+        to receive UNIX style paths, even though all of our applications and tools
+        use DOS paths. To handle this special case, we need to track a UNIX-style
+        absolute path that can be given to things like the Python socket server.
+        
+        When we cut over to all-native Windows Python we can get rid of this
+        special case code.
+        
+        * Scripts/webkitpy/common/system/filesystem.py:
+        (FileSystem.abspath): Add special code for Cygwin to convert a DOS-style
+        path into something Cygwin can use internally.
+        * Scripts/webkitpy/port/base.py:
+        (Port.results_directory): Remove custom Windows code. Instead, override
+        the method in the windows port object.
+        (Port.abs_results_directory): Add stub.
+        (Port.to.start_websocket_server): For Cygwin, use special cygwin absolute
+        path.
+        * Scripts/webkitpy/port/win.py:
+        (WinPort.__init__): Added to initialze new _abs_results_directory value.
+        (WinPort.abs_results_directory): Added,
+        (WinPort.results_directory): Modified to also create a value for
+        _abs_results_directory
+
</ins><span class="cx"> 2015-11-12  Keith Miller  &lt;keith_miller@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, add Michael Saboff to the JavaScriptCore watchlist, per request.
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpycommonsystemfilesystempy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/common/system/filesystem.py (192394 => 192395)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/common/system/filesystem.py        2015-11-13 00:15:35 UTC (rev 192394)
+++ trunk/Tools/Scripts/webkitpy/common/system/filesystem.py        2015-11-13 00:21:13 UTC (rev 192395)
</span><span class="lines">@@ -49,6 +49,15 @@
</span><span class="cx">     pardir = os.pardir
</span><span class="cx"> 
</span><span class="cx">     def abspath(self, path):
</span><ins>+        # FIXME: This gross hack is needed while we transition from Cygwin to native Windows, because we
+        # have some mixing of file conventions from different tools:
+        if sys.platform == 'cygwin':
+            path = os.path.normpath(path)
+            path_components = path.split(os.sep)
+            if path_components and len(path_components[0]) == 2 and path_components[0][1] == ':':
+                path_components[0] = path_components[0][0]
+                path = os.path.join('/', 'cygdrive', *path_components)
+
</ins><span class="cx">         return os.path.abspath(path)
</span><span class="cx"> 
</span><span class="cx">     def realpath(self, path):
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpyportbasepy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/port/base.py (192394 => 192395)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/port/base.py        2015-11-13 00:15:35 UTC (rev 192394)
+++ trunk/Tools/Scripts/webkitpy/port/base.py        2015-11-13 00:21:13 UTC (rev 192395)
</span><span class="lines">@@ -775,12 +775,12 @@
</span><span class="cx">         &quot;&quot;&quot;Absolute path to the place to store the test results (uses --results-directory).&quot;&quot;&quot;
</span><span class="cx">         if not self._results_directory:
</span><span class="cx">             option_val = self.get_option('results_directory') or self.default_results_directory()
</span><del>-            if sys.platform in ('win32', 'cygwin'):
-                self._results_directory = option_val
-            else:
-                self._results_directory = self._filesystem.abspath(option_val)
</del><ins>+            self._results_directory = self._filesystem.abspath(option_val)
</ins><span class="cx">         return self._results_directory
</span><span class="cx"> 
</span><ins>+    def abs_results_directory(self):
+        return self.results_directory()
+
</ins><span class="cx">     def perf_results_directory(self):
</span><span class="cx">         return self._build_path()
</span><span class="cx"> 
</span><span class="lines">@@ -907,7 +907,12 @@
</span><span class="cx">         Ports can stub this out if they don't need a websocket server to be running.&quot;&quot;&quot;
</span><span class="cx">         assert not self._websocket_server, 'Already running a websocket server.'
</span><span class="cx"> 
</span><del>-        server = websocket_server.PyWebSocket(self, self.results_directory())
</del><ins>+        work_directory = self.results_directory()
+        if self.host.platform.is_cygwin():
+            # Cygwin socket server needs a UNIX path.
+            work_directory = self.abs_results_directory()
+
+        server = websocket_server.PyWebSocket(self, work_directory)
</ins><span class="cx">         server.start()
</span><span class="cx">         self._websocket_server = server
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkToolsScriptswebkitpyportwinpy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/Scripts/webkitpy/port/win.py (192394 => 192395)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/Scripts/webkitpy/port/win.py        2015-11-13 00:15:35 UTC (rev 192394)
+++ trunk/Tools/Scripts/webkitpy/port/win.py        2015-11-13 00:21:13 UTC (rev 192395)
</span><span class="lines">@@ -61,6 +61,24 @@
</span><span class="cx"> 
</span><span class="cx">     previous_error_reporting_values = {}
</span><span class="cx"> 
</span><ins>+    def __init__(self, host, port_name, **kwargs):
+        ApplePort.__init__(self, host, port_name, **kwargs)
+
+        self._abs_results_directory = None
+
+    def abs_results_directory(self):
+        if not self._results_directory:
+            self.results_directory()
+        return self._abs_results_directory
+
+    def results_directory(self):
+        &quot;&quot;&quot;Absolute path to the place to store the test results (uses --results-directory).&quot;&quot;&quot;
+        if not self._results_directory:
+            option_val = self.get_option('results_directory') or self.default_results_directory()
+            self._results_directory = option_val
+            self._abs_results_directory = self._filesystem.abspath(option_val)
+        return self._results_directory
+
</ins><span class="cx">     def do_text_results_differ(self, expected_text, actual_text):
</span><span class="cx">         # Sanity was restored in WK2, so we don't need this hack there.
</span><span class="cx">         if self.get_option('webkit_test_runner'):
</span></span></pre>
</div>
</div>

</body>
</html>