summaryrefslogtreecommitdiffstats
path: root/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js')
-rw-r--r--Tools/BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js80
1 files changed, 80 insertions, 0 deletions
diff --git a/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js b/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js
new file mode 100644
index 0000000..c15aef2
--- /dev/null
+++ b/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/LeaksViewer/RecentBuildsLoader.js
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+function RecentBuildsLoader(didLoadRecentBuildsCallback) {
+ this._didLoadRecentBuildsCallback = didLoadRecentBuildsCallback;
+}
+
+RecentBuildsLoader.prototype = {
+ start: function(builderName, maximumNumberOfBuilds) {
+ var url = this._buildbotBaseURL + "/json/builders/" + builderName + "/builds/?";
+ url += range(maximumNumberOfBuilds).map(function(n) { return "select=-" + (n + 1); }).join("&");
+ var self = this;
+ getResource(url, function(xhr) {
+ var data = JSON.parse(xhr.responseText);
+ var builds = [];
+ Object.keys(data).forEach(function(buildNumber) {
+ var build = data[buildNumber];
+
+ var buildInfo = {
+ revision: build.sourceStamp.changes[0].rev,
+ leakCount: 0,
+ url: null,
+ };
+ for (var stepIndex = 0; stepIndex < build.steps.length; ++stepIndex) {
+ var step = build.steps[stepIndex];
+ if (step.name === "layout-test") {
+ if (!("text" in step))
+ continue;
+ var strings = step.text;
+ for (var stringIndex = 0; stringIndex < strings.length; ++stringIndex) {
+ var match = /^(\d+) total leaks found!$/.exec(strings[stringIndex]);
+ if (!match)
+ continue;
+ buildInfo.leakCount = parseInt(match[1], 10);
+ break;
+ }
+ } else if (step.name === "MasterShellCommand") {
+ if (!("urls" in step))
+ return;
+ if (!("view results" in step.urls))
+ return;
+ buildInfo.url = self._buildbotBaseURL + step.urls["view results"] + "/";
+ }
+
+ if (buildInfo.leakCount && buildInfo.url) {
+ builds.push(buildInfo);
+ break;
+ }
+ }
+ });
+ // Sort descending by revision.
+ builds.sort(function(a, b) { return b.revision - a.revision; });
+ self._didLoadRecentBuildsCallback(builds);
+ });
+ },
+
+ _buildbotBaseURL: "http://build.webkit.org/",
+};