diff options
Diffstat (limited to 'lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/steps/source/cvs.py')
-rw-r--r-- | lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/steps/source/cvs.py | 302 |
1 files changed, 0 insertions, 302 deletions
diff --git a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/steps/source/cvs.py b/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/steps/source/cvs.py deleted file mode 100644 index 3fbb40e4..00000000 --- a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/steps/source/cvs.py +++ /dev/null @@ -1,302 +0,0 @@ -# This file is part of Buildbot. Buildbot is free software: you can -# redistribute it and/or modify it under the terms of the GNU General Public -# License as published by the Free Software Foundation, version 2. -# -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -# details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Copyright Buildbot Team Members - -from email.Utils import formatdate -import time -import re - -from twisted.python import log -from twisted.internet import defer - -from buildbot.process import buildstep -from buildbot.steps.shell import StringFileWriter -from buildbot.steps.source.base import Source -from buildbot.interfaces import BuildSlaveTooOldError - -class CVS(Source): - - name = "cvs" - - renderables = [ "cvsroot" ] - - def __init__(self, cvsroot=None, cvsmodule='', mode='incremental', - method=None, branch=None, global_options=[], extra_options=[], - login=None, **kwargs): - - self.cvsroot = cvsroot - self.cvsmodule = cvsmodule - self.branch = branch - self.global_options = global_options - self.extra_options = extra_options - self.login = login - self.mode = mode - self.method = method - self.srcdir = 'source' - Source.__init__(self, **kwargs) - - def startVC(self, branch, revision, patch): - self.branch = branch - self.revision = revision - self.stdio_log = self.addLog("stdio") - self.method = self._getMethod() - d = self.checkCvs() - def checkInstall(cvsInstalled): - if not cvsInstalled: - raise BuildSlaveTooOldError("CVS is not installed on slave") - return 0 - d.addCallback(checkInstall) - d.addCallback(self.checkLogin) - - if self.mode == 'incremental': - d.addCallback(lambda _: self.incremental()) - elif self.mode == 'full': - d.addCallback(lambda _: self.full()) - - d.addCallback(self.parseGotRevision) - d.addCallback(self.finish) - d.addErrback(self.failed) - return d - - @defer.inlineCallbacks - def incremental(self): - updatable = yield self._sourcedirIsUpdatable() - if updatable: - rv = yield self.doUpdate() - else: - rv = yield self.clobber() - defer.returnValue(rv) - - @defer.inlineCallbacks - def full(self): - if self.method == 'clobber': - rv = yield self.clobber() - defer.returnValue(rv) - return - - elif self.method == 'copy': - rv = yield self.copy() - defer.returnValue(rv) - return - - updatable = yield self._sourcedirIsUpdatable() - if not updatable: - log.msg("CVS repo not present, making full checkout") - rv = yield self.doCheckout(self.workdir) - elif self.method == 'clean': - rv = yield self.clean() - elif self.method == 'fresh': - rv = yield self.fresh() - else: - raise ValueError("Unknown method, check your configuration") - defer.returnValue(rv) - - def clobber(self): - cmd = buildstep.RemoteCommand('rmdir', {'dir': self.workdir, - 'logEnviron': self.logEnviron}) - cmd.useLog(self.stdio_log, False) - d = self.runCommand(cmd) - def checkRemoval(res): - if res != 0: - raise RuntimeError("Failed to delete directory") - return res - d.addCallback(lambda _: checkRemoval(cmd.rc)) - d.addCallback(lambda _: self.doCheckout(self.workdir)) - return d - - def fresh(self, ): - d = self.purge(True) - d.addCallback(lambda _: self.doUpdate()) - return d - - def clean(self, ): - d = self.purge(False) - d.addCallback(lambda _: self.doUpdate()) - return d - - def copy(self): - cmd = buildstep.RemoteCommand('rmdir', {'dir': self.workdir, - 'logEnviron': self.logEnviron}) - cmd.useLog(self.stdio_log, False) - d = self.runCommand(cmd) - self.workdir = 'source' - d.addCallback(lambda _: self.incremental()) - def copy(_): - cmd = buildstep.RemoteCommand('cpdir', - {'fromdir': 'source', - 'todir':'build', - 'logEnviron': self.logEnviron,}) - cmd.useLog(self.stdio_log, False) - d = self.runCommand(cmd) - return d - d.addCallback(copy) - def resetWorkdir(_): - self.workdir = 'build' - return 0 - d.addCallback(resetWorkdir) - return d - - def purge(self, ignore_ignores): - command = ['cvsdiscard'] - if ignore_ignores: - command += ['--ignore'] - cmd = buildstep.RemoteShellCommand(self.workdir, command, - env=self.env, - logEnviron=self.logEnviron, - timeout=self.timeout) - cmd.useLog(self.stdio_log, False) - d = self.runCommand(cmd) - def evaluate(cmd): - if cmd.didFail(): - raise buildstep.BuildStepFailed() - return cmd.rc - d.addCallback(evaluate) - return d - - def doCheckout(self, dir): - command = ['-d', self.cvsroot, '-z3', 'checkout', '-d', dir ] - command = self.global_options + command + self.extra_options - if self.branch: - command += ['-r', self.branch] - if self.revision: - command += ['-D', self.revision] - command += [ self.cvsmodule ] - d = self._dovccmd(command, '') - return d - - def doUpdate(self): - command = ['-z3', 'update', '-dP'] - branch = self.branch - # special case. 'cvs update -r HEAD -D today' gives no files; see #2351 - if branch == 'HEAD' and self.revision: - branch = None - if branch: - command += ['-r', self.branch] - if self.revision: - command += ['-D', self.revision] - d = self._dovccmd(command) - return d - - def finish(self, res): - d = defer.succeed(res) - def _gotResults(results): - self.setStatus(self.cmd, results) - return results - d.addCallback(_gotResults) - d.addCallbacks(self.finished, self.checkDisconnect) - return d - - def checkLogin(self, _): - if self.login: - d = defer.succeed(0) - else: - d = self._dovccmd(['-d', self.cvsroot, 'login']) - def setLogin(res): - # this happens only if the login command succeeds. - self.login = True - return res - d.addCallback(setLogin) - - return d - - def _dovccmd(self, command, workdir=None): - if workdir is None: - workdir = self.workdir - if not command: - raise ValueError("No command specified") - cmd = buildstep.RemoteShellCommand(workdir, ['cvs'] + - command, - env=self.env, - timeout=self.timeout, - logEnviron=self.logEnviron) - cmd.useLog(self.stdio_log, False) - d = self.runCommand(cmd) - def evaluateCommand(cmd): - if cmd.rc != 0: - log.msg("Source step failed while running command %s" % cmd) - raise buildstep.BuildStepFailed() - return cmd.rc - d.addCallback(lambda _: evaluateCommand(cmd)) - return d - - @defer.inlineCallbacks - def _sourcedirIsUpdatable(self): - myFileWriter = StringFileWriter() - args = { - 'workdir': self.build.path_module.join(self.workdir, 'CVS'), - 'writer': myFileWriter, - 'maxsize': None, - 'blocksize': 32*1024, - } - - cmd = buildstep.RemoteCommand('uploadFile', - dict(slavesrc='Root', **args), - ignore_updates=True) - yield self.runCommand(cmd) - if cmd.rc is not None and cmd.rc != 0: - defer.returnValue(False) - return - - # on Windows, the cvsroot may not contain the password, so compare to - # both - cvsroot_without_pw = re.sub("(:pserver:[^:]*):[^@]*(@.*)", - r"\1\2", self.cvsroot) - if myFileWriter.buffer.strip() not in (self.cvsroot, - cvsroot_without_pw): - defer.returnValue(False) - return - - myFileWriter.buffer = "" - cmd = buildstep.RemoteCommand('uploadFile', - dict(slavesrc='Repository', **args), - ignore_updates=True) - yield self.runCommand(cmd) - if cmd.rc is not None and cmd.rc != 0: - defer.returnValue(False) - return - if myFileWriter.buffer.strip() != self.cvsmodule: - defer.returnValue(False) - return - - defer.returnValue(True) - - def parseGotRevision(self, res): - revision = time.strftime("%Y-%m-%d %H:%M:%S +0000", time.gmtime()) - self.updateSourceProperty('got_revision', revision) - return res - - def checkCvs(self): - d = self._dovccmd(['--version']) - def check(res): - if res == 0: - return True - return False - d.addCallback(check) - return d - - def _getMethod(self): - if self.method is not None and self.mode != 'incremental': - return self.method - elif self.mode == 'incremental': - return None - elif self.method is None and self.mode == 'full': - return 'fresh' - - def computeSourceRevision(self, changes): - if not changes: - return None - lastChange = max([c.when for c in changes]) - lastSubmit = max([br.submittedAt for br in self.build.requests]) - when = (lastChange + lastSubmit) / 2 - return formatdate(when) |