aboutsummaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorMichael Wood <michael.g.wood@intel.com>2016-07-06 18:22:36 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-07-08 09:57:28 +0100
commit36dec688c7e50e02e55c070f04c396e2d1aa3ef3 (patch)
tree6072b631d8a122f2364cb896a268e93d0fc680b2 /bitbake
parent903c3c2ef8e31aad287d914dbb18a926cb96e6d0 (diff)
downloadopenembedded-core-contrib-36dec688c7e50e02e55c070f04c396e2d1aa3ef3.tar.gz
bitbake: toaster: layerdetails api Fix saving of git revision of a layer
Update, clean up and move the api for updating a layerversion from the views to api. Also update the layerdetails page to include the layerversion id in the url getter. [YOCTO #8952] (Bitbake rev: 20f4e23bc86290f0a42881a7cac44c41eafa86fc) Signed-off-by: Michael Wood <michael.g.wood@intel.com> Signed-off-by: Elliot Smith <elliot.smith@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/toaster/toastergui/api.py99
-rw-r--r--bitbake/lib/toaster/toastergui/templates/layerdetails.html2
-rw-r--r--bitbake/lib/toaster/toastergui/urls.py5
-rwxr-xr-xbitbake/lib/toaster/toastergui/views.py43
4 files changed, 103 insertions, 46 deletions
diff --git a/bitbake/lib/toaster/toastergui/api.py b/bitbake/lib/toaster/toastergui/api.py
index 961b594ef4..a024748271 100644
--- a/bitbake/lib/toaster/toastergui/api.py
+++ b/bitbake/lib/toaster/toastergui/api.py
@@ -20,11 +20,14 @@
# Temporary home for the UI's misc API
import re
-from orm.models import Project, ProjectTarget, Build
+from orm.models import Project, ProjectTarget, Build, Layer_Version
+from orm.models import LayerVersionDependency, LayerSource, ProjectLayer
from bldcontrol.models import BuildRequest
from bldcontrol import bbcontroller
from django.http import HttpResponse, JsonResponse
from django.views.generic import View
+from django.core.urlresolvers import reverse
+
class XhrBuildRequest(View):
@@ -109,3 +112,97 @@ class XhrBuildRequest(View):
response = HttpResponse()
response.status_code = 500
return response
+
+
+class XhrLayer(View):
+ """ Get and Update Layer information """
+
+ def post(self, request, *args, **kwargs):
+ """
+ Update a layer
+
+ Entry point: /xhr_layer/<layerversion_id>
+ Method: POST
+
+ Args:
+ vcs_url, dirpath, commit, up_branch, summary, description
+
+ add_dep = append a layerversion_id as a dependency
+ rm_dep = remove a layerversion_id as a depedency
+ Returns:
+ {"error": "ok"}
+ or
+ {"error": <error message>}
+ """
+
+ def error_response(error):
+ return JsonResponse({"error": error})
+
+ try:
+ # We currently only allow Imported layers to be edited
+ layer_version = Layer_Version.objects.get(
+ id=kwargs['layerversion_id'],
+ project=kwargs['pid'],
+ layer_source__sourcetype=LayerSource.TYPE_IMPORTED)
+
+ except Layer_Version.DoesNotExist:
+ return error_response("Cannot find imported layer to update")
+
+ if "vcs_url" in request.POST:
+ layer_version.layer.vcs_url = request.POST["vcs_url"]
+ if "dirpath" in request.POST:
+ layer_version.dirpath = request.POST["dirpath"]
+ if "commit" in request.POST:
+ layer_version.commit = request.POST["commit"]
+ layer_version.branch = request.POST["commit"]
+ if "up_branch" in request.POST:
+ layer_version.up_branch_id = int(request.POST["up_branch"])
+ if "summary" in request.POST:
+ layer_version.layer.summary = request.POST["summary"]
+ if "description" in request.POST:
+ layer_version.layer.description = request.POST["description"]
+
+ if "add_dep" in request.POST:
+ lvd = LayerVersionDependency(
+ layer_version=layer_version,
+ depends_on_id=request.POST["add_dep"])
+ lvd.save()
+
+ if "rm_dep" in request.POST:
+ rm_dep = LayerVersionDependency.objects.get(
+ layer_version=layer_version,
+ depends_on_id=request.POST["rm_dep"])
+ rm_dep.delete()
+
+ try:
+ layer_version.layer.save()
+ layer_version.save()
+ except Exception as e:
+ return error_response("Could not update layer version entry: %s"
+ % e)
+
+ return JsonResponse({"error": "ok"})
+
+ def delete(self, request, *args, **kwargs):
+ try:
+ # We currently only allow Imported layers to be deleted
+ layer_version = Layer_Version.objects.get(
+ id=kwargs['layerversion_id'],
+ project=kwargs['pid'],
+ layer_source__sourcetype=LayerSource.TYPE_IMPORTED)
+ except Layer_Version.DoesNotExist:
+ return error_response("Cannot find imported layer to delete")
+
+ try:
+ ProjectLayer.objects.get(project=kwargs['pid'],
+ layercommit=layer_version).delete()
+ except ProjectLayer.DoesNotExist:
+ pass
+
+ layer_version.layer.delete()
+ layer_version.delete()
+
+ return JsonResponse({
+ "error": "ok",
+ "redirect": reverse('project', args=(kwargs['pid'],))
+ })
diff --git a/bitbake/lib/toaster/toastergui/templates/layerdetails.html b/bitbake/lib/toaster/toastergui/templates/layerdetails.html
index 0f0b2b49e6..143ec25dd7 100644
--- a/bitbake/lib/toaster/toastergui/templates/layerdetails.html
+++ b/bitbake/lib/toaster/toastergui/templates/layerdetails.html
@@ -44,7 +44,7 @@
$(document).ready(function(){
var ctx = {
- xhrUpdateLayerUrl : "{% url 'xhr_updatelayer' %}",
+ xhrUpdateLayerUrl : "{% url 'xhr_layer' layerversion.pk %}",
layerVersion : {
name : "{{layerversion.layer.name}}",
id : {{layerversion.id}},
diff --git a/bitbake/lib/toaster/toastergui/urls.py b/bitbake/lib/toaster/toastergui/urls.py
index 9510a386ea..15b1063c59 100644
--- a/bitbake/lib/toaster/toastergui/urls.py
+++ b/bitbake/lib/toaster/toastergui/urls.py
@@ -190,7 +190,10 @@ urlpatterns = patterns('toastergui.views',
name='xhr_configvaredit'),
url(r'^xhr_importlayer/$', 'xhr_importlayer', name='xhr_importlayer'),
- url(r'^xhr_updatelayer/$', 'xhr_updatelayer', name='xhr_updatelayer'),
+
+ url(r'^xhr_layer/(?P<layerversion_id>\d+)$',
+ api.XhrLayer.as_view(),
+ name='xhr_layer'),
# JS Unit tests
url(r'^js-unit-tests/$', 'jsunittests', name='js-unit-tests'),
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py
index 2db68bdd4d..ad85fafb4d 100755
--- a/bitbake/lib/toaster/toastergui/views.py
+++ b/bitbake/lib/toaster/toastergui/views.py
@@ -1739,49 +1739,6 @@ if True:
return HttpResponse(jsonfilter(json_response), content_type = "application/json")
- def xhr_updatelayer(request):
-
- def error_response(error):
- return HttpResponse(jsonfilter({"error": error}), content_type = "application/json")
-
- if "layer_version_id" not in request.POST:
- return error_response("Please specify a layer version id")
- try:
- layer_version_id = request.POST["layer_version_id"]
- layer_version = Layer_Version.objects.get(id=layer_version_id)
- except Layer_Version.DoesNotExist:
- return error_response("Cannot find layer to update")
-
-
- if "vcs_url" in request.POST:
- layer_version.layer.vcs_url = request.POST["vcs_url"]
- if "dirpath" in request.POST:
- layer_version.dirpath = request.POST["dirpath"]
- if "commit" in request.POST:
- layer_version.commit = request.POST["commit"]
- if "up_branch" in request.POST:
- layer_version.up_branch_id = int(request.POST["up_branch"])
-
- if "add_dep" in request.POST:
- lvd = LayerVersionDependency(layer_version=layer_version, depends_on_id=request.POST["add_dep"])
- lvd.save()
-
- if "rm_dep" in request.POST:
- rm_dep = LayerVersionDependency.objects.get(layer_version=layer_version, depends_on_id=request.POST["rm_dep"])
- rm_dep.delete()
-
- if "summary" in request.POST:
- layer_version.layer.summary = request.POST["summary"]
- if "description" in request.POST:
- layer_version.layer.description = request.POST["description"]
-
- try:
- layer_version.layer.save()
- layer_version.save()
- except Exception as e:
- return error_response("Could not update layer version entry: %s" % e)
-
- return HttpResponse(jsonfilter({"error": "ok",}), content_type = "application/json")
@xhr_response
def xhr_customrecipe(request):