Diff
Modified: trunk/Tools/ChangeLog (91486 => 91487)
--- trunk/Tools/ChangeLog 2011-07-21 19:13:47 UTC (rev 91486)
+++ trunk/Tools/ChangeLog 2011-07-21 19:14:39 UTC (rev 91487)
@@ -1,5 +1,22 @@
2011-07-21 Adam Barth <[email protected]>
+ garden-o-matic should be able to rebaseline many tests at once
+ https://bugs.webkit.org/show_bug.cgi?id=64963
+
+ Reviewed by Dimitri Glazkov.
+
+ This patch contains some UI for rebaselining tests in bulk. I don't
+ expect this UI to be the final UI, but the underlying infrastructure
+ will be useful.
+
+ * Scripts/webkitpy/tool/servers/data/gardeningserver/checkout.js:
+ * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
+ * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
+ * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
+ * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
+
+2011-07-21 Adam Barth <[email protected]>
+
garden-o-matic has trouble when the same test fails in different ways on diffrent bots
https://bugs.webkit.org/show_bug.cgi?id=64830
Modified: trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/checkout.js (91486 => 91487)
--- trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/checkout.js 2011-07-21 19:13:47 UTC (rev 91486)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/checkout.js 2011-07-21 19:14:39 UTC (rev 91487)
@@ -36,11 +36,11 @@
extensionList = extensionList.concat(results.failureTypeToExtensionList(failureType));
});
- var requestsInFlight = extensionList.length;
-
- if (!requestsInFlight)
+ if (!extensionList.length)
callback();
+ var requestTracker = new base.RequestTracker(extensionList.length, callback);
+
$.each(extensionList, function(index, extension) {
$.post('/rebaseline?' + $.param({
'builder': builderName,
@@ -48,11 +48,26 @@
// FIXME: Rename "suffix" query parameter to "extension".
'suffix': extension
}), function() {
- --requestsInFlight;
- if (!requestsInFlight)
- callback();
+ requestTracker.requestComplete();
});
});
};
+checkout.rebaselineAll = function(rebaselineTasks, callback)
+{
+ var nextIndex = 0;
+
+ function rebaselineNext()
+ {
+ if (nextIndex >= rebaselineTasks.length) {
+ callback();
+ return;
+ }
+ var task = rebaselineTasks[nextIndex++];
+ checkout.rebaseline(task.builderName, task.testName, task.failureTypeList, rebaselineNext);
+ }
+
+ rebaselineNext();
+};
+
})();
Modified: trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/index.html (91486 => 91487)
--- trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/index.html 2011-07-21 19:13:47 UTC (rev 91486)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/index.html 2011-07-21 19:14:39 UTC (rev 91487)
@@ -17,6 +17,7 @@
<div class="toolbar">
<div class="actions">
<button class="triage">Triage Failures</button>
+ <button class="rebaseline-selected">Rebaseline Selected</button>
</div>
</div>
</div>
Modified: trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.js (91486 => 91487)
--- trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.js 2011-07-21 19:13:47 UTC (rev 91486)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.js 2011-07-21 19:14:39 UTC (rev 91487)
@@ -246,6 +246,31 @@
g_resultsDetailsIterator.callNext();
}
+function rebaselineSelected()
+{
+ var rebaselineTasks = [];
+
+ $('.results .test input:checkbox').each(function() {
+ if (!this.checked)
+ return;
+ var testSummary = $(this).parents('.test');
+ var testName = testSummary.attr(config.kTestNameAttr);
+ $('.builder-name', testSummary).each(function() {
+ var builderName = $(this).attr(config.kBuilderNameAttr);
+ var failureTypes = $(this).attr(config.kFailureTypesAttr);
+ var failureTypeList = failureTypes.split(' ');
+ rebaselineTasks.push({
+ 'builderName': builderName,
+ 'testName': testName,
+ 'failureTypeList': failureTypeList,
+ });
+ });
+ });
+
+ displayOnButterbar('Rebaselining...');
+ checkout.rebaselineAll(rebaselineTasks, dismissButterbar);
+}
+
function rebaselineResults()
{
var failureDetails = $('.failure-details', $(this).parents('.results-detail'));
@@ -278,6 +303,7 @@
}
$('.results .toolbar .triage').live('click', triageFailures);
+$('.results .toolbar .rebaseline-selected').live('click', rebaselineSelected);
$('.results-detail .actions .next').live('click', nextResultsDetail);
$('.results-detail .actions .previous').live('click', previousResultsDetail);
$('.results-detail .actions .rebaseline').live('click', rebaselineResults);
Modified: trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js (91486 => 91487)
--- trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js 2011-07-21 19:13:47 UTC (rev 91486)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js 2011-07-21 19:14:39 UTC (rev 91487)
@@ -203,7 +203,7 @@
return resultsList.concat(kFailingResults);
}
-function unexpectedResults(resultNode)
+results.unexpectedResults = function(resultNode)
{
var actualResults = resultNode.actual.split(' ');
var expectedResults = addImpliedExpectations(resultNode.expected.split(' '))
@@ -211,7 +211,7 @@
return $.grep(actualResults, function(result) {
return expectedResults.indexOf(result) == -1;
});
-}
+};
function isUnexpectedFailure(resultNode)
{
@@ -219,7 +219,7 @@
return false;
if (anyIsSuccess(resultNode.actual.split(' ')))
return false;
- return anyIsFailure(unexpectedResults(resultNode));
+ return anyIsFailure(results.unexpectedResults(resultNode));
}
function isResultNode(node)
@@ -253,12 +253,11 @@
results.collectUnexpectedResults = function(dictionaryOfResultNodes)
{
- var collectedResults = {};
- var results = [];
+ var collectedResults = [];
$.each(dictionaryOfResultNodes, function(key, resultNode) {
- results = results.concat(unexpectedResults(resultNode));
+ collectedResults = collectedResults.concat(results.unexpectedResults(resultNode));
});
- return base.uniquifyArray(results);
+ return base.uniquifyArray(collectedResults);
};
function walkHistory(builderName, testName, callback)
Modified: trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js (91486 => 91487)
--- trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js 2011-07-21 19:13:47 UTC (rev 91486)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js 2011-07-21 19:14:39 UTC (rev 91487)
@@ -48,6 +48,7 @@
var unexpectedResults = results.collectUnexpectedResults(resultNodesByBuilder);
var block = $(
'<tr class="test">' +
+ '<td><input type="checkbox"></td>' +
'<td class="what"><a class="test-name"></a></td>' +
'<td class="where"><ul></ul></td>' +
'<td class="when"></td>' +
@@ -61,7 +62,7 @@
var where = $('.where', block);
$.each(resultNodesByBuilder, function(builderName, resultNode) {
var listElement = $('<li class="builder-name"></li>');
- listElement.attr(config.kBuilderNameAttr, builderName).text(displayNameForBuilder(builderName));
+ listElement.attr(config.kBuilderNameAttr, builderName).attr(config.kFailureTypesAttr, results.unexpectedResults(resultNode)).text(displayNameForBuilder(builderName));
where.append(listElement);
});