Add links to Windows crash logs in results.html
authoraroben@apple.com <aroben@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 3 Feb 2011 22:54:33 +0000 (22:54 +0000)
committeraroben@apple.com <aroben@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 3 Feb 2011 22:54:33 +0000 (22:54 +0000)
Fixes <http://webkit.org/b/53718> run-webkit-tests should link to Windows crash logs in
results.html

Reviewed by David Kilzer.

* Scripts/old-run-webkit-tests:
(top level): Added $crashLogTag and $windowsCrashLogFilePrefix (which came from
createDebuggerCommandFile).
(testCrashedOrTimedOut): If the test crashed, capture any saved crash log after the dump
tool has exited.
(captureSavedCrashLog): Added. Finds the crash log for the test that just crashed and moves
it into the test results directory tree. Only implemented for Cygwin currently.
(findNewestFileMatchingGlob): Added. Does what it says.
(htmlForResultsSection): Only link to files that exist.
(linksForErrorTest): Add a link to the crash log.
(deleteExpectedAndActualResults): Delete any old crash log for this test.
(createDebuggerCommandFile): Use the new $windowsCrashLogFilePrefix constant instead of
hardcoding it here.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@77537 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/Scripts/old-run-webkit-tests

index 710215243c4258bff6d6500aecc3078f62e0d87e..dffb30afcee6dd8befa97a6eb1e8ffbab2e82c4a 100644 (file)
@@ -1,3 +1,26 @@
+2011-02-03  Adam Roben  <aroben@apple.com>
+
+        Add links to Windows crash logs in results.html
+
+        Fixes <http://webkit.org/b/53718> run-webkit-tests should link to Windows crash logs in
+        results.html
+
+        Reviewed by David Kilzer.
+
+        * Scripts/old-run-webkit-tests:
+        (top level): Added $crashLogTag and $windowsCrashLogFilePrefix (which came from
+        createDebuggerCommandFile).
+        (testCrashedOrTimedOut): If the test crashed, capture any saved crash log after the dump
+        tool has exited.
+        (captureSavedCrashLog): Added. Finds the crash log for the test that just crashed and moves
+        it into the test results directory tree. Only implemented for Cygwin currently.
+        (findNewestFileMatchingGlob): Added. Does what it says.
+        (htmlForResultsSection): Only link to files that exist.
+        (linksForErrorTest): Add a link to the crash log.
+        (deleteExpectedAndActualResults): Delete any old crash log for this test.
+        (createDebuggerCommandFile): Use the new $windowsCrashLogFilePrefix constant instead of
+        hardcoding it here.
+
 2011-02-03  Adam Roben  <aroben@apple.com>
 
         Tell the debugger the path to the WebKit source tree when saving a crash log
index c2e0f47c7674bcc62cb0b2a68e995c95fc6ec14d..80dcc634fdad7ee2498b2c9675a74b994af1254e 100755 (executable)
@@ -77,6 +77,7 @@ use POSIX;
 
 sub buildPlatformResultHierarchy();
 sub buildPlatformTestHierarchy(@);
+sub captureSavedCrashLog($);
 sub checkPythonVersion();
 sub closeCygpaths();
 sub closeDumpTool();
@@ -89,6 +90,7 @@ sub dumpToolDidCrash();
 sub epiloguesAndPrologues($$);
 sub expectedDirectoryForTest($;$;$);
 sub fileNameWithNumber($$);
+sub findNewestFileMatchingGlob($);
 sub htmlForResultsSection(\@$&);
 sub isTextOnlyTest($);
 sub launchWithEnv(\@\%);
@@ -189,6 +191,9 @@ my $actualTag = "actual";
 my $prettyDiffTag = "pretty-diff";
 my $diffsTag = "diffs";
 my $errorTag = "stderr";
+my $crashLogTag = "crash-log";
+
+my $windowsCrashLogFilePrefix = "CrashLog";
 
 # These are defined here instead of closer to where they are used so that they
 # will always be accessible from the END block that uses them, even if the user
@@ -1731,7 +1736,9 @@ sub testCrashedOrTimedOut($$$$$$)
     kill 9, $dumpToolPID unless $didCrash;
 
     closeDumpTool();
-    
+
+    captureSavedCrashLog($base) if $didCrash;
+
     return unless isCygwin() && !$didCrash && $base =~ /^http/;
     # On Cygwin, http tests timing out can be a symptom of a non-responsive httpd.
     # If we timed out running an http test, try restarting httpd.
@@ -1739,6 +1746,35 @@ sub testCrashedOrTimedOut($$$$$$)
     configureAndOpenHTTPDIfNeeded();
 }
 
+sub captureSavedCrashLog($)
+{
+    my ($base) = @_;
+
+    my $crashLog;
+    if (isCygwin()) {
+        # We assume that the newest crash log in $testResultsDirectory is the one that corresponds to the crash that just occurred.
+        my $newestCrashLog = findNewestFileMatchingGlob(File::Spec->catfile($testResultsDirectory, $windowsCrashLogFilePrefix . "*.txt"));
+
+        # The crash log must have been created after this script started running.
+        $crashLog = $newestCrashLog if -M $newestCrashLog < 0;
+    }
+    return unless $crashLog;
+
+    move($crashLog, File::Spec->catfile($testResultsDirectory, "$base-$crashLogTag.txt"));
+}
+
+sub findNewestFileMatchingGlob($)
+{
+    my ($glob) = @_;
+
+    my @paths = glob $glob;
+    return unless @paths;
+
+    my @pathsAndTimes = map { [$_, -M $_] } @paths;
+    @pathsAndTimes = sort { $b->[1] <=> $a->[1] } @pathsAndTimes;
+    return $pathsAndTimes[$#pathsAndTimes]->[0];
+}
+
 sub printFailureMessageForTest($$)
 {
     my ($test, $description) = @_;
@@ -1865,7 +1901,9 @@ sub htmlForResultsSection(\@$&)
         push @html, "<tr>";
         push @html, "<td><a href=\"" . toURL("$testDirectory/$test") . "\">$test</a></td>";
         foreach my $link (@{&{$linkGetter}($test)}) {
-            push @html, "<td><a href=\"$link->{href}\">$link->{text}</a></td>";
+            push @html, "<td>";
+            push @html, "<a href=\"$link->{href}\">$link->{text}</a>" if -f File::Spec->catfile($testResultsDirectory, $link->{href});
+            push @html, "</td>";
         }
         push @html, "</tr>";
     }
@@ -1921,6 +1959,7 @@ sub linksForErrorTest
 
     push @links, @{linksForExpectedAndActualResults($base)};
     push @links, { href => "$base-$errorTag.txt", text => "stderr" };
+    push @links, { href => "$base-$crashLogTag.txt", text => "crash log" };
 
     return \@links;
 }
@@ -1951,6 +1990,7 @@ sub deleteExpectedAndActualResults($)
     unlink "$testResultsDirectory/$base-$actualTag.txt";
     unlink "$testResultsDirectory/$base-$diffsTag.txt";
     unlink "$testResultsDirectory/$base-$errorTag.txt";
+    unlink "$testResultsDirectory/$base-$crashLogTag.txt";
 }
 
 sub recordActualResultsAndDiff($$)
@@ -2458,7 +2498,7 @@ sub createDebuggerCommandFile()
     return unless isCygwin();
 
     my @commands = (
-        '.logopen /t "' . toWindowsPath($testResultsDirectory) . '\CrashLog.txt"',
+        '.logopen /t "' . toWindowsPath($testResultsDirectory) . "\\" . $windowsCrashLogFilePrefix . '.txt"',
         '.srcpath "' . toWindowsPath(sourceDir()) . '"',
         '!analyze -vv',
         '~*kpn',