<!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>[200229] trunk/Source/WebInspectorUI</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/200229">200229</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-04-28 22:23:46 -0700 (Thu, 28 Apr 2016)</dd>
</dl>
<h3>Log Message</h3>
<pre>Web Inspector: FormatterWorker fails to find "External/Esprima.js" in Production builds
https://bugs.webkit.org/show_bug.cgi?id=157162
<rdar://problem/25996556>
Patch by Joseph Pecoraro <pecoraro@apple.com> on 2016-04-28
Reviewed by Timothy Hatcher.
Workers have relative include paths. FormatterWorker has an includes
that looks like:
importScripts(...[
"../../External/Esprima/esprima.js",
...
]);
In optimized builds (Production) the esprima resources are combined
and moved out of an External directory to "Esprima.js". We need to
update the path of this include in optimized builds.
This adds a script to do some basic rewrites of paths. It will also
produce a build error if there are any other External paths that
may have been unhandled.
* Scripts/copy-user-interface-resources.pl:
Run a new script to fix up the Worker imports for new pathes.
* Scripts/fix-worker-imports-for-optimized-builds.pl: Added.
(fixWorkerImportsInFile):
(fixWorkerImportsInDirectory):
Replace "/External/Esprima/esprima.js" with "/Esprima.js" in imports.
Fatal error for any unhandled "/External" lines that were not replaced.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebInspectorUIChangeLog">trunk/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#trunkSourceWebInspectorUIScriptscopyuserinterfaceresourcespl">trunk/Source/WebInspectorUI/Scripts/copy-user-interface-resources.pl</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebInspectorUIScriptsfixworkerimportsforoptimizedbuildspl">trunk/Source/WebInspectorUI/Scripts/fix-worker-imports-for-optimized-builds.pl</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (200228 => 200229)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog        2016-04-29 03:01:53 UTC (rev 200228)
+++ trunk/Source/WebInspectorUI/ChangeLog        2016-04-29 05:23:46 UTC (rev 200229)
</span><span class="lines">@@ -1,3 +1,36 @@
</span><ins>+2016-04-28 Joseph Pecoraro <pecoraro@apple.com>
+
+ Web Inspector: FormatterWorker fails to find "External/Esprima.js" in Production builds
+ https://bugs.webkit.org/show_bug.cgi?id=157162
+ <rdar://problem/25996556>
+
+ Reviewed by Timothy Hatcher.
+
+ Workers have relative include paths. FormatterWorker has an includes
+ that looks like:
+
+ importScripts(...[
+ "../../External/Esprima/esprima.js",
+ ...
+ ]);
+
+ In optimized builds (Production) the esprima resources are combined
+ and moved out of an External directory to "Esprima.js". We need to
+ update the path of this include in optimized builds.
+
+ This adds a script to do some basic rewrites of paths. It will also
+ produce a build error if there are any other External paths that
+ may have been unhandled.
+
+ * Scripts/copy-user-interface-resources.pl:
+ Run a new script to fix up the Worker imports for new pathes.
+
+ * Scripts/fix-worker-imports-for-optimized-builds.pl: Added.
+ (fixWorkerImportsInFile):
+ (fixWorkerImportsInDirectory):
+ Replace "/External/Esprima/esprima.js" with "/Esprima.js" in imports.
+ Fatal error for any unhandled "/External" lines that were not replaced.
+
</ins><span class="cx"> 2016-04-27 Joseph Pecoraro <pecoraro@apple.com>
</span><span class="cx">
</span><span class="cx"> Web Inspector: Missing CSS autocompletion suggestions for -webkit-user-select
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIScriptscopyuserinterfaceresourcespl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/Scripts/copy-user-interface-resources.pl (200228 => 200229)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/Scripts/copy-user-interface-resources.pl        2016-04-29 03:01:53 UTC (rev 200228)
+++ trunk/Source/WebInspectorUI/Scripts/copy-user-interface-resources.pl        2016-04-29 05:23:46 UTC (rev 200229)
</span><span class="lines">@@ -245,6 +245,9 @@
</span><span class="cx">
</span><span class="cx"> # Remove console.assert calls from the Worker js files.
</span><span class="cx"> system(File::Spec->catfile($scriptsRoot, 'remove-console-asserts.pl'), '--input-directory', $workersDir);
</span><ins>+
+ # Fix import references in Workers directories. This rewrites "../../External/script.js" import paths to their new locations.
+ system(File::Spec->catfile($scriptsRoot, 'fix-worker-imports-for-optimized-builds.pl'), '--input-directory', $workersDir) and die "Failed to update Worker imports for optimized builds.";
</ins><span class="cx"> } else {
</span><span class="cx"> # Keep the files separate for engineering builds.
</span><span class="cx"> ditto($uiRoot, $targetResourcePath);
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIScriptsfixworkerimportsforoptimizedbuildspl"></a>
<div class="addfile"><h4>Added: trunk/Source/WebInspectorUI/Scripts/fix-worker-imports-for-optimized-builds.pl (0 => 200229)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/Scripts/fix-worker-imports-for-optimized-builds.pl         (rev 0)
+++ trunk/Source/WebInspectorUI/Scripts/fix-worker-imports-for-optimized-builds.pl        2016-04-29 05:23:46 UTC (rev 200229)
</span><span class="lines">@@ -0,0 +1,69 @@
</span><ins>+#!/usr/bin/perl -w
+
+use strict;
+use Getopt::Long;
+use File::Copy qw/move/;
+use File::Temp qw/tempfile/;
+use File::Spec;
+
+sub fixWorkerImportsInFile($$);
+sub fixWorkerImportsInDirectory($);
+
+our $inputDirectory;
+
+GetOptions('input-directory=s' => \$inputDirectory);
+
+if (defined $inputDirectory) {
+ fixWorkerImportsInDirectory($inputDirectory);
+ exit;
+}
+
+print "Usage: $0 --input-directory <path>\n";
+exit;
+
+sub fixWorkerImportsInFile($$)
+{
+ my $inputScriptFilename = shift;
+ my $outputScriptFilename = shift;
+
+ open IN, $inputScriptFilename or die "Couldn't open $inputScriptFilename: $!";
+ my ($out, $tempFilename) = tempfile(UNLINK => 0) or die;
+
+ my $previousLine = "";
+ while (<IN>) {
+ s|/External/Esprima/esprima.js|/Esprima.js|;
+ print $out $_;
+
+ # Error if there is an "External/" path that we did not rewrite.
+ if ($_ =~ /External\//) {
+ my $sanitizedPath = $inputScriptFilename;
+ $sanitizedPath =~ s/^.*?Workers/Workers/;
+ print "ERROR: $sanitizedPath: Unhandled External importScript in Worker script on line $.: $_";
+ exit 1;
+ }
+ }
+
+ close $out;
+ close IN;
+
+ move $tempFilename, $outputScriptFilename or die "$!";
+}
+
+sub fixWorkerImportsInDirectory($)
+{
+ my $inputDirectory = shift;
+
+ opendir(DIR, $inputDirectory) || die "$!";
+ my @files = grep { !/^\.{1,2}$/ } readdir (DIR);
+ closedir(DIR);
+
+ foreach my $file (@files) {
+ next if $file eq '.' or $file eq '..';
+ my $path = File::Spec->catdir($inputDirectory, $file);
+ if (-d $path) {
+ fixWorkerImportsInDirectory($path);
+ } elsif ($file =~ /\.js$/) {
+ fixWorkerImportsInFile($path, $path);
+ }
+ }
+}
</ins><span class="cx">Property changes on: trunk/Source/WebInspectorUI/Scripts/fix-worker-imports-for-optimized-builds.pl
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnexecutable"></a>
<div class="addfile"><h4>Added: svn:executable</h4></div>
</div>
</body>
</html>