1 // FIXME: De-duplicate this code with perf.webkit.org
2 function TestBuild(repositories, builders, rawRun) {
3 const revisions = rawRun.revisions;
6 for (var repositoryName in revisions) {
7 maxTime = Math.max(maxTime, revisions[repositoryName][1]); // Revision is an pair (revision, time)
10 var maxTimeString = new Date(maxTime).toISOString().replace('T', ' ').replace(/\.\d+Z$/, '');
11 var buildTime = rawRun.buildTime;
12 var buildTimeString = new Date(buildTime).toISOString().replace('T', ' ').replace(/\.\d+Z$/, '');
14 this.time = function () { return maxTime; }
15 this.formattedTime = function () { return maxTimeString; }
16 this.buildTime = function () { return buildTime; }
17 this.formattedBuildTime = function () { return buildTimeString; }
18 this.builder = function () { return builders[rawRun.builder].name; }
19 this.buildNumber = function () { return rawRun.buildNumber; }
20 this.buildUrl = function () {
21 var builderData = builders[rawRun.builder];
22 var template = builderData.buildUrl;
25 return template.replace(/\$builderName/g, builderData.name).replace(/\$buildNumber/g, this.buildNumber());
27 this.revision = function(repositoryId) {
28 var repository = revisions[repositoryId];
29 return repository ? repository[0] : null;
31 this.formattedRevision = function (repositoryId, previousBuild, shouldIncludeNameInLabel) {
32 var repository = repositories[repositoryId];
33 var repositoryName = repository ? repository.name : 'Unknown repository ' + repositoryId;
34 var previousRevision = previousBuild ? previousBuild.revision(repositoryId) : undefined;
35 var currentRevision = this.revision(repositoryId);
36 if (previousRevision === currentRevision)
37 previousRevision = undefined;
39 var revisionPrefix = '';
40 if (currentRevision.length < 10) { // SVN-like revision.
43 previousRevision = (parseInt(previousRevision) + 1);
46 var labelForThisRepository = shouldIncludeNameInLabel ? repositoryName : '';
47 if (previousRevision) {
48 if (labelForThisRepository)
49 labelForThisRepository += ' ';
50 labelForThisRepository += revisionPrefix + previousRevision + '-' + revisionPrefix + currentRevision;
52 labelForThisRepository += ' @' + revisionPrefix + currentRevision;
57 url = (repository['blameUrl'] || '').replace(/\$1/g, previousRevision).replace(/\$2/g, currentRevision);
59 url = (repository['url'] || '').replace(/\$1/g, currentRevision);
63 'name': repositoryName,
64 'label': labelForThisRepository,
65 'currentRevision': currentRevision,
66 'previousRevision': previousRevision,
70 this.formattedRevisions = function (previousBuild) {
72 for (var repositoryId in revisions) {
73 var info = this.formattedRevision(repositoryId, previousBuild, !!revisionCount);
74 result[info.name] = info;