[Toaster] [review-request][PATCH v6] bitbake: toastergui: show relative paths in configvars view

Barros Pena, Belen belen.barros.pena at intel.com
Mon May 18 05:41:34 PDT 2015


On 18/05/2015 10:03, "Ed Bartosh" <ed.bartosh at linux.intel.com> 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 <ed.bartosh at linux.intel.com>
>---
> .../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 @@
>         <td class="variable_name"><a data-toggle="modal"
>href="#variable-{{variable.pk}}">{{variable.variable_name}}</a></td>
>         <td class="variable_value"><a data-toggle="modal"
>href="#variable-{{variable.pk}}">{{variable.variable_value|truncatechars:1
>53}}</a></td>
>         <td class="file"><a data-toggle="modal"
>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}}<p>
>+                {% endfor %}
>+            {% endif %}
>         </a></td>
>         <td class="description">
>             {% if variable.description %}
>@@ -115,7 +117,7 @@
>                 <tbody>
>                     {% for vh in variable.vhistory.all %}
>                     <tr>
>-                 
><td>{{forloop.counter}}</td><td>{{vh.file_name|cut_layer_path_prefix:layer
>_names}}</td><td>{{vh.operation}}</td><td>{{vh.line_number}}</td>
>+                 
><td>{{forloop.counter}}</td><td>{{vh.file_name|cut_path_prefix:dirstostrip
>}}</td><td>{{vh.operation}}</td><td>{{vh.line_number}}</td>
>                     </tr>
>                     {%endfor%}
>                 </tbody>
>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 <p> 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 + "<p>") < 0:
>-                    htmlstr += file_list[i].file_name + "<p>"
>-        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 + "<p>") < 0:
>-                    htmlstr += file_list[i].file_name + "<p>"
>-        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 + "<p>") < 0:
>-                htmlstr += file_list[i].file_name + "<p>"
>-    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 at yoctoproject.org
>https://lists.yoctoproject.org/listinfo/toaster



More information about the toaster mailing list