Index: Tools/GardeningServer/model/ct-commit-log.html |
diff --git a/Tools/GardeningServer/model/ct-commit-log.html b/Tools/GardeningServer/model/ct-commit-log.html |
index fa39b8252dafbeaa323e00853a540c4740f28e09..6bfa08dbe321a2003d56cc7d1720bb71a228eaba 100644 |
--- a/Tools/GardeningServer/model/ct-commit-log.html |
+++ b/Tools/GardeningServer/model/ct-commit-log.html |
@@ -14,6 +14,10 @@ function CTCommitLog() { |
this.firstRevision = {}; |
this.lastRevision = {}; |
this._repositories = new CTRepositories(); |
+ |
+ this._repositories.names.forEach(function(name) { |
+ this.commits[name] = {}; |
+ }.bind(this)); |
} |
CTCommitLog.prototype.update = function() { |
@@ -27,14 +31,23 @@ CTCommitLog.prototype.update = function() { |
} |
CTCommitLog.prototype._handleResponse = function(repositoryUrl, repository, json) { |
- if (!this.commits[repository]) |
- this.commits[repository] = {}; |
- |
// FIXME: Fix googlesource to not do this outdated JSON XSS mitigation. |
json = json.substring(')]}\n'.length); |
JSON.parse(json).log.forEach(function(entry) { |
- var commit = CTCommit.create(entry.author.name, entry.message, repositoryUrl, repository); |
- this.commits[repository][commit.revision] = commit; |
+ var author = entry.author.name; |
+ var message = entry.message; |
+ var revision = CTCommit.findRevision(message); |
+ |
+ // Check for existing commit for that revision, and possibly complete it. |
+ // We update the existing commit instead of creating a new one so that the |
+ // data-binding properly updates all the <ct-commit>'s. |
+ var existingCommit = this.commits[repository][revision]; |
+ if (existingCommit && !existingCommit.isComplete) { |
+ existingCommit.complete(author, message, revision); |
+ } else { |
+ var commit = CTCommit.create(author, message, repositoryUrl, repository); |
+ this.commits[repository][commit.revision] = commit; |
+ } |
}.bind(this)); |
this._findFirstAndLastRevisions(repository); |
@@ -49,17 +62,19 @@ CTCommitLog.prototype._findFirstAndLastRevisions = function(repository) { |
CTCommitLog.prototype.range = function(repository, first, last) { |
var commits = []; |
for (var revision = first; revision <= last; revision++) { |
- // Until we've seen a commit we have data for, fill in dummy data |
- // so that we show something. Assume that we have the correct data |
- // for all the commits after the first one we have data for. |
- if (revision >= this.firstRevision[repository]) { |
- var commit = this.commits[repository][revision]; |
- if (commit) |
- commits.push(commit); |
- } else { |
- var url = this._repositories.repositories[repository].repositoryUrl; |
- commits.push(CTCommit.createIncomplete(url, revision, repository)); |
- } |
+ var commit = this.commits[repository][revision]; |
+ if (!commit) { |
+ // FIXME: This is wrong. If we iterate through revisions and then later |
+ // in handleReponse we realize that this revision doesn't actually exist |
+ // in the repo (e.g. because it corresponds to a branch commit), then we |
+ // don't remove the incomplete commit. |
+ var url = this._repositories.repositories[repository].repositoryUrl; |
+ commit = CTCommit.createIncomplete(url, revision, repository); |
+ this.commits[repository][revision] = commit; |
+ } |
+ |
+ if (commit) |
+ commits.push(commit); |
} |
return commits; |
} |