1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
from buildbot.steps.blocker import Blocker, BuilderStatusReceiver, BadStepError
from buildbot.process import buildstep
from buildbot.status.results import SUCCESS, FAILURE
class YoctoBlocker(Blocker):
VALID_IDLE_POLICIES = Blocker.VALID_IDLE_POLICIES + ("run",)
name = "YoctoBlocker"
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.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 buildsMatch(self, buildStatus1, buildStatus2):
return \
buildStatus1.getProperties().has_key("DEST") and \
buildStatus2.getProperties().has_key("DEST") and \
buildStatus1.getProperties()["DEST"] == \
buildStatus2.getProperties()["DEST"]
|