Skip to content

Commit

Permalink
BuildStep: Make getStepFactory return a factory function.
Browse files Browse the repository at this point in the history
Previously, it returned a factory, and arguments for the factory.
This was used to print an error when the factory failed. This is moved
into the factory function itself. The config also checks step locks. This
functionality will be removed.
  • Loading branch information
tomprince committed Mar 31, 2012
1 parent fe0de93 commit 87ba738
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 24 deletions.
10 changes: 2 additions & 8 deletions master/buildbot/process/build.py
Expand Up @@ -297,14 +297,8 @@ def setupBuild(self, expectations):
stepnames = {}
sps = []

for factory, args, kwargs in self.stepFactories:
try:
step = factory(*args, **kwargs)
except:
log.msg("error while creating step, factory=%s, args=%s, kwargs=%s"
% (factory, args, kwargs))
raise

for factory in self.stepFactories:
step = factory()
step.setBuild(self)
step.setBuildSlave(self.slavebuilder.slave)
if callable (self.workdir):
Expand Down
9 changes: 8 additions & 1 deletion master/buildbot/process/buildstep.py
Expand Up @@ -440,7 +440,14 @@ def __init__(self, **kwargs):
def __new__(klass, *args, **kwargs):
self = object.__new__(klass)
klass.__init__(self, *args, **kwargs)
self.factory = (klass, args, kwargs)
def factory():
try:
return klass(*args, **kwargs)
except:
log.msg("error while creating step, factory=%s, args=%s, kwargs=%s"
% (klass, args, kwargs))
raise
self.factory = factory
return self

def describe(self, done=False):
Expand Down
20 changes: 9 additions & 11 deletions master/buildbot/test/unit/test_process_build.py
Expand Up @@ -102,7 +102,7 @@ def testRunSuccessfulBuild(self):
step = Mock()
step.return_value = step
step.startStep.return_value = SUCCESS
b.setStepFactories([(step, (), {})])
b.setStepFactories([lambda: step])

slavebuilder = Mock()

Expand All @@ -117,7 +117,7 @@ def testStopBuild(self):

step = Mock()
step.return_value = step
b.setStepFactories([(step, (), {})])
b.setStepFactories([lambda: step])

slavebuilder = Mock()

Expand Down Expand Up @@ -148,8 +148,8 @@ def testAlwaysRunStepStopBuild(self):
step2.return_value = step2
step2.alwaysRun = True
b.setStepFactories([
(step1, (), {}),
(step2, (), {}),
lambda: step1,
lambda: step2,
])

slavebuilder = Mock()
Expand Down Expand Up @@ -196,7 +196,7 @@ def claim(owner, access):
step = Mock()
step.return_value = step
step.startStep.return_value = SUCCESS
b.setStepFactories([(step, (), {})])
b.setStepFactories([lambda: step])

b.startBuild(FakeBuildStatus(), None, slavebuilder)

Expand Down Expand Up @@ -225,7 +225,7 @@ def claim(owner, access):
step = Mock()
step.return_value = step
step.startStep.return_value = SUCCESS
b.setStepFactories([(step, (), {})])
b.setStepFactories([lambda: step])

real_lock.claim(Mock(), l.access('counting'))

Expand All @@ -252,7 +252,7 @@ def testStopBuildWaitingForLocks(self):
step.return_value = step
step.startStep.return_value = SUCCESS
step.alwaysRun = False
b.setStepFactories([(step, (), {})])
b.setStepFactories([lambda: step])

real_lock.claim(Mock(), l.access('counting'))

Expand Down Expand Up @@ -285,7 +285,7 @@ def testStopBuildWaitingForLocks_lostRemote(self):
step.return_value = step
step.startStep.return_value = SUCCESS
step.alwaysRun = False
b.setStepFactories([(step, {})])
b.setStepFactories([lambda: step])

real_lock.claim(Mock(), l.access('counting'))

Expand Down Expand Up @@ -316,9 +316,7 @@ def testStopBuildWaitingForStepLocks(self):
real_lock = b.builder.botmaster.getLockByID(l).getLock(slavebuilder)

step = LoggingBuildStep(locks=[lock_access])
def factory(*args):
return step
b.setStepFactories([(factory, (), {})])
b.setStepFactories([lambda: step])

real_lock.claim(Mock(), l.access('counting'))

Expand Down
6 changes: 2 additions & 4 deletions master/buildbot/test/util/steps.py
Expand Up @@ -71,10 +71,8 @@ def setupStep(self, step, slave_version={'*':"99.99"}, slave_env={}):
@param slave_env: environment from the slave at slave startup
"""
# yes, Virginia, "factory" refers both to the tuple and its first
# element TODO: fix that up
factory, args, kwargs = step.getStepFactory()
step = self.step = factory(*args, **kwargs)
factory = step.getStepFactory()
step = self.step = factory()

# step.build

Expand Down

0 comments on commit 87ba738

Please sign in to comment.