summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/toastergui/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/toaster/toastergui/views.py')
-rwxr-xr-xbitbake/lib/toaster/toastergui/views.py59
1 files changed, 37 insertions, 22 deletions
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py
index a0dcf8797a..11c373a84d 100755
--- a/bitbake/lib/toaster/toastergui/views.py
+++ b/bitbake/lib/toaster/toastergui/views.py
@@ -1935,7 +1935,21 @@ if toastermain.settings.MANAGED:
1935 1935
1936 raise Exception("Invalid HTTP method for this page") 1936 raise Exception("Invalid HTTP method for this page")
1937 1937
1938 # returns a queryset of compatible layers for a project
1939 def _compatible_layerversions_for_project(prj, release = None, layer_name = None):
1940 if release == None:
1941 release = prj.release
1942 # layers on the same branch or layers specifically set for this project
1943 return Layer_Version.objects.filter((Q(up_branch__name = release.branch_name) & Q(project = None)) | Q(project = prj))
1938 1944
1945
1946 # returns the equivalence group for all the layers currently set in the project
1947 def _project_equivalent_layerversions(prj):
1948 return reduce(lambda x, y: list(x) + list(y),
1949 # take all equivalent layers for each entry
1950 map(lambda x: x.layercommit.get_equivalents_wpriority(prj), prj.projectlayer_set.all()) , [])
1951
1952 # returns a list for most recent builds; for use in the Project page, xhr_ updates, and other places, as needed
1939 def _project_recent_build_list(prj): 1953 def _project_recent_build_list(prj):
1940 return map(lambda x: { 1954 return map(lambda x: {
1941 "id": x.pk, 1955 "id": x.pk,
@@ -2101,7 +2115,7 @@ if toastermain.settings.MANAGED:
2101 for i in prj.projectlayer_set.all(): 2115 for i in prj.projectlayer_set.all():
2102 # find and add a similarly-named layer on the new branch 2116 # find and add a similarly-named layer on the new branch
2103 try: 2117 try:
2104 lv = Layer_Version.objects.filter(layer__name = i.layercommit.layer.name, up_branch__name = prj.release.branch_name)[0].get_equivalents_wpriority(prj)[0] 2118 lv = _compatible_layerversions_for_project(prj).filter(layer__name = i.layer.name).get_equivalents_wpriority(prj)[0]
2105 ProjectLayer.objects.get_or_create(project = prj, layercommit = lv) 2119 ProjectLayer.objects.get_or_create(project = prj, layercommit = lv)
2106 except IndexError: 2120 except IndexError:
2107 pass 2121 pass
@@ -2140,30 +2154,32 @@ if toastermain.settings.MANAGED:
2140 else: 2154 else:
2141 raise Exception("No valid project selected") 2155 raise Exception("No valid project selected")
2142 2156
2143 # returns layers for current project release that are not in the project set 2157
2158 def _lv_to_dict(x):
2159 return {"id": x.pk, "name": x.layer.name,
2160 "detail": "(" + x.layer.vcs_url + (")" if x.up_branch == None else " | "+x.up_branch.name+")"),
2161 "giturl": x.layer.vcs_url, "layerdetailurl" : reverse('layerdetails', args=(x.pk,))}
2162
2163
2164 # returns layers for current project release that are not in the project set, matching the name
2144 if request.GET['type'] == "layers": 2165 if request.GET['type'] == "layers":
2145 queryset_all = Layer_Version.objects.filter(layer__name__icontains=request.GET.get('value','')) 2166 queryset_all = _compatible_layerversions_for_project(prj).filter(layer__name__icontains=request.GET.get('value',''))
2146 queryset_all = queryset_all.filter(up_branch__name= prj.release.branch_name).exclude(pk__in = [x.id for x in reduce(lambda x, y: list(x) + list(y), map(lambda x: x.layercommit.get_equivalents_wpriority(prj), prj.projectlayer_set.all()))]) 2167
2168 queryset_all = queryset_all.exclude(pk__in = [x.id for x in _project_equivalent_layerversions(prj)])
2147 2169
2148 queryset_all = set([x.get_equivalents_wpriority(prj)[0] for x in queryset_all[:8]]) 2170 queryset_all = set([x.get_equivalents_wpriority(prj)[0] for x in queryset_all[:8]])
2149 2171
2150 return HttpResponse(jsonfilter( { "error":"ok", 2172 return HttpResponse(jsonfilter( { "error":"ok", "list" : map( _lv_to_dict, queryset_all) }), content_type = "application/json")
2151 "list" : map( lambda x: {"id": x.pk, "name": "%s" % (x.layer.name, ), "detail": "(" + x.layer.vcs_url + (")" if x.up_branch == None else " | "+x.up_branch.name+")")},
2152 queryset_all)
2153 }), content_type = "application/json")
2154 2173
2155 2174
2156 # returns layer dependencies for a layer, excluding current project layers 2175 # returns layer dependencies for a layer, excluding current project layers
2157 if request.GET['type'] == "layerdeps": 2176 if request.GET['type'] == "layerdeps":
2158 queryset_all = LayerVersionDependency.objects.filter(layer_version_id = request.GET['value']) 2177 queryset_all = LayerVersionDependency.objects.filter(layer_version_id = request.GET['value'])
2159 queryset_all = queryset_all.exclude(depends_on__in = reduce(lambda x, y: list(x) + list(y), map(lambda x: x.layercommit.get_equivalents_wpriority(prj), prj.projectlayer_set.all()))) 2178 queryset_all = queryset_all.exclude(depends_on__in = _project_equivalent_layerversions(prj))
2160 queryset_all.order_by("-up_id"); 2179 queryset_all.order_by("-up_id");
2161 2180
2162 return HttpResponse(jsonfilter( { "error":"ok", 2181 return HttpResponse(jsonfilter( { "error":"ok",
2163 "list" : map( 2182 "list" : map( _lv_to_dict, map(lambda x: x.depends_on.get_equivalents_wpriority(prj)[0], queryset_all))
2164 lambda x: {"id": x.pk, "name": x.layer.name, "detail": "(" + x.layer.layer_source.name + (")" if x.up_branch == None else " | "+x.up_branch.name+")"),
2165 "giturl": x.layer.vcs_url, "layerdetailurl" : reverse('layerdetails', args=(x.pk,))},
2166 map(lambda x: x.depends_on.get_equivalents_wpriority(prj)[0], queryset_all))
2167 }), content_type = "application/json") 2183 }), content_type = "application/json")
2168 2184
2169 2185
@@ -2174,20 +2190,20 @@ if toastermain.settings.MANAGED:
2174 2190
2175 retval = [] 2191 retval = []
2176 for i in prj.projectlayer_set.all(): 2192 for i in prj.projectlayer_set.all():
2177 lv = Layer_Version.objects.filter(layer__name = i.layercommit.layer.name, up_branch__name = Release.objects.get(pk=request.GET['value']).branch_name) 2193 lv = _compatible_layerversions_for_project(prj, release = Release.objects.get(pk=request.GET['value']))
2178 if lv.count() < 1: # there is no layer_version with the new release id, and the same name 2194 # there is no layer_version with the new release id, and the same name
2195 if lv.count() < 1:
2179 retval.append(i) 2196 retval.append(i)
2180 2197
2181 return HttpResponse(jsonfilter( {"error":"ok", 2198 return HttpResponse(jsonfilter( {"error":"ok",
2182 "list": map( 2199 "list" : map( _lv_to_dict, map(lambda x: x.layercommit, retval ))
2183 lambda x: {"id": x.layercommit.pk, "name": x.layercommit.layer.name, "detail": "(" + x.layercommit.layer.layer_source.name + (")" if x.layercommit.up_branch == None else " | "+x.layercommit.up_branch.name+")")}, 2200 }), content_type = "application/json")
2184 retval) }), content_type = "application/json")
2185 2201
2186 2202
2187 # returns targets provided by current project layers 2203 # returns targets provided by current project layers
2188 if request.GET['type'] == "targets": 2204 if request.GET['type'] == "targets":
2189 queryset_all = Recipe.objects.all() 2205 queryset_all = Recipe.objects.all()
2190 queryset_all = queryset_all.filter(layer_version__in = reduce(lambda x, y: list(x) + list(y), map(lambda x: x.layercommit.get_equivalents_wpriority(prj), ProjectLayer.objects.filter(project = prj)))) 2206 queryset_all = queryset_all.filter(layer_version__in = reduce(lambda x, y: list(x) + list(y), map(lambda x: x.layercommit.get_equivalents_wpriority(prj), prj.projectlayer_set.all()), []))
2191 return HttpResponse(jsonfilter({ "error":"ok", 2207 return HttpResponse(jsonfilter({ "error":"ok",
2192 "list" : map ( lambda x: {"id": x.pk, "name": x.name, "detail":"[" + x.layer_version.layer.name+ (" | " + x.layer_version.up_branch.name + "]" if x.layer_version.up_branch is not None else "]")}, 2208 "list" : map ( lambda x: {"id": x.pk, "name": x.name, "detail":"[" + x.layer_version.layer.name+ (" | " + x.layer_version.up_branch.name + "]" if x.layer_version.up_branch is not None else "]")},
2193 queryset_all.filter(name__icontains=request.GET.get('value',''))[:8]), 2209 queryset_all.filter(name__icontains=request.GET.get('value',''))[:8]),
@@ -2243,10 +2259,9 @@ if toastermain.settings.MANAGED:
2243 # for that object type. copypasta for all needed table searches 2259 # for that object type. copypasta for all needed table searches
2244 (filter_string, search_term, ordering_string) = _search_tuple(request, Layer_Version) 2260 (filter_string, search_term, ordering_string) = _search_tuple(request, Layer_Version)
2245 2261
2246 queryset_all = Layer_Version.objects.all()
2247
2248 prj = Project.objects.get(pk = request.session['project_id']) 2262 prj = Project.objects.get(pk = request.session['project_id'])
2249 queryset_all = queryset_all.filter(up_branch__name = prj.release.branch_name) 2263
2264 queryset_all = _compatible_layerversions_for_project(prj)
2250 2265
2251 queryset_all = _get_queryset(Layer_Version, queryset_all, filter_string, search_term, ordering_string, '-layer__name') 2266 queryset_all = _get_queryset(Layer_Version, queryset_all, filter_string, search_term, ordering_string, '-layer__name')
2252 2267