[Buildbot-devel] can't get my subclass to work!

Ed Hartnett ed at unidata.ucar.edu
Wed Jan 21 22:36:38 UTC 2004

Howdy all!

I am trying to get buildbot to get a tagged release from CVS, instead
of the tip.

Here's a class I came up with:

# This is subclass to allow me to build tagged versions from the CVS
# tree.

# Ed Hartnett, 1/19/4

# From Brian Warner, a.k.a. Mr. BuildBot:

# You'll need to subclass ConfigurableBuildFactory and arrange for the
# self.steps it creates to include something like:
#  (ShellCommand, {'workdir': ".", 'command': "rm -rf %s" % workdir})
# and then
#  (ShellCommand, {'workdir': ".", 'command': "cvs -d blah co -r FOO blah"})

from buildbot.process.base import ConfigurableBuildFactory, CVS, \
     Configure, Compile, Test, ShellCommand
class TaggedBuildFactory(ConfigurableBuildFactory):
    def __init__(self, cvsroot, cvsmodule, tag, configure="configure", configureEnv={}, compile="make all",
                 test="make check", workdir="."):
        steps = []
#        steps.append((ShellCommand, {'workdir': ".",
#                                     'command': "rm -rf %s" % workdir}))
        steps.append((ShellCommand, {'workdir': ".",
                                     'command': "cvs -d "+cvsroot+" co -r "+tag+" "+cvsmodule}))
        steps.append((Configure, {'workdir': workdir,
                                  'command': configure,
                                  'env': configureEnv}))
        steps.append((Compile, {'workdir': workdir,
                                'command': compile}))
        steps.append((Test, {'workdir': workdir,
                             'command': test}))
        self.steps = steps

Some questions and problems:

1 - If I have two shell commands, (i.e. a rm and a cvs co), I get an
error. That's why the first one is commented out above. How do I give
them different names?

2004/01/21 15:15 MST [-] Traceback (most recent call last):
	  File "/usr/lib/python2.2/site-packages/twisted/scripts/twistd.py", line 165, in startApplication
	    app.startApplication(application, not config['no_save'])
	  File "/usr/lib/python2.2/site-packages/twisted/application/app.py", line 220, in startApplication
	  File "/usr/lib/python2.2/site-packages/twisted/application/service.py", line 194, in startService
	  File "/usr/lib/python2.2/site-packages/buildbot/master.py", line 378, in startService
	--- <exception caught here> ---
	  File "/usr/lib/python2.2/site-packages/buildbot/master.py", line 397, in loadTheConfigFile
	  File "/usr/lib/python2.2/site-packages/buildbot/master.py", line 490, in loadConfig
	  File "/usr/lib/python2.2/site-packages/buildbot/master.py", line 581, in loadConfig_Builders
	    builder = Builder(name, slave, builddir, factory, statusbag)
	  File "/usr/lib/python2.2/site-packages/buildbot/process/base.py", line 362, in __init__
	    self.waiting = self.newBuild()
	  File "/usr/lib/python2.2/site-packages/buildbot/process/base.py", line 387, in newBuild
	    b = self.buildFactory.newBuild()
	  File "/usr/lib/python2.2/site-packages/buildbot/process/base.py", line 762, in newBuild
	  File "/usr/lib/python2.2/site-packages/buildbot/process/base.py", line 647, in setSteps
	    raise RuntimeError("duplicate step '%s'" % step.name)
	exceptions.RuntimeError: duplicate step 'shell'

2 - When I run this bot from the webpage, the configure step doesn't

command './configure' in dir '.'

Upon execvpe ./configure ['./configure'] in environment id 141045236:
Traceback (most recent call last):
  File "/usr/lib/python2.2/site-packages/twisted/internet/process.py", line 502, in __init__
    os.execvpe(command, args, environment)
  File "/usr/src/build/317580-i386/install/usr/lib/python2.2/os.py", line 308, in execvpe
    _execvpe(file, args, env)
  File "/usr/src/build/317580-i386/install/usr/lib/python2.2/os.py", line 325, in _execvpe
    apply(func, (file,) + argrest)
OSError: [Errno 2] No such file or directory
program finished with exit code 1

What the heck?

Any suggestions would be helpful. Thanks!


More information about the devel mailing list