[Buildbot-devel] Changing the behavior of the SVN buildstep defaultBranch argument...
Gareth Armstrong
gareth.armstrong at hp.com
Fri Mar 26 18:05:46 UTC 2010
Hello All,
I would like to get some feedback on a proposed change in behavior for
the SVN buildstep's defaultBranch argument.
Here is the context, at work we have a SVN repo similar to that hosted
by the Apache foundation http://svn.apache.org/repos/asf/. A parent
repo hosting many submodules, each with a typical SVN structure of
branches, tags and trunk.
Due to the setup of the project that I am developing a BuildBot config
for, I would like to do something like this.
steps = []
# Do a sparse checkout to a directory that will host later checkouts
s = SVN(baseURL='%s' % self.project['vcs_baseurl'],
*defaultBranch='',* # NOTE, I don't want to grab anything specific
just a revision
mode='update',
workdir='build/svn/HOLDER',
*depth='empty',*
haltOnFailure=True)
steps.append(s)
# Checkout a trunk module to the above HOLDER directory
s = SVN(baseURL='%s%s/' % (self.project['vcs_baseurl'], 'buildtools'),
*defaultBranch='trunk',*
mode='update',
workdir='build/svn/HOLDER/buildtools',
haltOnFailure=True)
steps.append(s)
# Checkout another module from the 1.xx branch to the above HOLDER directory
s = SVN(baseURL='%s%s/' % (self.project['vcs_baseurl'], 'TOTO'),
*defaultBranch='branches/1.xx',*
mode='update',
workdir='build/svn/HOLDER/TOTO,
haltOnFailure=True)
steps.append(s)
return steps
This all works fine as long as you are on the SVN "trunk" i.e. "branch =
None". Once you begin working on a SVN branch this falls down as branch
overrides the defaultBranch argument of the SVN buildstep. Therefore I
customized the SVN source step to get the behavior that I expect even
when we are on a branch.
Would folks like to see this become the default, or should legacy
preside? Thoughts and comments are more than welcome. If feedback is
positive I will post a patch to github. In any case, have a good weekend
All the best,
Gareth
In any case, details below.
--- /home/gareth/WORK/git/buildbot/buildbot/steps/source.py
2010-03-23 09:52:42.729221546 +0100
+++ source.py 2010-03-26 18:12:20.058471232 +0100
@@ -452,22 +452,28 @@
alternate branches: use C{baseURL} to enable this.
Use exactly one of C{svnurl} and C{baseURL}.
+ @type baseURL: string
@param baseURL: if branches are enabled, this is the base URL to
which a branch name will be appended. It should
probably end in a slash. Use exactly one of
C{svnurl} and C{baseURL}.
- @param defaultBranch: if branches are enabled, this is the branch
- to use if the Build does not specify one
+ @type defaultBranch: string or None
+ @param defaultBranch: if specified this overrides the branch
+ to use during a Build, even if branches
+ are enabled and the Build specifies one
explicitly. It will simply be appended
to C{baseURL} and the result handed to
the SVN command.
+ @type username: string
@param username: username to pass to svn's --username
+
+ @type password: string
@param password: username to pass to svn's --password
"""
- if not kwargs.has_key('workdir') and directory is not None:
+ if not 'workdir' in kwargs and directory is not None:
# deal with old configs
warn("Please use workdir=, not directory=",
DeprecationWarning)
kwargs['workdir'] = directory
@@ -494,13 +500,12 @@
keep_on_purge=keep_on_purge,
ignore_ignores=ignore_ignores,
always_purge=always_purge,
- depth=depth,
+ depth=depth,
)
if not svnurl and not baseURL:
raise ValueError("you must use exactly one of svnurl and
baseURL")
-
def computeSourceRevision(self, changes):
if not changes or None in [c.revision for c in changes]:
return None
@@ -508,7 +513,6 @@
return lastChange
def startVC(self, branch, revision, patch):
-
# handle old slaves
warnings = []
slavever = self.slaveVersion("svn", "old")
@@ -563,6 +567,14 @@
self.args['svnurl'] = self.svnurl
else:
self.args['svnurl'] = self.baseURL + branch
+ # If we declare defaultBranch it should override the branch
+ # specified by the Build when branches are enabled.
+ if branch and (branch != self.branch and self.branch is not
None):
+ m = ('Overriding Build branch "%s" with defaultBranch '
+ 'value "%s"' % (branch, self.branch))
+ log.msg(m)
+ self.args['svnurl'] = self.baseURL + self.branch
+
self.args['revision'] = revision
self.args['patch'] = patch
@@ -572,11 +584,11 @@
if self.depth is not None:
if self.slaveVersionIsOlderThan("svn","2.9"):
m = ("This buildslave (%s) does not support svn depth "
- "arguments. "
- "Refusing to build. "
- "Please upgrade the buildslave." % (self.build.slavename))
+ "arguments. "
+ "Refusing to build. "
+ "Please upgrade the buildslave." %
(self.build.slavename))
raise BuildSlaveTooOldError(m)
- else:
+ else:
self.args['depth'] = self.depth
if self.username is not None or self.password is not None:
@@ -586,15 +598,24 @@
"Refusing to build. Please upgrade the buildslave
to "
"buildbot-0.7.10 or newer." %
(self.build.slavename,))
raise BuildSlaveTooOldError(m)
- if self.username is not None: self.args['username'] =
self.username
- if self.password is not None: self.args['password'] =
self.password
+ if self.username is not None:
+ self.args['username'] = self.username
+ if self.password is not None:
+ self.args['password'] = self.password
if self.extra_args is not None:
self.args['extra_args'] = self.extra_args
revstuff = []
- if branch is not None and branch != self.branch:
+ #revstuff.append("branch=%s" % branch)
+ #revstuff.append("self.branch=%s" % self.branch)
+ if branch is not None or branch != self.branch:
revstuff.append("[branch]")
+ if self.branch is None and branch == 'trunk':
+ revstuff.remove("[branch]")
+ if self.branch == 'trunk':
+ revstuff.remove("[branch]")
+
if revision is not None:
revstuff.append("r%s" % revision)
if patch is not None:
--
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://buildbot.net/pipermail/devel/attachments/20100326/5e6cb4ca/attachment.html>
More information about the devel
mailing list