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 29ba9ed3baaed33838dcf05b607869a2cc492a43..eccb55f829c669f46eb94a39b0d3d0d813bb1466 100644 |
--- a/Tools/GardeningServer/model/ct-commit-log.html |
+++ b/Tools/GardeningServer/model/ct-commit-log.html |
@@ -6,32 +6,54 @@ found in the LICENSE file. |
<link rel='import' href='ct-commit.html'> |
+<link rel='import' href='ct-repositories.html'> |
+ |
<script> |
function CTCommitLog() { |
- // FIXME: This should be a map of repo-name to revision log using the same |
- // repo names that auto-sheriff.appspot's json uses. |
- |
- // FIXME: Use better feeds. |
- // https://chromium.googlesource.com/chromium/blink/+log/master?format=json |
- // https://chromium.googlesource.com/chromium/chromium/+log/master?format=json |
- // https://code.google.com/feeds/p/skia/svnchanges/basic |
- // https://code.google.com/feeds/p/v8/svnchanges/basic |
- // https://code.google.com/feeds/p/nativeclient/svnchanges/basic |
this.commits = {}; |
+ this.firstRevision = {}; |
+ this._repositories = new CTRepositories(); |
} |
CTCommitLog.prototype.update = function() { |
- // FIXME: Turn net.js into net.html and import it at the top of this file. |
- return net.xml('http://blink.lc/blink/atom').then(this._processXml.bind(this)); |
+ var requests = []; |
+ Object.keys(this._repositories.repositories, (function(name, repository) { |
+ var responseHandler = this._handleResponse.bind(this, repository.repositoryUrl, repository.name); |
+ // FIXME: Turn net.js into net.html and import it at the top of this file. |
+ requests.push(net.ajax({url: repository.dataUrl}).then(responseHandler)); |
+ }.bind(this))); |
+ return Promise.all(requests); |
} |
-CTCommitLog.prototype._processXml = function(xml) { |
- Array.prototype.forEach.call(xml.getElementsByTagName('entry'), function(logentry) { |
- var author = logentry.getElementsByTagName('author')[0].textContent.trim(); |
- var message = logentry.getElementsByTagName('content')[0].textContent.trim(); |
- // FIXME: Handle base urls for different repos. |
- var commit = new CTCommit(author, message, 'http://src.chromium.org/viewvc/blink'); |
- this.commits[commit.revision] = commit; |
+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; |
}.bind(this)); |
+ |
+ this.firstRevision[repository] = Object.keys(this.commits[repository]).sort()[0]; |
+} |
+ |
+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)); |
+ } |
+ } |
+ return commits; |
} |
</script> |