diff options
author | Michael Wood <michael.g.wood@intel.com> | 2016-07-06 18:22:36 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-07-08 09:57:28 +0100 |
commit | 36dec688c7e50e02e55c070f04c396e2d1aa3ef3 (patch) | |
tree | 6072b631d8a122f2364cb896a268e93d0fc680b2 /bitbake/lib/toaster/toastergui/api.py | |
parent | 903c3c2ef8e31aad287d914dbb18a926cb96e6d0 (diff) | |
download | poky-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/lib/toaster/toastergui/api.py')
-rw-r--r-- | bitbake/lib/toaster/toastergui/api.py | 99 |
1 files changed, 98 insertions, 1 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 @@ | |||
20 | # Temporary home for the UI's misc API | 20 | # Temporary home for the UI's misc API |
21 | import re | 21 | import re |
22 | 22 | ||
23 | from orm.models import Project, ProjectTarget, Build | 23 | from orm.models import Project, ProjectTarget, Build, Layer_Version |
24 | from orm.models import LayerVersionDependency, LayerSource, ProjectLayer | ||
24 | from bldcontrol.models import BuildRequest | 25 | from bldcontrol.models import BuildRequest |
25 | from bldcontrol import bbcontroller | 26 | from bldcontrol import bbcontroller |
26 | from django.http import HttpResponse, JsonResponse | 27 | from django.http import HttpResponse, JsonResponse |
27 | from django.views.generic import View | 28 | from django.views.generic import View |
29 | from django.core.urlresolvers import reverse | ||
30 | |||
28 | 31 | ||
29 | 32 | ||
30 | class XhrBuildRequest(View): | 33 | class XhrBuildRequest(View): |
@@ -109,3 +112,97 @@ class XhrBuildRequest(View): | |||
109 | response = HttpResponse() | 112 | response = HttpResponse() |
110 | response.status_code = 500 | 113 | response.status_code = 500 |
111 | return response | 114 | return response |
115 | |||
116 | |||
117 | class XhrLayer(View): | ||
118 | """ Get and Update Layer information """ | ||
119 | |||
120 | def post(self, request, *args, **kwargs): | ||
121 | """ | ||
122 | Update a layer | ||
123 | |||
124 | Entry point: /xhr_layer/<layerversion_id> | ||
125 | Method: POST | ||
126 | |||
127 | Args: | ||
128 | vcs_url, dirpath, commit, up_branch, summary, description | ||
129 | |||
130 | add_dep = append a layerversion_id as a dependency | ||
131 | rm_dep = remove a layerversion_id as a depedency | ||
132 | Returns: | ||
133 | {"error": "ok"} | ||
134 | or | ||
135 | {"error": <error message>} | ||
136 | """ | ||
137 | |||
138 | def error_response(error): | ||
139 | return JsonResponse({"error": error}) | ||
140 | |||
141 | try: | ||
142 | # We currently only allow Imported layers to be edited | ||
143 | layer_version = Layer_Version.objects.get( | ||
144 | id=kwargs['layerversion_id'], | ||
145 | project=kwargs['pid'], | ||
146 | layer_source__sourcetype=LayerSource.TYPE_IMPORTED) | ||
147 | |||
148 | except Layer_Version.DoesNotExist: | ||
149 | return error_response("Cannot find imported layer to update") | ||
150 | |||
151 | if "vcs_url" in request.POST: | ||
152 | layer_version.layer.vcs_url = request.POST["vcs_url"] | ||
153 | if "dirpath" in request.POST: | ||
154 | layer_version.dirpath = request.POST["dirpath"] | ||
155 | if "commit" in request.POST: | ||
156 | layer_version.commit = request.POST["commit"] | ||
157 | layer_version.branch = request.POST["commit"] | ||
158 | if "up_branch" in request.POST: | ||
159 | layer_version.up_branch_id = int(request.POST["up_branch"]) | ||
160 | if "summary" in request.POST: | ||
161 | layer_version.layer.summary = request.POST["summary"] | ||
162 | if "description" in request.POST: | ||
163 | layer_version.layer.description = request.POST["description"] | ||
164 | |||
165 | if "add_dep" in request.POST: | ||
166 | lvd = LayerVersionDependency( | ||
167 | layer_version=layer_version, | ||
168 | depends_on_id=request.POST["add_dep"]) | ||
169 | lvd.save() | ||
170 | |||
171 | if "rm_dep" in request.POST: | ||
172 | rm_dep = LayerVersionDependency.objects.get( | ||
173 | layer_version=layer_version, | ||
174 | depends_on_id=request.POST["rm_dep"]) | ||
175 | rm_dep.delete() | ||
176 | |||
177 | try: | ||
178 | layer_version.layer.save() | ||
179 | layer_version.save() | ||
180 | except Exception as e: | ||
181 | return error_response("Could not update layer version entry: %s" | ||
182 | % e) | ||
183 | |||
184 | return JsonResponse({"error": "ok"}) | ||
185 | |||
186 | def delete(self, request, *args, **kwargs): | ||
187 | try: | ||
188 | # We currently only allow Imported layers to be deleted | ||
189 | layer_version = Layer_Version.objects.get( | ||
190 | id=kwargs['layerversion_id'], | ||
191 | project=kwargs['pid'], | ||
192 | layer_source__sourcetype=LayerSource.TYPE_IMPORTED) | ||
193 | except Layer_Version.DoesNotExist: | ||
194 | return error_response("Cannot find imported layer to delete") | ||
195 | |||
196 | try: | ||
197 | ProjectLayer.objects.get(project=kwargs['pid'], | ||
198 | layercommit=layer_version).delete() | ||
199 | except ProjectLayer.DoesNotExist: | ||
200 | pass | ||
201 | |||
202 | layer_version.layer.delete() | ||
203 | layer_version.delete() | ||
204 | |||
205 | return JsonResponse({ | ||
206 | "error": "ok", | ||
207 | "redirect": reverse('project', args=(kwargs['pid'],)) | ||
208 | }) | ||