Reverted erroneously committed changes from the previous commit.
[WebKit-https.git] / Websites / test-results / js / build.js
1 // FIXME: De-duplicate this code with perf.webkit.org
2 function TestBuild(repositories, builders, rawRun) {
3     const revisions = rawRun.revisions;
4     var maxTime = 0;
5     var revisionCount = 0;
6     for (var repositoryName in revisions) {
7         maxTime = Math.max(maxTime, revisions[repositoryName][1]); // Revision is an pair (revision, time)
8         revisionCount++;
9     }
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$/, '');
13
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;
23         if (!template)
24             return null;
25         return template.replace(/\$builderName/g, builderData.name).replace(/\$buildNumber/g, this.buildNumber());
26     }
27     this.revision = function(repositoryId) {
28         var repository = revisions[repositoryId];
29         return repository ? repository[0] : null;
30     }
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;
38
39         var revisionPrefix = '';
40         if (currentRevision.length < 10) { // SVN-like revision.
41             revisionPrefix = 'r';
42             if (previousRevision)
43                 previousRevision = (parseInt(previousRevision) + 1);
44         }
45
46         var labelForThisRepository = shouldIncludeNameInLabel ? repositoryName : '';
47         if (previousRevision) {
48             if (labelForThisRepository)
49                 labelForThisRepository += ' ';
50             labelForThisRepository += revisionPrefix + previousRevision + '-' + revisionPrefix + currentRevision;
51         } else
52             labelForThisRepository += ' @' + revisionPrefix + currentRevision;
53
54         var url;
55         if (repository) {
56             if (previousRevision)
57                 url = (repository['blameUrl'] || '').replace(/\$1/g, previousRevision).replace(/\$2/g, currentRevision);
58             else
59                 url = (repository['url'] || '').replace(/\$1/g, currentRevision);
60         }
61
62         return {
63             'name': repositoryName,
64             'label': labelForThisRepository,
65             'currentRevision': currentRevision,
66             'previousRevision': previousRevision,
67             'url': url,
68         };
69     }
70     this.formattedRevisions = function (previousBuild) {
71         var result = {};
72         for (var repositoryId in revisions) {
73             var info = this.formattedRevision(repositoryId, previousBuild, !!revisionCount);
74             result[info.name] = info;
75         }
76         return result;
77     }
78 }