Index: Tools/GardeningServer/model/ct-failures.html |
diff --git a/Tools/GardeningServer/model/ct-failures.html b/Tools/GardeningServer/model/ct-failures.html |
index bccc35b83127308123be4e05bca40575e2488c1f..10520a7cee7d25a53b56415b207a143df9c5fce2 100644 |
--- a/Tools/GardeningServer/model/ct-failures.html |
+++ b/Tools/GardeningServer/model/ct-failures.html |
@@ -5,6 +5,7 @@ found in the LICENSE file. |
--> |
<link rel="import" href="../lib/net.html"> |
+<link rel="import" href="../lib/util.html"> |
<link rel="import" href="ct-builder-revisions.html"> |
<link rel="import" href="ct-failure.html"> |
<link rel="import" href="ct-failure-group.html"> |
@@ -14,7 +15,8 @@ found in the LICENSE file. |
function CTFailures(commitLog) { |
this.commitLog = commitLog; |
this.builderLatestRevisions = null; |
- this.failures = null; |
+ // Maps a tree id to an array of CTFailureGroups within that tree. |
+ this.failures = {}; |
this.lastUpdateDate = null; |
// FIXME: Get this from |
@@ -81,18 +83,19 @@ CTFailures.prototype.update = function() { |
annotationPromise.then(function(annotations) { |
// FIXME: Don't special-case the blink master. |
this.builderLatestRevisions = new CTBuilderRevisions(data.latest_builder_info['chromium.webkit']); |
- this.failures = {}; |
+ var newFailures = {}; |
this.lastUpdateDate = new Date(data.date * 1000); |
// Update |failures| with the appropriate CTFailureGroup's for each |
// tree. |
data.range_groups.forEach(function(rangeGroup) { |
- this._processFailuresForRangeGroup(rangeGroup, data.alerts, annotations); |
+ this._processFailuresForRangeGroup(newFailures, rangeGroup, data.alerts, annotations); |
}.bind(this)); |
// Sort failure groups so that newer failures are shown at the top |
// of the UI. |
- Object.keys(this.failures, function (tree, failuresByTree) { |
- this.failures[tree].sort(this._failureByTreeListComparator.bind(this, tree)); |
+ Object.keys(newFailures, function (tree, failuresByTree) { |
+ failuresByTree.sort(this._failureByTreeListComparator.bind(this, tree)); |
}.bind(this)); |
+ util.updateLeft(this.failures, newFailures); |
}.bind(this)); |
}.bind(this)); |
}; |
@@ -109,7 +112,7 @@ CTFailures.prototype._failureComparator = function(a, b) { |
return 0; |
}; |
-CTFailures.prototype._processFailuresForRangeGroup = function(rangeGroup, alerts, annotations) { |
+CTFailures.prototype._processFailuresForRangeGroup = function(newFailures, rangeGroup, alerts, annotations) { |
var masterToTree = {}; |
Object.keys(this._trees, function(tree, masters) { |
masters.forEach(function(master) { |
@@ -166,6 +169,7 @@ CTFailures.prototype._processFailuresForRangeGroup = function(rangeGroup, alerts |
if (!Object.keys(failuresByReason).length) |
return; |
+ // Maps a tree id to a list of CTFailures in that tree. |
var groupedFailures = {}; |
Object.keys(failuresByReason, function(reasonKey, resultsByTree) { |
var failure = JSON.parse(reasonKey); |
@@ -180,10 +184,10 @@ CTFailures.prototype._processFailuresForRangeGroup = function(rangeGroup, alerts |
Object.keys(groupedFailures, function(tree, failures) { |
failures.sort(this._failureComparator); |
- if (!this.failures[tree]) |
- this.failures[tree] = []; |
+ if (!newFailures[tree]) |
+ newFailures[tree] = []; |
var commitList = new CTCommitList(this.commitLog, rangeGroup.likely_revisions); |
- this.failures[tree].push(new CTFailureGroup(failures, commitList)); |
+ newFailures[tree].push(new CTFailureGroup(rangeGroup.sort_key, failures, commitList)); |
}.bind(this)); |
}; |