| 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 |