[Buildbot-devel] SVN.parseGotRevision() patch, v. 2
Axel Hecht
l10n.moz at googlemail.com
Tue Nov 13 12:08:35 UTC 2007
I have the quest of adding slave commands, too, I end up adding an
import line to a hacked buildbot start script.
Something cleaner might be nice, I haven't looked at buildbot.tac yet,
maybe that'd be cleaner.
Basically, as soon as you need to get custom slaves commands up, you
need an install and setup step on the slave, which seems to rub
buildbot backwards, poor buildbot.
Axel
2007/11/12, Aaron Maxwell <amax at snaplogic.org>:
> An update: The master.cfg example I have below is not quite right. I managed
> to mix up buildbot.slave.commands.SVN and buildbot.steps.source.SVN there.
>
> Originally I thought of this patch as generally valuable. Now I'm not so
> certain: I did not find a good way to subclass buildbot.slave.commands.SVN,
> and have it registered, all in master.cfg. It's actually easy if you don't
> mind adding the subclass in buildbot/slave/commands.py directly, which is
> what I ended up doing. But clearly that is not ideal.
>
> I still think the patch has value and would like to see it integrated, because
> if nothing else it encapsulates the svn version command, and IMO makes the
> whole class more extensible and flexible. (There's also selfishness, in that
> I personally find it useful, but I'm trying not to let that influence me :)
>
> Okay, I guess that's all. Brian (or other committer - sorry, I don't know
> everyone here yet), if this is something you'd like to check in, let me know
> if I can help. Regardless, thanks for buildbot.
>
> -Aaron
>
> On Tuesday 06 November 2007 14:59:52 Aaron Maxwell wrote:
> > Hi all,
> >
> > Based on the feedback and further experiments, here is what I think is a
> > much better patch:
> > http://redsymbol.net/buildbot/commands.py_2.patch
> >
> > (I've pasted it below as well.) Basically, it introduces a method
> > SVN.getSvnVersionCommand() that returns the shell command used to determine
> > the svn version. By default, it just returns ["svnversion", "."], in line
> > with what's in 0.7.6. Someone like myself who needs a different
> > calculation can just subclass it. To illustrate, here's what we now have
> > in our master.cfg:
> >
> > {{{
> > from buildbot.steps.source import SVN
> > class SnapSVN(SVN):
> > def getSvnVersionCommand(self):
> > # We use a current working directory of '..' because we want
> > # to get the most recent checkin revision under trunk/ (or
> > # branch/foo/), rather than trunk/SnapLogic/ .
> > return [getCommand("svnversion"), "-c", ".."]
> >
> > primary_factory.addStep(SnapSVN,
> > name='Checking out',
> > haltOnFailure=True,
> > <and so on>
> > }}}
> >
> > This is a lot cleaner and more extensible that the first patch, I think.
> > Brian, is this a patch you might consider integrating in trunk? Does
> > anything need to be changed?
> >
> > Feedback appreciated. For convenience, here's the patch contents: (sorry,
> > it's laid out confusingly - basically I added the getSvnVersionCommand()
> > method, then made a few smaller changes to parseGotRevision())
> >
> > --- buildbot/slave/commands.py.orig 2007-10-29 20:55:59.000000000 -0700
> > +++ buildbot/slave/commands.py 2007-11-06 14:26:14.000000000 -0800
> > @@ -1494,15 +1494,24 @@
> > self.command = c
> > return c.start()
> >
> > - def parseGotRevision(self):
> > + def getSvnVersionCommand(self):
> > + """
> > + Get the (shell) command used to determine SVN revision number
> > + of checked-out code
> > +
> > + return: list of strings, passable as the command argument to
> > ShellCommand
> > + """
> > # svn checkout operations finish with 'Checked out revision
> > 16657.' # svn update operations finish the line 'At revision 16654.' # But
> > we don't use those. Instead, run 'svnversion'.
> > svnversion_command = getCommand("svnversion")
> > # older versions of 'svnversion' (1.1.4) require the WC_PATH
> > # argument, newer ones (1.3.1) do not.
> > - command = [svnversion_command, "."]
> > - c = ShellCommand(self.builder, command,
> > + return [svnversion_command, "."]
> > +
> > + def parseGotRevision(self):
> > + c = ShellCommand(self.builder,
> > + self.getSvnVersionCommand(),
> > os.path.join(self.builder.basedir, self.srcdir),
> > environ=self.env,
> > sendStdout=False, sendStderr=False, sendRC=False,
> > @@ -1510,16 +1519,16 @@
> > c.usePTY = False
> > d = c.start()
> > def _parse(res):
> > - r = c.stdout.strip()
> > - # Support for removing svnversion indicator for 'modified'
> > - if r[-1] == 'M':
> > - r = r[:-1]
> > + r_raw = c.stdout.strip()
> > + # Extract revision from the version "number" string
> > + r = r_raw.rstrip('MS')
> > + r = r.split(':')[-1]
> > got_version = None
> > try:
> > got_version = int(r)
> > except ValueError:
> > msg =("SVN.parseGotRevision unable to parse output "
> > - "of svnversion: '%s'" % r)
> > + "of svnversion: '%s'" % r_raw)
> > log.msg(msg)
> > self.sendStatus({'header': msg + "\n"})
> > return got_version
>
>
>
> --
> Aaron Maxwell .:. amax at snaplogic.org .:. http://snaplogic.org
> SnapLogic, Inc. - Data Integration for the Last Mile
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Splunk Inc.
> Still grepping through log files to find problems? Stop.
> Now Search log events and configuration files using AJAX and a browser.
> Download your FREE copy of Splunk now >> http://get.splunk.com/
> _______________________________________________
> Buildbot-devel mailing list
> Buildbot-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/buildbot-devel
>
More information about the devel
mailing list