OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 | 63 |
64 for (var i = individualBuilderStatus.cachedBuilds.length - 1; i >= 0; --i) { | 64 for (var i = individualBuilderStatus.cachedBuilds.length - 1; i >= 0; --i) { |
65 var buildNumber = individualBuilderStatus.cachedBuilds[i]; | 65 var buildNumber = individualBuilderStatus.cachedBuilds[i]; |
66 if (individualBuilderStatus.currentBuilds.indexOf(buildNumber) == -1) | 66 if (individualBuilderStatus.currentBuilds.indexOf(buildNumber) == -1) |
67 return buildNumber; | 67 return buildNumber; |
68 } | 68 } |
69 | 69 |
70 return null; | 70 return null; |
71 } | 71 } |
72 | 72 |
73 var g_buildInfoCache = new base.AsynchronousCache(function(key, callback) { | 73 var g_buildInfoCache = new base.AsynchronousCache(function(key) { |
74 var explodedKey = key.split('\n'); | 74 var explodedKey = key.split('\n'); |
75 net.json(urlForBuildInfo(explodedKey[0], explodedKey[1])).then(callback); | 75 return net.json(urlForBuildInfo(explodedKey[0], explodedKey[1])); |
76 }); | 76 }); |
77 | 77 |
78 builders.clearBuildInfoCache = function() | 78 builders.clearBuildInfoCache = function() |
79 { | 79 { |
80 g_buildInfoCache.clear(); | 80 g_buildInfoCache.clear(); |
81 }; | 81 }; |
82 | 82 |
83 function fetchMostRecentBuildInfoByBuilder(callback) | 83 function fetchMostRecentBuildInfoByBuilder() |
84 { | 84 { |
85 net.json(config.buildConsoleURL + '/json/builders').then(function(builderSta
tus) { | 85 var buildInfoByBuilder = {}; |
86 var buildInfoByBuilder = {}; | 86 var requestPromises = []; |
| 87 return net.json(config.buildConsoleURL + '/json/builders').then(function(bui
lderStatus) { |
87 var builderNames = Object.keys(builderStatus); | 88 var builderNames = Object.keys(builderStatus); |
88 var requestTracker = new base.RequestTracker(builderNames.length, callba
ck, [buildInfoByBuilder]); | |
89 builderNames.forEach(function(builderName) { | 89 builderNames.forEach(function(builderName) { |
90 if (!config.builderApplies(builderName)) { | 90 if (!config.builderApplies(builderName)) |
91 requestTracker.requestComplete(); | |
92 return; | 91 return; |
93 } | |
94 | 92 |
95 var buildNumber = mostRecentCompletedBuildNumber(builderStatus[build
erName]); | 93 var buildNumber = mostRecentCompletedBuildNumber(builderStatus[build
erName]); |
96 if (!buildNumber) { | 94 if (!buildNumber) |
97 buildInfoByBuilder[builderName] = null; | |
98 requestTracker.requestComplete(); | |
99 return; | 95 return; |
100 } | |
101 | 96 |
102 g_buildInfoCache.get(builderName + '\n' + buildNumber, function(buil
dInfo) { | 97 requestPromises.push(g_buildInfoCache.get(builderName + '\n' + build
Number) |
103 buildInfoByBuilder[builderName] = buildInfo; | 98 .then(function(buildInfo) { |
104 requestTracker.requestComplete(); | 99 buildInfoByBuilder[builderName] = buildInfo
; |
105 }); | 100 })); |
| 101 }); |
| 102 |
| 103 return Promise.all(requestPromises).then(function() { |
| 104 return buildInfoByBuilder; |
106 }); | 105 }); |
107 }); | 106 }); |
108 } | 107 } |
109 | 108 |
110 builders.buildersFailingNonLayoutTests = function(callback) | 109 builders.buildersFailingNonLayoutTests = function() |
111 { | 110 { |
112 fetchMostRecentBuildInfoByBuilder(function(buildInfoByBuilder) { | 111 return fetchMostRecentBuildInfoByBuilder().then(function(buildInfoByBuilder)
{ |
113 var failureList = {}; | 112 var failureList = {}; |
114 $.each(buildInfoByBuilder, function(builderName, buildInfo) { | 113 $.each(buildInfoByBuilder, function(builderName, buildInfo) { |
115 if (!buildInfo) | 114 if (!buildInfo) |
116 return; | 115 return; |
117 var failures = failingSteps(buildInfo); | 116 var failures = failingSteps(buildInfo); |
118 if (failures.length) | 117 if (failures.length) |
119 failureList[builderName] = failures.map(function(failure) { retu
rn failure.name; }); | 118 failureList[builderName] = failures.map(function(failure) { retu
rn failure.name; }); |
120 }); | 119 }); |
121 callback(failureList); | 120 return failureList; |
122 }); | 121 }); |
123 }; | 122 }; |
124 | 123 |
125 builders.mostRecentBuildForBuilder = function(builderName, callback) { | 124 builders.mostRecentBuildForBuilder = function(builderName) { |
126 net.json(config.buildConsoleURL + '/json/builders/' + builderName).then(func
tion(builderStatus) { | 125 return net.json(config.buildConsoleURL + '/json/builders/' + builderName).th
en(function(builderStatus) { |
127 var cachedBuilds = builderStatus.cachedBuilds; | 126 var cachedBuilds = builderStatus.cachedBuilds; |
128 var mostRecentBuild = Math.max.apply(Math, cachedBuilds); | 127 var mostRecentBuild = Math.max.apply(Math, cachedBuilds); |
129 callback(mostRecentBuild); | 128 return mostRecentBuild; |
130 }); | 129 }); |
131 }; | 130 }; |
132 | 131 |
133 })(); | 132 })(); |
OLD | NEW |