[Buildbot-devel] Modifying shell commands at runtime
Dustin J. Mitchell
dustin at zmanda.com
Wed Jul 8 21:17:46 UTC 2009
On Wed, Jul 8, 2009 at 4:57 PM, Tommy
Kudirka<tkdeaddovedonoteat at live.com> wrote:
> I've got my buildbot setup with Perforce. I had two problems with the
> initial setup. The first was that buildbot didn't properly handle the
> revision number when a build was forced, which I fixed by putting the
> following code into shell.py:
> class ShellCommand(LoggingBuildStep):
> def start(self):
> properties = self.build.getProperties()
> if self.command == 'p4' and self.command.count('sync') != 0:
> if self.command[-1] == '#' or self.command[-1] == '@':
> if str(self.getProperty('revision')) == '' or
> str(self.getProperty('revision')) == 'None':
> self.command.append('@' + str(self.getProperty('revision')))
> However, I realized that this apparently modifies the command at the same
> level as master.cfg, and that my command was permanently modified for as
> long as the buildmaster was online (hence the first nested if statement that
> cleans the command to prevent things like "#head #head @3174 @3160 #head" as
> p4 sync arguments)
Now *that* is a monkeypatch, and a not-very-effective-one at that.
Why would you try to rewrite the shell commands generated by the P4
class in the parent class? Why not just modify the P4 class itself?
I really can't fathom what has driven you to edit shell.py for these problems.
By the way, I think your solution of using some on-disk indication
that both builds are finished is currently the best option. Hopefully
we'll have some better build-coordination tools in 0.7.12.
Open Source Storage Engineer
More information about the devel