def _getBuildStatus(self, botmaster, builderName): try: builder = botmaster.builders[builderName] except KeyError: raise BadStepError("no builder named %r" % builderName) myBuildStatus = self.build.getStatus() builderStatus = builder.builder_status matchingBuild = None all_builds = (builderStatus.buildCache.values() + builderStatus.getCurrentBuilds()) for buildStatus in all_builds: if self.buildsMatch(myBuildStatus, buildStatus): matchingBuild = buildStatus break if matchingBuild is None: msg = "no matching builds found in builder %r" % builderName if self.idlePolicy == "error": raise BadStepError(msg + " (is it idle?)") elif self.idlePolicy == "ignore": self._log(msg + ": skipping it") return None elif self.idlePolicy == "block": self._log(msg + ": will block until it starts a build") self._blocking_builders.add(builderStatus) return None elif self.idlePolicy == "run": self._log(msg + ": start build for break the block") from buildbot.process.builder import BuilderControl from buildbot.sourcestamp import SourceStamp bc = BuilderControl(builder, botmaster) bc.submitBuildRequest(SourceStamp(), "start for break the block", props = { 'uniquebuildnumber': (myBuildStatus.getProperties()['uniquebuildnumber'], 'Build'), } ) all_builds = (builderStatus.buildCache.values() + builderStatus.getCurrentBuilds()) for buildStatus in all_builds: if self.buildsMatch(myBuildStatus, buildStatus): matchingBuild = buildStatus break self._blocking_builders.add(builderStatus) self._log("found builder %r: %r", builderName, builder) return matchingBuild
def getBuilder(self, name): b = self.master.botmaster.builders[name] return BuilderControl(b, self)