Index: third_party/buildbot_8_4p1/README.chromium |
diff --git a/third_party/buildbot_8_4p1/README.chromium b/third_party/buildbot_8_4p1/README.chromium |
index 2e79182bbd5ab615c5f42cb99a42892bb386b690..390adc740af5190c61f89970d7630af0d38b0e9a 100644 |
--- a/third_party/buildbot_8_4p1/README.chromium |
+++ b/third_party/buildbot_8_4p1/README.chromium |
@@ -8,6 +8,7 @@ Make hidden steps stay hidden even if not finished, add brDoStepIf |
to support buildrunner. |
+ |
iannucci
2013/06/30 08:16:16
don't need this, I think?
Mike Stip (use stip instead)
2013/06/30 08:29:54
Done, now sure how that snuck in.
|
diff --git a/third_party/buildbot_8_4p1/buildbot/process/buildstep.py b/third_party/buildbot_8_4p1/buildbot/process/buildstep.py |
index 4aa307d..21044ea 100644 |
--- a/third_party/buildbot_8_4p1/buildbot/process/buildstep.py |
@@ -2947,3 +2948,67 @@ index ed12ea0..32e1bd3 100644 |
def __init__(self, **kwargs): |
self.factory = (self.__class__, dict(kwargs)) |
+diff --git a/third_party/buildbot_8_4p1/buildbot/status/web/status_json.py b/third_party/buildbot_8_4p1/buildbot/status/web/status_json.py |
+index b656563..054432c 100644 |
+--- a/third_party/buildbot_8_4p1/buildbot/status/web/status_json.py |
++++ b/third_party/buildbot_8_4p1/buildbot/status/web/status_json.py |
+@@ -16,6 +16,7 @@ |
+ |
+ """Simple JSON exporter.""" |
+ |
++import collections |
+ import datetime |
+ import os |
+ import re |
+@@ -635,21 +636,39 @@ class SlaveJsonResource(JsonResource): |
+ self.builders.append(builderName) |
+ return self.builders |
+ |
++ def getSlaveBuildMap(self, buildcache, buildercache): |
++ for builderName in self.getBuilders(): |
++ if builderName not in buildercache: |
++ # This builder hasn't been processed in this request yet. |
++ buildercache.add(builderName) |
++ builder_status = self.status.getBuilder(builderName) |
++ for i in range(1, builder_status.buildCacheSize - 1): |
++ build_status = builder_status.getBuild(-i) |
++ if not build_status or not build_status.isFinished(): |
++ # If not finished, it will appear in runningBuilds. |
++ break |
++ slave = buildcache[build_status.getSlavename()] |
++ slave.setdefault(builderName, []).append( |
++ build_status.getNumber()) |
++ return buildcache[self.name] |
++ |
+ def asDict(self, request): |
++ if not hasattr(request, 'requestdata'): |
++ request.requestdata = {} |
++ if 'buildcache' not in request.requestdata: |
++ # buildcache is used to cache build information across multiple |
++ # invocations of SlaveJsonResource. It should be set to an empty |
++ # collections.defaultdict(dict). |
++ request.requestdata['buildcache'] = collections.defaultdict(dict) |
++ |
++ # Tracks which builders have been stored in the buildcache. |
++ request.requestdata['buildercache'] = set() |
++ |
+ results = self.slave_status.asDict() |
+ # Enhance it by adding more informations. |
+- results['builders'] = {} |
+- for builderName in self.getBuilders(): |
+- builds = [] |
+- builder_status = self.status.getBuilder(builderName) |
+- for i in range(1, builder_status.buildCacheSize - 1): |
+- build_status = builder_status.getBuild(-i) |
+- if not build_status or not build_status.isFinished(): |
+- # If not finished, it will appear in runningBuilds. |
+- break |
+- if build_status.getSlavename() == self.name: |
+- builds.append(build_status.getNumber()) |
+- results['builders'][builderName] = builds |
++ results['builders'] = self.getSlaveBuildMap( |
++ request.requestdata['buildcache'], |
++ request.requestdata['buildercache']) |
+ return results |
+ |
+ |