Skip to contentSkip to conversation

bitbake: toastergui: show relative paths in configvars view

PATCH In review Ed Bartosh 3 participants 15 messages May 2, 2015 – May 21, 2015

lore
Share & tools
lore

Ed Bartosh

author
#0 lore raw

PATCH 1/1 bitbake: toastergui: show relative paths in configvars view

Strip topdir from paths to config files in configvars view. Got rid of specific filter cut_layer_path_prefix.

[YOCTO #7463]

---
 .../lib/toaster/toastergui/templates/configvars.html    |  4 ++--
 .../lib/toaster/toastergui/templatetags/projecttags.py  | 17 ++++-------------
 bitbake/lib/toaster/toastergui/views.py                 |  8 ++------
 3 files changed, 8 insertions(+), 21 deletions(-)
bitbake/lib/toaster/toastergui/templates/configvars.html +2 -2
index 3e4c7e8..42d8fa7 100644
@@ -55,7 +55,7 @@
         <td class="variable_value"><a data-toggle="modal" href="#variable-{{variable.pk}}">{{variable.variable_value|truncatechars:153}}</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}}
+                {{variable.vhistory.all | filter_setin_files:file_filter | cut_path_prefix:topdir}}
             {% endautoescape %} {% endif %}
         </a></td>
         <td class="description">
@@ -115,7 +115,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:topdir}}</td><td>{{vh.operation}}</td><td>{{vh.line_number}}</td>
                     </tr>
                     {%endfor%}
                 </tbody>
bitbake/lib/toaster/toastergui/templatetags/projecttags.py +4 -13
index 54700e3..4c3bffd 100644
@@ -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
@@ -313,16 +314,6 @@ 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]
-    return fullpath
+def cut_path_prefix(fullpath, topdir):
+    """Cut topdir from the fullpath."""
+    return relpath(fullpath, topdir) if fullpath.startswith(topdir) else fullpath
bitbake/lib/toaster/toastergui/views.py +2 -6
index b5c4d87..e7110c8 100755
@@ -39,6 +39,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
@@ -1326,11 +1327,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=build_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:
@@ -1353,7 +1349,7 @@ def configvars(request, build_id):
                 'total_count':queryset_with_search.count(),
                 'default_orderby' : 'variable_name:+',
                 'search_term':search_term,
-                'layer_names' : layer_names,
+                'topdir': 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',
Signature · 1 line
2.1.4
#1 lore raw
Quoted 2 lines · Ed Bartosh

Strip topdir from paths to config files in configvars view. Got rid of specific filter cut_layer_path_prefix.

The paths in the variables table are not looking as expected when I apply this. The paths to local.conf and bblayers.conf do show now as relative paths, but paths to files inside a layer become full paths (instead of relative paths). So instead of seeing

meta/conf/bitbake.conf

I see

/home/<user>/<poky_dir>/meta/conf/bitbake.conf

I've uploaded an screenshot here

http://imgur.com/BhehRxF

All paths in this table should be relative paths.

Cheers

Belén

Quoted 126 lines

[YOCTO #7463]

---
.../lib/toaster/toastergui/templates/configvars.html | 4 ++--
.../lib/toaster/toastergui/templatetags/projecttags.py | 17
++++-------------
bitbake/lib/toaster/toastergui/views.py | 8 ++------

3 files changed, 8 insertions(+), 21 deletions(-)
bitbake/lib/toaster/toastergui/templates/configvars.html +0 -0
index 3e4c7e8..42d8fa7 100644
@@ -55,7 +55,7 @@
        <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}}
+ {{variable.vhistory.all | filter_setin_files:file_filter
| cut_path_prefix:topdir}}

            {% endautoescape %} {% endif %}
        </a></td>
        <td class="description">
bitbake/lib/toaster/toastergui/templates/configvars.html +0 -1
@@ -115,7 +115,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:topdir}}</t d><td>{{vh.operation}}</td><td>{{vh.line_number}}</td>

                    </tr>
                    {%endfor%}
                </tbody>
bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -0
index 54700e3..4c3bffd 100644
@@ -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

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -0
@@ -313,16 +314,6 @@ def is_shaid(text):
        return False
 

@register.filter

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -7
-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

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -3
-        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):

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +3 -3
-                parts = re.split(lname, fullpath, 1)
-                return lname + parts[1]
-    return fullpath
+def cut_path_prefix(fullpath, topdir):
+    """Cut topdir from the fullpath."""
+    return relpath(fullpath, topdir) if fullpath.startswith(topdir) else

fullpath

bitbake/lib/toaster/toastergui/views.py +0 -0
index b5c4d87..e7110c8 100755
@@ -39,6 +39,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
bitbake/lib/toaster/toastergui/views.py +0 -1
@@ -1326,11 +1327,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")

bitbake/lib/toaster/toastergui/views.py +1 -5
-    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:
@@ -1353,7 +1349,7 @@ def configvars(request, build_id):
                'total_count':queryset_with_search.count(),
                'default_orderby' : 'variable_name:+',
                'search_term':search_term,
-                'layer_names' : layer_names,
+                'topdir': 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',
Signature · 7 lines
2.1.4

-- 
_______________________________________________
toaster mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/toaster
author
#2 lore raw

PATCH 1/1 bitbake: toastergui: show relative paths in configvars view

Stripped topdir from paths to config files in configvars view.

[YOCTO #7463]

---
 bitbake/lib/toaster/toastergui/templates/configvars.html   | 4 ++--
 bitbake/lib/toaster/toastergui/templatetags/projecttags.py | 6 ++++++
 bitbake/lib/toaster/toastergui/views.py                    | 2 ++
 3 files changed, 10 insertions(+), 2 deletions(-)
bitbake/lib/toaster/toastergui/templates/configvars.html +2 -2
index 3e4c7e8..99ffe8b 100644
@@ -55,7 +55,7 @@
         <td class="variable_value"><a data-toggle="modal" href="#variable-{{variable.pk}}">{{variable.variable_value|truncatechars:153}}</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}}
+                {{variable.vhistory.all | filter_setin_files:file_filter | cut_layer_path_prefix:layer_names | cut_topdir_path_prefix:topdir}}
             {% endautoescape %} {% endif %}
         </a></td>
         <td class="description">
@@ -115,7 +115,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_layer_path_prefix:layer_names|cut_topdir_path_prefix:topdir}}</td><td>{{vh.operation}}</td><td>{{vh.line_number}}</td>
                     </tr>
                     {%endfor%}
                 </tbody>
bitbake/lib/toaster/toastergui/templatetags/projecttags.py +6 -0
index 54700e3..67762a5 100644
@@ -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
@@ -326,3 +327,8 @@ def cut_layer_path_prefix(fullpath,layer_names):
                 parts = re.split(lname, fullpath, 1)
                 return lname + parts[1]
     return fullpath
+
[email protected]
+def cut_topdir_path_prefix(fullpath, topdir):
+    """Cut topdir from the fullpath."""
+    return relpath(fullpath, topdir) if fullpath.startswith(topdir) else fullpath
bitbake/lib/toaster/toastergui/views.py +2 -0
index 7849b50..d2cd367 100755
@@ -39,6 +39,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
@@ -1326,6 +1327,7 @@ def configvars(request, build_id):
                 'default_orderby' : 'variable_name:+',
                 'search_term':search_term,
                 'layer_names' : layer_names,
+                'topdir': 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',
Signature · 1 line
2.1.4
author
#3 lore raw

On Tue, May 05, 2015 at 03:57:13PM +0300, Ed Bartosh wrote:

Sorry, wrong list. Please ignore.

Quoted 77 lines

Stripped topdir from paths to config files in configvars view.

[YOCTO #7463]

---
 bitbake/lib/toaster/toastergui/templates/configvars.html   | 4 ++--
 bitbake/lib/toaster/toastergui/templatetags/projecttags.py | 6 ++++++
 bitbake/lib/toaster/toastergui/views.py                    | 2 ++
 3 files changed, 10 insertions(+), 2 deletions(-)
bitbake/lib/toaster/toastergui/templates/configvars.html +2 -2
index 3e4c7e8..99ffe8b 100644
@@ -55,7 +55,7 @@
         <td class="variable_value"><a data-toggle="modal" href="#variable-{{variable.pk}}">{{variable.variable_value|truncatechars:153}}</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}}
+                {{variable.vhistory.all | filter_setin_files:file_filter | cut_layer_path_prefix:layer_names | cut_topdir_path_prefix:topdir}}
             {% endautoescape %} {% endif %}
         </a></td>
         <td class="description">
@@ -115,7 +115,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_layer_path_prefix:layer_names|cut_topdir_path_prefix:topdir}}</td><td>{{vh.operation}}</td><td>{{vh.line_number}}</td>
                     </tr>
                     {%endfor%}
                 </tbody>
bitbake/lib/toaster/toastergui/templatetags/projecttags.py +6 -0
index 54700e3..67762a5 100644
@@ -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
@@ -326,3 +327,8 @@ def cut_layer_path_prefix(fullpath,layer_names):
                 parts = re.split(lname, fullpath, 1)
                 return lname + parts[1]
     return fullpath
+
[email protected]
+def cut_topdir_path_prefix(fullpath, topdir):
+    """Cut topdir from the fullpath."""
+    return relpath(fullpath, topdir) if fullpath.startswith(topdir) else fullpath
bitbake/lib/toaster/toastergui/views.py +2 -0
index 7849b50..d2cd367 100755
@@ -39,6 +39,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
@@ -1326,6 +1327,7 @@ def configvars(request, build_id):
                 'default_orderby' : 'variable_name:+',
                 'search_term':search_term,
                 'layer_names' : layer_names,
+                'topdir': 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',
Signature · 1 line
2.1.4
Signature · 3 lines
--
Regards,
Ed
author
#4 lore raw

PATCH 1/1 bitbake: toastergui: show relative paths in configvars view

In reply to Barros Pena, Belen

Stripped topdir from paths to config files in configvars view.

[YOCTO #7463]

---
 bitbake/lib/toaster/toastergui/templates/configvars.html   | 4 ++--
 bitbake/lib/toaster/toastergui/templatetags/projecttags.py | 6 ++++++
 bitbake/lib/toaster/toastergui/views.py                    | 2 ++
 3 files changed, 10 insertions(+), 2 deletions(-)
bitbake/lib/toaster/toastergui/templates/configvars.html +2 -2
index 3e4c7e8..99ffe8b 100644
@@ -55,7 +55,7 @@
         <td class="variable_value"><a data-toggle="modal" href="#variable-{{variable.pk}}">{{variable.variable_value|truncatechars:153}}</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}}
+                {{variable.vhistory.all | filter_setin_files:file_filter | cut_layer_path_prefix:layer_names | cut_topdir_path_prefix:topdir}}
             {% endautoescape %} {% endif %}
         </a></td>
         <td class="description">
@@ -115,7 +115,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_layer_path_prefix:layer_names|cut_topdir_path_prefix:topdir}}</td><td>{{vh.operation}}</td><td>{{vh.line_number}}</td>
                     </tr>
                     {%endfor%}
                 </tbody>
bitbake/lib/toaster/toastergui/templatetags/projecttags.py +6 -0
index 54700e3..67762a5 100644
@@ -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
@@ -326,3 +327,8 @@ def cut_layer_path_prefix(fullpath,layer_names):
                 parts = re.split(lname, fullpath, 1)
                 return lname + parts[1]
     return fullpath
+
[email protected]
+def cut_topdir_path_prefix(fullpath, topdir):
+    """Cut topdir from the fullpath."""
+    return relpath(fullpath, topdir) if fullpath.startswith(topdir) else fullpath
bitbake/lib/toaster/toastergui/views.py +2 -0
index 7849b50..d2cd367 100755
@@ -39,6 +39,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
@@ -1326,6 +1327,7 @@ def configvars(request, build_id):
                 'default_orderby' : 'variable_name:+',
                 'search_term':search_term,
                 'layer_names' : layer_names,
+                'topdir': 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',
Signature · 1 line
2.1.4
#5 lore raw
Quoted 1 line · Ed Bartosh

Stripped topdir from paths to config files in configvars view.

Almost! Most paths are now ok, but we still seem to be showing full paths for files inside the /bitbake directory.

It can be seen quite well it in this screenshot:

http://i.imgur.com/Kk4WmeB.png

Thanks!!

Belén

Quoted 97 lines

[YOCTO #7463]

---

bitbake/lib/toaster/toastergui/templates/configvars.html   | 4 ++--
bitbake/lib/toaster/toastergui/templatetags/projecttags.py | 6 ++++++
bitbake/lib/toaster/toastergui/views.py                    | 2 ++
3 files changed, 10 insertions(+), 2 deletions(-)
bitbake/lib/toaster/toastergui/templates/configvars.html +0 -0
index 3e4c7e8..99ffe8b 100644
@@ -55,7 +55,7 @@
        <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}}
+ {{variable.vhistory.all | filter_setin_files:file_filter
| cut_layer_path_prefix:layer_names | cut_topdir_path_prefix:topdir}}

            {% endautoescape %} {% endif %}
        </a></td>
        <td class="description">
bitbake/lib/toaster/toastergui/templates/configvars.html +0 -1
@@ -115,7 +115,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_layer_path_prefix:layer _names|cut_topdir_path_prefix:topdir}}</td><td>{{vh.operation}}</td><td>{{ vh.line_number}}</td>

                    </tr>
                    {%endfor%}
                </tbody>
bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -0
index 54700e3..67762a5 100644
@@ -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

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +5 -0
@@ -326,3 +327,8 @@ def cut_layer_path_prefix(fullpath,layer_names):
                parts = re.split(lname, fullpath, 1)
                return lname + parts[1]
    return fullpath
+
[email protected]
+def cut_topdir_path_prefix(fullpath, topdir):
+    """Cut topdir from the fullpath."""
+    return relpath(fullpath, topdir) if fullpath.startswith(topdir) else

fullpath

bitbake/lib/toaster/toastergui/views.py +0 -0
index 7849b50..d2cd367 100755
@@ -39,6 +39,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
bitbake/lib/toaster/toastergui/views.py +1 -0
@@ -1326,6 +1327,7 @@ def configvars(request, build_id):
                'default_orderby' : 'variable_name:+',
                'search_term':search_term,
                'layer_names' : layer_names,
+                'topdir': 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',
Signature · 7 lines
2.1.4

-- 
_______________________________________________
toaster mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/toaster
author
#6 lore raw

PATCH v3 1/1 bitbake: toastergui: show relative paths in configvars view

Stripped topdir and its parent directory from paths to config files in configvars view.

[YOCTO #7463]

tbs

---
 bitbake/lib/toaster/toastergui/templates/configvars.html   | 4 ++--
 bitbake/lib/toaster/toastergui/templatetags/projecttags.py | 9 +++++++++
 bitbake/lib/toaster/toastergui/views.py                    | 2 ++
 3 files changed, 13 insertions(+), 2 deletions(-)
bitbake/lib/toaster/toastergui/templates/configvars.html +2 -2
index 3e4c7e8..99ffe8b 100644
@@ -55,7 +55,7 @@
         <td class="variable_value"><a data-toggle="modal" href="#variable-{{variable.pk}}">{{variable.variable_value|truncatechars:153}}</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}}
+                {{variable.vhistory.all | filter_setin_files:file_filter | cut_layer_path_prefix:layer_names | cut_topdir_path_prefix:topdir}}
             {% endautoescape %} {% endif %}
         </a></td>
         <td class="description">
@@ -115,7 +115,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_layer_path_prefix:layer_names|cut_topdir_path_prefix:topdir}}</td><td>{{vh.operation}}</td><td>{{vh.line_number}}</td>
                     </tr>
                     {%endfor%}
                 </tbody>
bitbake/lib/toaster/toastergui/templatetags/projecttags.py +9 -0
index 54700e3..f77e42e 100644
@@ -20,6 +20,7 @@
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 from datetime import datetime, timedelta
+from os.path import relpath, dirname
 import re
 from django import template
 from django.utils import timezone
@@ -326,3 +327,11 @@ def cut_layer_path_prefix(fullpath,layer_names):
                 parts = re.split(lname, fullpath, 1)
                 return lname + parts[1]
     return fullpath
+
[email protected]
+def cut_topdir_path_prefix(fullpath, topdir):
+    """Cut topdir and its parent directory from the fullpath."""
+    for prefix in (topdir, dirname(topdir)):
+        if fullpath.startswith(prefix):
+            return relpath(fullpath, prefix)
+    return fullpath
bitbake/lib/toaster/toastergui/views.py +2 -0
index 7849b50..d2cd367 100755
@@ -39,6 +39,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
@@ -1326,6 +1327,7 @@ def configvars(request, build_id):
                 'default_orderby' : 'variable_name:+',
                 'search_term':search_term,
                 'layer_names' : layer_names,
+                'topdir': 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',
Signature · 1 line
2.1.4
author
#7 lore raw

PATCH v4 1/1 bitbake: toastergui: show relative paths in configvars view

In reply to Barros Pena, Belen

Stripped topdir and its parent directory from paths to config files in configvars view.

[YOCTO #7463]

---
 bitbake/lib/toaster/toastergui/templates/configvars.html   | 4 ++--
 bitbake/lib/toaster/toastergui/templatetags/projecttags.py | 9 +++++++++
 bitbake/lib/toaster/toastergui/views.py                    | 2 ++
 3 files changed, 13 insertions(+), 2 deletions(-)
bitbake/lib/toaster/toastergui/templates/configvars.html +2 -2
index 3e4c7e8..99ffe8b 100644
@@ -55,7 +55,7 @@
         <td class="variable_value"><a data-toggle="modal" href="#variable-{{variable.pk}}">{{variable.variable_value|truncatechars:153}}</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}}
+                {{variable.vhistory.all | filter_setin_files:file_filter | cut_layer_path_prefix:layer_names | cut_topdir_path_prefix:topdir}}
             {% endautoescape %} {% endif %}
         </a></td>
         <td class="description">
@@ -115,7 +115,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_layer_path_prefix:layer_names|cut_topdir_path_prefix:topdir}}</td><td>{{vh.operation}}</td><td>{{vh.line_number}}</td>
                     </tr>
                     {%endfor%}
                 </tbody>
bitbake/lib/toaster/toastergui/templatetags/projecttags.py +9 -0
index 54700e3..f77e42e 100644
@@ -20,6 +20,7 @@
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 from datetime import datetime, timedelta
+from os.path import relpath, dirname
 import re
 from django import template
 from django.utils import timezone
@@ -326,3 +327,11 @@ def cut_layer_path_prefix(fullpath,layer_names):
                 parts = re.split(lname, fullpath, 1)
                 return lname + parts[1]
     return fullpath
+
[email protected]
+def cut_topdir_path_prefix(fullpath, topdir):
+    """Cut topdir and its parent directory from the fullpath."""
+    for prefix in (topdir, dirname(topdir)):
+        if fullpath.startswith(prefix):
+            return relpath(fullpath, prefix)
+    return fullpath
bitbake/lib/toaster/toastergui/views.py +2 -0
index 7849b50..d2cd367 100755
@@ -39,6 +39,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
@@ -1326,6 +1327,7 @@ def configvars(request, build_id):
                 'default_orderby' : 'variable_name:+',
                 'search_term':search_term,
                 'layer_names' : layer_names,
+                'topdir': 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',
Signature · 1 line
2.1.4
#8 lore raw

Hi Ed,

Thanks for the patch set - impressive work :).

I would appreciate if, in the future, you could put all patches on a branch on poky-contrib and mail in the branch name in the subject, such as:

[review-request] branch/name

This would trigger the yocto automated tester which doesn't currently process individual patches.

Thank you,
Alex

Quoted 99 lines · Ed Bartosh

Stripped topdir and its parent directory from paths to config files in configvars view.

[YOCTO #7463]

---
 bitbake/lib/toaster/toastergui/templates/configvars.html   | 4 ++--
 bitbake/lib/toaster/toastergui/templatetags/projecttags.py | 9 +++++++++
 bitbake/lib/toaster/toastergui/views.py                    | 2 ++
 3 files changed, 13 insertions(+), 2 deletions(-)
bitbake/lib/toaster/toastergui/templates/configvars.html +0 -0
index 3e4c7e8..99ffe8b 100644
@@ -55,7 +55,7 @@
         <td class="variable_value"><a data-toggle="modal"

href="#variable-{{variable.pk }}">{{variable.variable_value|truncatechars:153}}</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}}
+ {{variable.vhistory.all | filter_setin_files:file_filter
| cut_layer_path_prefix:layer_names | cut_topdir_path_prefix:topdir}}

             {% endautoescape %} {% endif %}
         </a></td>
         <td class="description">
bitbake/lib/toaster/toastergui/templates/configvars.html +0 -1
@@ -115,7 +115,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_layer_path_prefix:layer_names|cut_topdir_path_prefix:topdir}}</td><td>{{vh.operation}}</td><td>{{vh.line_number}}</td>

                     </tr>
                     {%endfor%}
                 </tbody>
bitbake/lib/toaster/toastergui/templatetags/projecttags.py +9 -0
index 54700e3..f77e42e 100644
@@ -20,6 +20,7 @@
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 from datetime import datetime, timedelta
+from os.path import relpath, dirname
 import re
 from django import template
 from django.utils import timezone
@@ -326,3 +327,11 @@ def cut_layer_path_prefix(fullpath,layer_names):
                 parts = re.split(lname, fullpath, 1)
                 return lname + parts[1]
     return fullpath
+
[email protected]
+def cut_topdir_path_prefix(fullpath, topdir):
+    """Cut topdir and its parent directory from the fullpath."""
+    for prefix in (topdir, dirname(topdir)):
+        if fullpath.startswith(prefix):
+            return relpath(fullpath, prefix)
+    return fullpath
bitbake/lib/toaster/toastergui/views.py +2 -0
index 7849b50..d2cd367 100755
@@ -39,6 +39,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
@@ -1326,6 +1327,7 @@ def configvars(request, build_id):
                 'default_orderby' : 'variable_name:+',
                 'search_term':search_term,
                 'layer_names' : layer_names,
+                'topdir': 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
[email protected]
https://lists.yoctoproject.org/listinfo/toaster

Signature · 3 lines
Alex Damian
Yocto Project
SSG / OTC
#9 lore raw
In reply to Ed Bartosh
Quoted 2 lines · Ed Bartosh

Stripped topdir and its parent directory from paths to config files in configvars view.

Ed, I am so sorry about this :( But there are still a couple of issues with the paths:

1. Paths to files inside /bitbake are showing the parent of the /bitbake directory. Here is an example in the BBFILES variable

http://i.imgur.com/xfUutMN.png

I spoke to Paul Eggleton and he thinks we should be showing that path from the /bitbake directory. So in the screenshot above, the path should be:

bitbake/lib/bb/cooker.py

2. Something strange is going on when you apply a filter to the table. It's a bit hard to explain, so this is how to reproduce it.

* Build something. When the build is done, click on the build target name, then click on 'Configuration' in the left nav.
* Search for 'DISTRO_VERSION'. The path looks as expected.
* Now click on the little filter button in the "Set in file" column heading.
* In the options listed, select the radio button for "Distro configuration variables", then click the "Apply" button

The table shows the paths to the 2 distro files that touched the DISTRO_VERSION variable: this works as expected. But the second path is showing in full. However, if you click on the variable name, in the history the paths display correctly.

This only happens when you use a filter AND a single table cell shows more than one path.

I am really sorry about this: didn't think this was going to be so tricky :/

Cheers

Belén

Quoted 99 lines

[YOCTO #7463]

---

bitbake/lib/toaster/toastergui/templates/configvars.html   | 4 ++--
bitbake/lib/toaster/toastergui/templatetags/projecttags.py | 9 +++++++++
bitbake/lib/toaster/toastergui/views.py                    | 2 ++
3 files changed, 13 insertions(+), 2 deletions(-)
bitbake/lib/toaster/toastergui/templates/configvars.html +0 -0
index 3e4c7e8..99ffe8b 100644
@@ -55,7 +55,7 @@
        <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}}
+ {{variable.vhistory.all | filter_setin_files:file_filter
| cut_layer_path_prefix:layer_names | cut_topdir_path_prefix:topdir}}

            {% endautoescape %} {% endif %}
        </a></td>
        <td class="description">
bitbake/lib/toaster/toastergui/templates/configvars.html +0 -1
@@ -115,7 +115,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_layer_path_prefix:layer _names|cut_topdir_path_prefix:topdir}}</td><td>{{vh.operation}}</td><td>{{ vh.line_number}}</td>

                    </tr>
                    {%endfor%}
                </tbody>
bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -0
index 54700e3..f77e42e 100644
@@ -20,6 +20,7 @@
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 

from datetime import datetime, timedelta
+from os.path import relpath, dirname
import re
from django import template
from django.utils import timezone

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +8 -0
@@ -326,3 +327,11 @@ def cut_layer_path_prefix(fullpath,layer_names):
                parts = re.split(lname, fullpath, 1)
                return lname + parts[1]
    return fullpath
+
[email protected]
+def cut_topdir_path_prefix(fullpath, topdir):
+    """Cut topdir and its parent directory from the fullpath."""
+    for prefix in (topdir, dirname(topdir)):
+        if fullpath.startswith(prefix):
+            return relpath(fullpath, prefix)
+    return fullpath
bitbake/lib/toaster/toastergui/views.py +0 -0
index 7849b50..d2cd367 100755
@@ -39,6 +39,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
bitbake/lib/toaster/toastergui/views.py +1 -0
@@ -1326,6 +1327,7 @@ def configvars(request, build_id):
                'default_orderby' : 'variable_name:+',
                'search_term':search_term,
                'layer_names' : layer_names,
+                'topdir': 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',
Signature · 7 lines
2.1.4

-- 
_______________________________________________
toaster mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/toaster
author
#10 lore raw

PATCH v5 1/1 bitbake: toastergui: show relative paths in configvars view

Reworked filtering of config paths.

Stripped clone paths, topdir and its parent directory from the paths to config files in configvars view.

[YOCTO #7463]

---
 .../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(-)
bitbake/lib/toaster/toastergui/templates/configvars.html +6 -4
index 3e4c7e8..42c42a5 100644
@@ -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:153}}</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>
bitbake/lib/toaster/toastergui/templatetags/projecttags.py +23 -53

92 lines not on this page · raw message

bitbake/lib/toaster/toastergui/views.py +13 -6
index 9217d8a..7f3621d 100755
@@ -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=build_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_log_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',
Signature · 1 line
2.1.4
author
#11 lore raw

PATCH v6 1/1 bitbake: toastergui: show relative paths in configvars view

In reply to Barros Pena, Belen

Reworked filtering of config paths.

Stripped clone paths, topdir and its parent directory from the paths to config files in configvars view.

[YOCTO #7463]

---
 .../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(-)
bitbake/lib/toaster/toastergui/templates/configvars.html +6 -4
index 3e4c7e8..42c42a5 100644
@@ -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:153}}</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>
bitbake/lib/toaster/toastergui/templatetags/projecttags.py +23 -53

92 lines not on this page · raw message

bitbake/lib/toaster/toastergui/views.py +13 -6
index 9217d8a..7f3621d 100755
@@ -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=build_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_log_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',
Signature · 1 line
2.1.4
#12 lore raw
Quoted 4 lines · Ed Bartosh

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

Quoted 234 lines

[YOCTO #7463]

---
.../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(-)
bitbake/lib/toaster/toastergui/templates/configvars.html +0 -0
index 3e4c7e8..42c42a5 100644
@@ -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}}">

bitbake/lib/toaster/toastergui/templates/configvars.html +0 -2
-            {% if variable.vhistory.all %} {% autoescape off %}
-                {{variable.vhistory.all | filter_setin_files:file_filter

| cut_layer_path_prefix:layer_names}}

bitbake/lib/toaster/toastergui/templates/configvars.html +2 -1
-            {% endautoescape %} {% endif %}
+            {% if variable.vhistory.all %}
+                {% for path in

variable.vhistory.all|filter_setin_files:file_filter %}

bitbake/lib/toaster/toastergui/templates/configvars.html +3 -1
+                    {{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>
bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -0
index 54700e3..1bc3bc2 100644
@@ -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

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -0
@@ -182,47 +183,23 @@ def variable_parent_name(value):
    return re.sub('_[a-z].*', '', value)
 

@register.filter

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -37
-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):

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +17 -4
-            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):

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -0
@@ -313,16 +290,9 @@ def is_shaid(text):
        return False
 

@register.filter

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -7
-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

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -3
-        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):

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +5 -2
-                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
bitbake/lib/toaster/toastergui/views.py +0 -0
index 9217d8a..7f3621d 100755
@@ -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

bitbake/lib/toaster/toastergui/views.py +2 -0
+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

bitbake/lib/toaster/toastergui/views.py +0 -0
@@ -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
bitbake/lib/toaster/toastergui/views.py +0 -1
@@ -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")

bitbake/lib/toaster/toastergui/views.py +0 -4
-    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)

bitbake/lib/toaster/toastergui/views.py +3 -0
+    clones = []
+    for breq in BuildRequest.objects.filter(build_id=build_id):
+        bc = bbcontroller.getBuildEnvironmentController(pk =

breq.environment.id)

bitbake/lib/toaster/toastergui/views.py +2 -0
+        for brl in breq.brlayer_set.all():
+            localdirname = bc.getGitCloneDirectory(brl.giturl,

brl.commit)

bitbake/lib/toaster/toastergui/views.py +2 -0
+            if not localdirname.startswith("/"):
+                localdirname = os.path.join(bc.be.sourcedir,

localdirname)

bitbake/lib/toaster/toastergui/views.py +3 -1
+            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',
Signature · 7 lines
2.1.4

-- 
_______________________________________________
toaster mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/toaster
#13 lore raw

Taken for submission,

Can you please post new patches as branches on poky-contrib ?

Thank you,
Alex

Quoted 253 lines · Belen
Quoted 4 lines · Ed Bartosh

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

Quoted 18 lines

[YOCTO #7463]

---
.../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(-)
bitbake/lib/toaster/toastergui/templates/configvars.html +0 -0
index 3e4c7e8..42c42a5 100644
@@ -54,9 +54,11 @@
        <td class="variable_name"><a data-toggle="modal"
Quoted 3 lines

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

Quoted 205 lines

53}}</a></td>

        <td class="file"><a data-toggle="modal"

href="#variable-{{variable.pk}}">

bitbake/lib/toaster/toastergui/templates/configvars.html +0 -2
-            {% if variable.vhistory.all %} {% autoescape off %}
-                {{variable.vhistory.all | filter_setin_files:file_filter

| cut_layer_path_prefix:layer_names}}

bitbake/lib/toaster/toastergui/templates/configvars.html +2 -1
-            {% endautoescape %} {% endif %}
+            {% if variable.vhistory.all %}
+                {% for path in

variable.vhistory.all|filter_setin_files:file_filter %}

bitbake/lib/toaster/toastergui/templates/configvars.html +3 -1
+                    {{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>
bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -0
index 54700e3..1bc3bc2 100644
@@ -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

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -0
@@ -182,47 +183,23 @@ def variable_parent_name(value):
    return re.sub('_[a-z].*', '', value)
 

@register.filter

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -37
-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):

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +17 -4
-            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):

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -0
@@ -313,16 +290,9 @@ def is_shaid(text):
        return False
 

@register.filter

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -7
-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

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -3
-        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):

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +5 -2
-                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
bitbake/lib/toaster/toastergui/views.py +0 -0
index 9217d8a..7f3621d 100755
@@ -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

bitbake/lib/toaster/toastergui/views.py +2 -0
+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

bitbake/lib/toaster/toastergui/views.py +0 -0
@@ -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
bitbake/lib/toaster/toastergui/views.py +0 -1
@@ -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")

bitbake/lib/toaster/toastergui/views.py +0 -4
-    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)

bitbake/lib/toaster/toastergui/views.py +3 -0
+    clones = []
+    for breq in BuildRequest.objects.filter(build_id=build_id):
+        bc = bbcontroller.getBuildEnvironmentController(pk =

breq.environment.id)

bitbake/lib/toaster/toastergui/views.py +2 -0
+        for brl in breq.brlayer_set.all():
+            localdirname = bc.getGitCloneDirectory(brl.giturl,

brl.commit)

bitbake/lib/toaster/toastergui/views.py +2 -0
+            if not localdirname.startswith("/"):
+                localdirname = os.path.join(bc.be.sourcedir,

localdirname)

bitbake/lib/toaster/toastergui/views.py +3 -1
+            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',
Quoted 8 lines

--
2.1.4

--
_______________________________________________
toaster mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/toaster

--
_______________________________________________
toaster mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/toaster

Signature · 3 lines
Alex Damian
Yocto Project
SSG / OTC
author
#14 lore raw
Quoted 4 lines · Alexandru

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

Quoted 266 lines

Thank you,
Alex

Quoted 253 lines · Belen
Quoted 4 lines · Ed Bartosh

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

Quoted 18 lines

[YOCTO #7463]

---
.../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(-)
bitbake/lib/toaster/toastergui/templates/configvars.html +0 -0
index 3e4c7e8..42c42a5 100644
@@ -54,9 +54,11 @@
        <td class="variable_name"><a data-toggle="modal"
Quoted 3 lines

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

Quoted 205 lines

53}}</a></td>

        <td class="file"><a data-toggle="modal"

href="#variable-{{variable.pk}}">

bitbake/lib/toaster/toastergui/templates/configvars.html +0 -2
-            {% if variable.vhistory.all %} {% autoescape off %}
-                {{variable.vhistory.all | filter_setin_files:file_filter

| cut_layer_path_prefix:layer_names}}

bitbake/lib/toaster/toastergui/templates/configvars.html +2 -1
-            {% endautoescape %} {% endif %}
+            {% if variable.vhistory.all %}
+                {% for path in

variable.vhistory.all|filter_setin_files:file_filter %}

bitbake/lib/toaster/toastergui/templates/configvars.html +3 -1
+                    {{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>
bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -0
index 54700e3..1bc3bc2 100644
@@ -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

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -0
@@ -182,47 +183,23 @@ def variable_parent_name(value):
    return re.sub('_[a-z].*', '', value)
 

@register.filter

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -37
-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):

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +17 -4
-            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):

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -0
@@ -313,16 +290,9 @@ def is_shaid(text):
        return False
 

@register.filter

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -7
-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

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +0 -3
-        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):

bitbake/lib/toaster/toastergui/templatetags/projecttags.py +5 -2
-                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
bitbake/lib/toaster/toastergui/views.py +0 -0
index 9217d8a..7f3621d 100755
@@ -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

bitbake/lib/toaster/toastergui/views.py +2 -0
+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

bitbake/lib/toaster/toastergui/views.py +0 -0
@@ -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
bitbake/lib/toaster/toastergui/views.py +0 -1
@@ -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")

bitbake/lib/toaster/toastergui/views.py +0 -4
-    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)

bitbake/lib/toaster/toastergui/views.py +3 -0
+    clones = []
+    for breq in BuildRequest.objects.filter(build_id=build_id):
+        bc = bbcontroller.getBuildEnvironmentController(pk =

breq.environment.id)

bitbake/lib/toaster/toastergui/views.py +2 -0
+        for brl in breq.brlayer_set.all():
+            localdirname = bc.getGitCloneDirectory(brl.giturl,

brl.commit)

bitbake/lib/toaster/toastergui/views.py +2 -0
+            if not localdirname.startswith("/"):
+                localdirname = os.path.join(bc.be.sourcedir,

localdirname)

bitbake/lib/toaster/toastergui/views.py +3 -1
+            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',
Quoted 8 lines

--
2.1.4

--
_______________________________________________
toaster mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/toaster

--
_______________________________________________
toaster mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/toaster

Signature · 3 lines
Alex Damian
Yocto Project
SSG / OTC
Signature · 3 lines
--
Regards,
Ed