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

Ed Bartosh ed.bartosh at linux.intel.com
Thu May 21 03:18:41 PDT 2015


On Thu, May 21, 2015 at 10:49:51AM +0100, Damian, Alexandru wrote:
> Taken for submission,
> 
> Can you please post new patches as branches on poky-contrib ?
> 
I started doing it as soon as I've got push rights to poky-contrib.

BTW, this patch is in ed/toaster/relative-path and I submitted this branch for review 3 days ago:
https://lists.yoctoproject.org/pipermail/toaster/2015-May/002159.html

Regards,
Ed

> Thank you,
> Alex
> 
> On Mon, May 18, 2015 at 1:41 PM, Barros Pena, Belen <
> belen.barros.pena at intel.com> wrote:
> 
> > 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
> >
> > --
> > _______________________________________________
> > toaster mailing list
> > toaster at yoctoproject.org
> > https://lists.yoctoproject.org/listinfo/toaster
> >
> 
> 
> 
> -- 
> Alex Damian
> Yocto Project
> SSG / OTC

-- 
--
Regards,
Ed


More information about the toaster mailing list