[Buildbot-devel] custom checkout command run in shell

Benoit Sigoure tsuna at lrde.epita.fr
Mon Nov 27 07:58:18 UTC 2006


Quoting Brian Warner <warner-buildbot at lothar.com>:
> f at rtfs.org writes:
>
>>> f1.source = s(step.ShellCommand, command=[ r'C:\Python24\pyton.exe'
>>>                                          , C:\clearcase_checkout.py
>>>                                          , WithProperties("%s",
>>> "revision")
>>>                                          ])
>>
>> But I still have some trouble. I force the builds by running the command:
>>
>>         cmd = "buildbot sendchange --master="+change['master']+"
>
>> Which works great, and the log says that the revision is set.
>> But still I only get the empty string for the WithProperties("%s",
>> "revision")
>> ind the shell command.
>>
>> Any ideas how I can get the revision string?
>
> The problem here is that it turns out that the 'revision' property is only
> set when you force a build of a specific revision. If the build is triggered
> because of changes, it doesn't get set. The reason for this is that there
> could be multiple Changes that go into a build: the source-checkout step
> (like source.CVS or source.SVN) is responsible for using all of the Changes
> (and the revision numbers inside them) to decide what revision to use for the
> checkout. This keeps all the per-VC information isolated to the
> source-checkout step, but it also means that you can't use the "revision"
> property the way you want to.
>
> There is another property, the "got_revision" property, which is set to
> whatever revision was obtained by the source-checkout step, regardless of
> whether the build occurred because of Changes or because someone forced a
> build. But this won't help your situation either, because you don't have a
> source-checkout step to provide it.

Ah OK I get it now. I think you should explicitely state this under
http://buildbot.sourceforge.net/manual-0.7.4.html#Build-Properties 
because it's
rather confusing and got_revision isn't *that* explicit :P

>
> I'd suggest creating a ShellCommand subclass that looks at the list of
> Changes that went into the build and modifies the command you're running
> accordingly. Something roughly like this:
>
> class MyCheckout(ShellCommand):
>    def start(self):
>        ss = self.build.getSourceStamp()
>        if s.revision:
>            revision = s.revision
>        elif s.changes:
>            revision = figureOutWhatRevisionToUse(s.changes)
>        self.command = [ r'C:\Python24\python.exe',
>                         r'C:\clearcase_checkout.py',
>                         revision ]
>        ShellCommand.start(self)
>
>
>
> hope that helps,
> -Brian
>

By the way, what's the best place to put the Python extensions we write 
for the
buildbot? In the same directory as master.cfg? Where buildbot is installed?

Cheers,

-- 
SIGOURE Benoit aka Tsuna
   _____
  /EPITA\ Promo 2008, LRDE





More information about the devel mailing list