Taken for submission, Can you please post new patches as branches on poky-contrib ? Thank you, Alex On Mon, May 18, 2015 at 1:41 PM, Barros Pena, Belen < belen.barros.pena@intel.com> wrote: > On 18/05/2015 10:03, "Ed Bartosh" wrote: > > >Reworked filtering of config paths. > > > >Stripped clone paths, topdir and its parent directory from the paths > >to config files in configvars view. > > This works for me. Thanks! > > Belén > > > > >[YOCTO #7463] > > > >Signed-off-by: Ed Bartosh > >--- > > .../toaster/toastergui/templates/configvars.html | 10 +-- > > .../toaster/toastergui/templatetags/projecttags.py | 76 > >+++++++--------------- > > bitbake/lib/toaster/toastergui/views.py | 19 ++++-- > > 3 files changed, 42 insertions(+), 63 deletions(-) > > > >diff --git a/bitbake/lib/toaster/toastergui/templates/configvars.html > >b/bitbake/lib/toaster/toastergui/templates/configvars.html > >index 3e4c7e8..42c42a5 100644 > >--- a/bitbake/lib/toaster/toastergui/templates/configvars.html > >+++ b/bitbake/lib/toaster/toastergui/templates/configvars.html > >@@ -54,9 +54,11 @@ > > >href="#variable-{{variable.pk}}">{{variable.variable_name}} > > >href="#variable-{{variable.pk > }}">{{variable.variable_value|truncatechars:1 > >53}} > > >href="#variable-{{variable.pk}}"> > >- {% if variable.vhistory.all %} {% autoescape off %} > >- {{variable.vhistory.all | filter_setin_files:file_filter > >| cut_layer_path_prefix:layer_names}} > >- {% endautoescape %} {% endif %} > >+ {% if variable.vhistory.all %} > >+ {% for path in > >variable.vhistory.all|filter_setin_files:file_filter %} > >+ {{path|cut_path_prefix:dirstostrip}}

> >+ {% endfor %} > >+ {% endif %} > > > > > > {% if variable.description %} > >@@ -115,7 +117,7 @@ > > > > {% for vh in variable.vhistory.all %} > > > >- > >{{forloop.counter}}{{vh.file_name|cut_layer_path_prefix:layer > >_names}}{{vh.operation}}{{vh.line_number}} > >+ > >{{forloop.counter}}{{vh.file_name|cut_path_prefix:dirstostrip > >}}{{vh.operation}}{{vh.line_number}} > > > > {%endfor%} > > > >diff --git a/bitbake/lib/toaster/toastergui/templatetags/projecttags.py > >b/bitbake/lib/toaster/toastergui/templatetags/projecttags.py > >index 54700e3..1bc3bc2 100644 > >--- a/bitbake/lib/toaster/toastergui/templatetags/projecttags.py > >+++ b/bitbake/lib/toaster/toastergui/templatetags/projecttags.py > >@@ -20,6 +20,7 @@ > > # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. > > > > from datetime import datetime, timedelta > >+from os.path import relpath > > import re > > from django import template > > from django.utils import timezone > >@@ -182,47 +183,23 @@ def variable_parent_name(value): > > return re.sub('_[a-z].*', '', value) > > > > @register.filter > >-def filter_setin_files(file_list,matchstr): > >- """ filter/search the 'set in' file lists. Note > >- that this output is not autoescaped to allow > >- the

marks, but this is safe as the data > >- is file paths > >- """ > >- > >- # no filters, show last file (if any) > >- if matchstr == ":": > >- if file_list: > >- return file_list[len(file_list)-1].file_name > >- else: > >- return '' > >- > >- search, filter = matchstr.partition(':')[::2] > >- htmlstr="" > >- # match only filters > >- if search == '': > >- for i in range(len(file_list)): > >- if re.search(filter, file_list[i].file_name): > >- if htmlstr.find(file_list[i].file_name + "

") < 0: > >- htmlstr += file_list[i].file_name + "

" > >- return htmlstr > >- > >- # match only search string, plus always last file > >- if filter == "": > >- for i in range(len(file_list)-1): > >- if re.search(search,file_list[i].file_name): > >- if htmlstr.find(file_list[i].file_name + "

") < 0: > >- htmlstr += file_list[i].file_name + "

" > >- if htmlstr.find(file_list[len(file_list)-1].file_name) < 0: > >- htmlstr += file_list[len(file_list)-1].file_name > >- return htmlstr > >- > >- # match filter or search string > >- for i in range(len(file_list)): > >- if re.search(filter, file_list[i].file_name) or > >re.search(search,file_list[i].file_name): > >- if htmlstr.find(file_list[i].file_name + "

") < 0: > >- htmlstr += file_list[i].file_name + "

" > >- return htmlstr > >- > >+def filter_setin_files(file_list, matchstr): > >+ """Filter/search the 'set in' file lists.""" > >+ result = [] > >+ search, filter = matchstr.split(':') > >+ for pattern in (search, filter): > >+ if pattern: > >+ for fobj in file_list: > >+ fname = fobj.file_name > >+ if fname not in result and re.search(pattern, fname): > >+ result.append(fname) > >+ > >+ # no filter, show last file (if any) > >+ last = list(file_list)[-1].file_name > >+ if not filter and last not in result: > >+ result.append(last) > >+ > >+ return result > > > > @register.filter > > def string_slice(strvar,slicevar): > >@@ -313,16 +290,9 @@ def is_shaid(text): > > return False > > > > @register.filter > >-def cut_layer_path_prefix(fullpath,layer_names): > >- ### if some part of the full local path to a layer matches > >- ### an entry in layer_names (sorted desc), return the layer > >- ### name relative path. > >- for lname in layer_names: > >- # import rpdb; rpdb.set_trace() > >- # only try layer names that are non-trivial to avoid false > >matches > >- if len(lname) >= 4: > >- # match layer name with as a subdir / or for remote layers /_ > >- if re.search('/' + lname, fullpath) or re.search('/_' + > >lname, fullpath): > >- parts = re.split(lname, fullpath, 1) > >- return lname + parts[1] > >+def cut_path_prefix(fullpath, prefixes): > >+ """Cut path prefix from fullpath.""" > >+ for prefix in prefixes: > >+ if fullpath.startswith(prefix): > >+ return relpath(fullpath, prefix) > > return fullpath > >diff --git a/bitbake/lib/toaster/toastergui/views.py > >b/bitbake/lib/toaster/toastergui/views.py > >index 9217d8a..7f3621d 100755 > >--- a/bitbake/lib/toaster/toastergui/views.py > >+++ b/bitbake/lib/toaster/toastergui/views.py > >@@ -28,6 +28,8 @@ from django.shortcuts import render, redirect > > from orm.models import Build, Target, Task, Layer, Layer_Version, > >Recipe, LogMessage, Variable > > from orm.models import Task_Dependency, Recipe_Dependency, Package, > >Package_File, Package_Dependency > > from orm.models import Target_Installed_Package, Target_File, > >Target_Image_File, BuildArtifact > >+from bldcontrol.models import BuildEnvironment, BuildRequest > >+from bldcontrol import bbcontroller > > from django.views.decorators.cache import cache_control > > from django.core.urlresolvers import reverse > > from django.core.exceptions import MultipleObjectsReturned > >@@ -39,6 +41,7 @@ from datetime import timedelta, datetime, date > > from django.utils import formats > > from toastergui.templatetags.projecttags import json as jsonfilter > > import json > >+from os.path import dirname > > > > # all new sessions should come through the landing page; > > # determine in which mode we are running in, and redirect appropriately > >@@ -1298,11 +1301,6 @@ def configvars(request, build_id): > > > > variables = _build_page_range(Paginator(queryset, pagesize), > >request.GET.get('page', 1)) > > > >- layers = > >Layer.objects.filter(layer_version_layer__projectlayer__project__build=bui > >ld_id).order_by("-name") > >- layer_names = map(lambda layer : layer.name, layers) > >- # special case for meta built-in layer > >- layer_names.append('meta') > >- > > # show all matching files (not just the last one) > > file_filter= search_term + ":" > > if filter_string.find('/conf/') > 0: > >@@ -1315,6 +1313,15 @@ def configvars(request, build_id): > > file_filter += '/bitbake.conf' > > > >build_dir=re.sub("/tmp/log/.*","",Build.objects.get(pk=build_id).cooker_lo > >g_path) > > > >+ clones = [] > >+ for breq in BuildRequest.objects.filter(build_id=build_id): > >+ bc = bbcontroller.getBuildEnvironmentController(pk = > >breq.environment.id) > >+ for brl in breq.brlayer_set.all(): > >+ localdirname = bc.getGitCloneDirectory(brl.giturl, > >brl.commit) > >+ if not localdirname.startswith("/"): > >+ localdirname = os.path.join(bc.be.sourcedir, > >localdirname) > >+ clones.append(localdirname) > >+ > > context = { > > 'objectname': 'configvars', > > 'object_search_display':'BitBake variables', > >@@ -1325,7 +1332,7 @@ def configvars(request, build_id): > > 'total_count':queryset_with_search.count(), > > 'default_orderby' : 'variable_name:+', > > 'search_term':search_term, > >- 'layer_names' : layer_names, > >+ 'dirstostrip': clones + [dirname(build_dir), > >dirname(dirname(build_dir))], > > # Specifies the display of columns for the table, appearance > >in "Edit columns" box, toggling default show/hide, and specifying filters > >for columns > > 'tablecols' : [ > > {'name': 'Variable', > >-- > >2.1.4 > > > >-- > >_______________________________________________ > >toaster mailing list > >toaster@yoctoproject.org > >https://lists.yoctoproject.org/listinfo/toaster > > -- > _______________________________________________ > toaster mailing list > toaster@yoctoproject.org > https://lists.yoctoproject.org/listinfo/toaster > -- Alex Damian Yocto Project SSG / OTC