aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/status/web/build.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/status/web/build.py')
-rw-r--r--lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/status/web/build.py332
1 files changed, 0 insertions, 332 deletions
diff --git a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/status/web/build.py b/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/status/web/build.py
deleted file mode 100644
index 1cf7f92f..00000000
--- a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/status/web/build.py
+++ /dev/null
@@ -1,332 +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 twisted.web import html
-from twisted.internet import defer, reactor
-from twisted.web.util import Redirect, DeferredResource
-
-import urllib, time
-from twisted.python import log
-from buildbot.status.web.base import HtmlResource, \
- css_classes, path_to_build, path_to_builder, path_to_slave, \
- getAndCheckProperties, ActionResource, path_to_authzfail, \
- getRequestCharset
-from buildbot.schedulers.forcesched import ForceScheduler, TextParameter
-from buildbot.status.web.step import StepsResource
-from buildbot.status.web.tests import TestsResource
-from buildbot import util, interfaces
-
-class ForceBuildActionResource(ActionResource):
-
- def __init__(self, build_status, builder):
- self.build_status = build_status
- self.builder = builder
- self.action = "forceBuild"
-
- @defer.inlineCallbacks
- def performAction(self, req):
- url = None
- authz = self.getAuthz(req)
- res = yield authz.actionAllowed(self.action, req, self.builder)
-
- if not res:
- url = path_to_authzfail(req)
- else:
- # get a control object
- c = interfaces.IControl(self.getBuildmaster(req))
- bc = c.getBuilder(self.builder.getName())
-
- b = self.build_status
- builder_name = self.builder.getName()
- log.msg("web rebuild of build %s:%s" % (builder_name, b.getNumber()))
- name =authz.getUsernameFull(req)
- comments = req.args.get("comments", ["<no reason specified>"])[0]
- comments.decode(getRequestCharset(req))
- reason = ("The web-page 'rebuild' button was pressed by "
- "'%s': %s\n" % (name, comments))
- msg = ""
- extraProperties = getAndCheckProperties(req)
- if not bc or not b.isFinished() or extraProperties is None:
- msg = "could not rebuild: "
- if b.isFinished():
- msg += "build still not finished "
- if bc:
- msg += "could not get builder control"
- else:
- tup = yield bc.rebuildBuild(b, reason, extraProperties)
- # rebuildBuild returns None on error (?!)
- if not tup:
- msg = "rebuilding a build failed "+ str(tup)
- # we're at
- # http://localhost:8080/builders/NAME/builds/5/rebuild?[args]
- # Where should we send them?
- #
- # Ideally it would be to the per-build page that they just started,
- # but we don't know the build number for it yet (besides, it might
- # have to wait for a current build to finish). The next-most
- # preferred place is somewhere that the user can see tangible
- # evidence of their build starting (or to see the reason that it
- # didn't start). This should be the Builder page.
-
- url = path_to_builder(req, self.builder), msg
- defer.returnValue(url)
-
-
-class StopBuildActionResource(ActionResource):
-
- def __init__(self, build_status):
- self.build_status = build_status
- self.action = "stopBuild"
-
- @defer.inlineCallbacks
- def performAction(self, req):
- authz = self.getAuthz(req)
- res = yield authz.actionAllowed(self.action, req, self.build_status)
-
- if not res:
- defer.returnValue(path_to_authzfail(req))
- return
-
- b = self.build_status
- log.msg("web stopBuild of build %s:%s" % \
- (b.getBuilder().getName(), b.getNumber()))
- name = authz.getUsernameFull(req)
- comments = req.args.get("comments", ["<no reason specified>"])[0]
- comments.decode(getRequestCharset(req))
- # html-quote both the username and comments, just to be safe
- reason = ("The web-page 'stop build' button was pressed by "
- "'%s': %s\n" % (html.escape(name), html.escape(comments)))
-
- c = interfaces.IControl(self.getBuildmaster(req))
- bldrc = c.getBuilder(self.build_status.getBuilder().getName())
- if bldrc:
- bldc = bldrc.getBuild(self.build_status.getNumber())
- if bldc:
- bldc.stopBuild(reason)
-
- defer.returnValue(path_to_builder(req, self.build_status.getBuilder()))
-
-# /builders/$builder/builds/$buildnum
-class StatusResourceBuild(HtmlResource):
- addSlash = True
-
- def __init__(self, build_status):
- HtmlResource.__init__(self)
- self.build_status = build_status
-
- def getPageTitle(self, request):
- return ("Buildbot: %s Build #%d" %
- (self.build_status.getBuilder().getName(),
- self.build_status.getNumber()))
-
- def content(self, req, cxt):
- b = self.build_status
- status = self.getStatus(req)
- req.setHeader('Cache-Control', 'no-cache')
-
- cxt['b'] = b
- cxt['path_to_builder'] = path_to_builder(req, b.getBuilder())
-
- if not b.isFinished():
- step = b.getCurrentStep()
- if not step:
- cxt['current_step'] = "[waiting for Lock]"
- else:
- if step.isWaitingForLocks():
- cxt['current_step'] = "%s [waiting for Lock]" % step.getName()
- else:
- cxt['current_step'] = step.getName()
- when = b.getETA()
- if when is not None:
- cxt['when'] = util.formatInterval(when)
- cxt['when_time'] = time.strftime("%H:%M:%S",
- time.localtime(time.time() + when))
-
- else:
- cxt['result_css'] = css_classes[b.getResults()]
- if b.getTestResults():
- cxt['tests_link'] = req.childLink("tests")
-
- ssList = b.getSourceStamps()
- sourcestamps = cxt['sourcestamps'] = ssList
-
- all_got_revisions = b.getAllGotRevisions()
- cxt['got_revisions'] = all_got_revisions
-
- try:
- cxt['slave_url'] = path_to_slave(req, status.getSlave(b.getSlavename()))
- except KeyError:
- pass
-
- cxt['steps'] = []
-
- for s in b.getSteps():
- step = {'name': s.getName() }
-
- if s.isFinished():
- if s.isHidden():
- continue
-
- step['css_class'] = css_classes[s.getResults()[0]]
- (start, end) = s.getTimes()
- step['time_to_run'] = util.formatInterval(end - start)
- elif s.isStarted():
- if s.isWaitingForLocks():
- step['css_class'] = "waiting"
- step['time_to_run'] = "waiting for locks"
- else:
- start = s.getTimes()[0]
- step['css_class'] = "running"
- step['time_to_run'] = "running %s" % (util.formatInterval(util.now() - start))
- else:
- step['css_class'] = "not_started"
- step['time_to_run'] = ""
-
- cxt['steps'].append(step)
-
- step['link'] = req.childLink("steps/%s" %
- urllib.quote(s.getName(), safe=''))
- step['text'] = " ".join(s.getText())
- step['urls'] = map(lambda x:dict(url=x[1],logname=x[0]), s.getURLs().items())
-
- step['logs']= []
- for l in s.getLogs():
- logname = l.getName()
- step['logs'].append({ 'link': req.childLink("steps/%s/logs/%s" %
- (urllib.quote(s.getName(), safe=''),
- urllib.quote(logname, safe=''))),
- 'name': logname })
-
- scheduler = b.getProperty("scheduler", None)
- parameters = {}
- master = self.getBuildmaster(req)
- for sch in master.allSchedulers():
- if isinstance(sch, ForceScheduler) and scheduler == sch.name:
- for p in sch.all_fields:
- parameters[p.name] = p
-
- ps = cxt['properties'] = []
- for name, value, source in b.getProperties().asList():
- if not isinstance(value, dict):
- cxt_value = unicode(value)
- else:
- cxt_value = value
- p = { 'name': name, 'value': cxt_value, 'source': source}
- if len(cxt_value) > 500:
- p['short_value'] = cxt_value[:500]
- if name in parameters:
- param = parameters[name]
- if isinstance(param, TextParameter):
- p['text'] = param.value_to_text(value)
- p['cols'] = param.cols
- p['rows'] = param.rows
- p['label'] = param.label
- ps.append(p)
-
-
- cxt['responsible_users'] = list(b.getResponsibleUsers())
-
- (start, end) = b.getTimes()
- cxt['start'] = time.ctime(start)
- if end:
- cxt['end'] = time.ctime(end)
- cxt['elapsed'] = util.formatInterval(end - start)
- else:
- now = util.now()
- cxt['elapsed'] = util.formatInterval(now - start)
-
- exactly = True
- has_changes = False
- for ss in sourcestamps:
- exactly = exactly and (ss.revision is not None)
- has_changes = has_changes or ss.changes
- cxt['exactly'] = (exactly) or b.getChanges()
- cxt['has_changes'] = has_changes
- cxt['build_url'] = path_to_build(req, b)
- cxt['authz'] = self.getAuthz(req)
-
- template = req.site.buildbot_service.templates.get_template("build.html")
- return template.render(**cxt)
-
- def stop(self, req, auth_ok=False):
- # check if this is allowed
- if not auth_ok:
- return StopBuildActionResource(self.build_status)
-
- b = self.build_status
- log.msg("web stopBuild of build %s:%s" % \
- (b.getBuilder().getName(), b.getNumber()))
-
- name = self.getAuthz(req).getUsernameFull(req)
- comments = req.args.get("comments", ["<no reason specified>"])[0]
- comments.decode(getRequestCharset(req))
- # html-quote both the username and comments, just to be safe
- reason = ("The web-page 'stop build' button was pressed by "
- "'%s': %s\n" % (html.escape(name), html.escape(comments)))
-
- c = interfaces.IControl(self.getBuildmaster(req))
- bldrc = c.getBuilder(self.build_status.getBuilder().getName())
- if bldrc:
- bldc = bldrc.getBuild(self.build_status.getNumber())
- if bldc:
- bldc.stopBuild(reason)
-
- # we're at http://localhost:8080/svn-hello/builds/5/stop?[args] and
- # we want to go to: http://localhost:8080/svn-hello
- r = Redirect(path_to_builder(req, self.build_status.getBuilder()))
- d = defer.Deferred()
- reactor.callLater(1, d.callback, r)
- return DeferredResource(d)
-
- def rebuild(self, req):
- return ForceBuildActionResource(self.build_status,
- self.build_status.getBuilder())
-
- def getChild(self, path, req):
- if path == "stop":
- return self.stop(req)
- if path == "rebuild":
- return self.rebuild(req)
- if path == "steps":
- return StepsResource(self.build_status)
- if path == "tests":
- return TestsResource(self.build_status)
-
- return HtmlResource.getChild(self, path, req)
-
-# /builders/$builder/builds
-class BuildsResource(HtmlResource):
- addSlash = True
-
- def __init__(self, builder_status):
- HtmlResource.__init__(self)
- self.builder_status = builder_status
-
- def content(self, req, cxt):
- return "subpages shows data for each build"
-
- def getChild(self, path, req):
- try:
- num = int(path)
- except ValueError:
- num = None
- if num is not None:
- build_status = self.builder_status.getBuild(num)
- if build_status:
- return StatusResourceBuild(build_status)
-
- return HtmlResource.getChild(self, path, req)
-