def cancel_build(br): """Cancel a build request""" try: bbctrl = bbcontroller.BitbakeController(br.environment) bbctrl.forceShutDown() except: # We catch a bunch of exceptions here because # this is where the server has not had time to start up # and the build request or build is in transit between # processes. # We can safely just set the build as cancelled # already as it never got started build = br.build build.outcome = Build.CANCELLED build.save() # We now hand over to the buildinfohelper to update the # build state once we've finished cancelling br.state = BuildRequest.REQ_CANCELLING br.save()
def post(self, request, *args, **kwargs): """ Build control Entry point: /xhr_buildrequest/<project_id> Method: POST Args: id: id of build to change buildCancel = build_request_id ... buildDelete = id ... targets = recipe_name ... Returns: {"error": "ok"} or {"error": <error message>} """ project = Project.objects.get(pk=kwargs['pid']) if 'buildCancel' in request.POST: for i in request.POST['buildCancel'].strip().split(" "): try: br = BuildRequest.objects.get(project=project, pk=i) try: bbctrl = bbcontroller.BitbakeController(br.environment) bbctrl.forceShutDown() except: # We catch a bunch of exceptions here because # this is where the server has not had time to start up # and the build request or build is in transit between # processes. # We can safely just set the build as cancelled # already as it never got started build = br.build build.outcome = Build.CANCELLED build.save() # We now hand over to the buildinfohelper to update the # build state once we've finished cancelling br.state = BuildRequest.REQ_CANCELLING br.save() except BuildRequest.DoesNotExist: return error_response('No such build request id %s' % i) return error_response('ok') if 'buildDelete' in request.POST: for i in request.POST['buildDelete'].strip().split(" "): try: BuildRequest.objects.select_for_update().get( project=project, pk=i, state__lte=BuildRequest.REQ_DELETED).delete() except BuildRequest.DoesNotExist: pass return error_response("ok") if 'targets' in request.POST: ProjectTarget.objects.filter(project=project).delete() s = str(request.POST['targets']) for t in re.sub(r'[;%|"]', '', s).split(" "): if ":" in t: target, task = t.split(":") else: target = t task = "" ProjectTarget.objects.create(project=project, target=target, task=task) project.schedule_build() return error_response('ok') response = HttpResponse() response.status_code = 500 return response