summaryrefslogtreecommitdiffstats
path: root/bitbake/lib
diff options
context:
space:
mode:
authorAlexandru DAMIAN <alexandru.damian@intel.com>2013-11-14 13:56:30 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-11-15 11:48:53 +0000
commit9fdd8adc17dc732d3983afcaa30b63d69f483dad (patch)
tree9ce36e083236327ed1f15a52920cd2950de4dc3f /bitbake/lib
parent51084379d43a6b6bbf828d2adaaccf803e9da081 (diff)
downloadpoky-9fdd8adc17dc732d3983afcaa30b63d69f483dad.tar.gz
bitbake: cooker, toaster: variable definition tracking
In order to track the file where a configuration variable was defined, this patch bring these changes: * a new feature is defined in CookerFeatures, named BASEDATASTORE_TRACKING. When a UI requests BASEDATASTORE_TRACKING, the base variable definition are tracked when configuration is parsed. * getAllKeysWithFlags now includes variable history in the data dump * toaster_ui.py will record the operation, file path and line number where the variable was changes * toaster Simple UI will display the file path and line number for Configuration page There is a change in the models to accomodate the recording of variable change history. [YOCTO #5227] (Bitbake rev: 78e58fed82f2a71f052485de0052d7b9cca53ffd) Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib')
-rw-r--r--bitbake/lib/bb/cooker.py15
-rw-r--r--bitbake/lib/bb/ui/buildinfohelper.py14
-rw-r--r--bitbake/lib/bb/ui/toasterui.py2
-rw-r--r--bitbake/lib/toaster/bldviewer/templates/configuration.html6
-rw-r--r--bitbake/lib/toaster/orm/models.py6
5 files changed, 32 insertions, 11 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index 267d19e3e2..524ba1182c 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -81,7 +81,7 @@ class SkippedPackage:
81 81
82 82
83class CookerFeatures(object): 83class CookerFeatures(object):
84 _feature_list = [HOB_EXTRA_CACHES, SEND_DEPENDS_TREE] = range(2) 84 _feature_list = [HOB_EXTRA_CACHES, SEND_DEPENDS_TREE, BASEDATASTORE_TRACKING] = range(3)
85 85
86 def __init__(self): 86 def __init__(self):
87 self._features=set() 87 self._features=set()
@@ -177,6 +177,9 @@ class BBCooker:
177 self.data.disableTracking() 177 self.data.disableTracking()
178 178
179 def loadConfigurationData(self): 179 def loadConfigurationData(self):
180 if CookerFeatures.BASEDATASTORE_TRACKING in self.featureset:
181 self.enableDataTracking()
182
180 self.initConfigurationData() 183 self.initConfigurationData()
181 self.databuilder.parseBaseConfiguration() 184 self.databuilder.parseBaseConfiguration()
182 self.data = self.databuilder.data 185 self.data = self.databuilder.data
@@ -189,6 +192,10 @@ class BBCooker:
189 bb.data.update_data(self.event_data) 192 bb.data.update_data(self.event_data)
190 bb.parse.init_parser(self.event_data) 193 bb.parse.init_parser(self.event_data)
191 194
195 if CookerFeatures.BASEDATASTORE_TRACKING in self.featureset:
196 self.disableDataTracking()
197
198
192 def modifyConfigurationVar(self, var, val, default_file, op): 199 def modifyConfigurationVar(self, var, val, default_file, op):
193 if op == "append": 200 if op == "append":
194 self.appendConfigurationVar(var, val, default_file) 201 self.appendConfigurationVar(var, val, default_file)
@@ -320,7 +327,6 @@ class BBCooker:
320 open(confpath, 'w').close() 327 open(confpath, 'w').close()
321 328
322 def parseConfiguration(self): 329 def parseConfiguration(self):
323
324 # Set log file verbosity 330 # Set log file verbosity
325 verboselogs = bb.utils.to_boolean(self.data.getVar("BB_VERBOSE_LOGS", "0")) 331 verboselogs = bb.utils.to_boolean(self.data.getVar("BB_VERBOSE_LOGS", "0"))
326 if verboselogs: 332 if verboselogs:
@@ -1175,7 +1181,10 @@ class BBCooker:
1175 try: 1181 try:
1176 v = self.data.getVar(k, True) 1182 v = self.data.getVar(k, True)
1177 if not k.startswith("__") and not isinstance(v, bb.data_smart.DataSmart): 1183 if not k.startswith("__") and not isinstance(v, bb.data_smart.DataSmart):
1178 dump[k] = { 'v' : v } 1184 dump[k] = {
1185 'v' : v ,
1186 'history' : self.data.varhistory.variable(k),
1187 }
1179 for d in flaglist: 1188 for d in flaglist:
1180 dump[k][d] = self.data.getVarFlag(k, d) 1189 dump[k][d] = self.data.getVarFlag(k, d)
1181 except Exception as e: 1190 except Exception as e:
diff --git a/bitbake/lib/bb/ui/buildinfohelper.py b/bitbake/lib/bb/ui/buildinfohelper.py
index c4131aebf0..170ee12a7e 100644
--- a/bitbake/lib/bb/ui/buildinfohelper.py
+++ b/bitbake/lib/bb/ui/buildinfohelper.py
@@ -27,8 +27,10 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "toaster.toastermain.settings")
27 27
28import toaster.toastermain.settings as toaster_django_settings 28import toaster.toastermain.settings as toaster_django_settings
29from toaster.orm.models import Build, Task, Recipe, Layer_Version, Layer, Target, LogMessage 29from toaster.orm.models import Build, Task, Recipe, Layer_Version, Layer, Target, LogMessage
30from toaster.orm.models import Target_Package, Build_Package, Variable, Build_File 30from toaster.orm.models import Variable, VariableHistory
31from toaster.orm.models import Task_Dependency, Build_Package_Dependency, Target_Package_Dependency, Recipe_Dependency 31from toaster.orm.models import Target_Package, Build_Package, Build_File
32from toaster.orm.models import Task_Dependency, Build_Package_Dependency
33from toaster.orm.models import Target_Package_Dependency, Recipe_Dependency
32from bb.msg import BBLogFormatter as format 34from bb.msg import BBLogFormatter as format
33 35
34class ORMWrapper(object): 36class ORMWrapper(object):
@@ -238,11 +240,15 @@ class ORMWrapper(object):
238 desc = vardump[root_var]['doc'] 240 desc = vardump[root_var]['doc']
239 if desc is None: 241 if desc is None:
240 desc = '' 242 desc = ''
241 Variable.objects.create( build = build_obj, 243 variable_obj = Variable.objects.create( build = build_obj,
242 variable_name = k, 244 variable_name = k,
243 variable_value = value, 245 variable_value = value,
244 description = desc) 246 description = desc)
245 247 for vh in vardump[k]['history']:
248 VariableHistory.objects.create( variable = variable_obj,
249 file_name = vh['file'],
250 line_number = vh['line'],
251 operation = vh['op'])
246 252
247class BuildInfoHelper(object): 253class BuildInfoHelper(object):
248 """ This class gathers the build information from the server and sends it 254 """ This class gathers the build information from the server and sends it
diff --git a/bitbake/lib/bb/ui/toasterui.py b/bitbake/lib/bb/ui/toasterui.py
index 6c5b1529df..d2dba256c4 100644
--- a/bitbake/lib/bb/ui/toasterui.py
+++ b/bitbake/lib/bb/ui/toasterui.py
@@ -41,7 +41,7 @@ import sys
41import time 41import time
42import xmlrpclib 42import xmlrpclib
43 43
44featureSet = [bb.cooker.CookerFeatures.HOB_EXTRA_CACHES, bb.cooker.CookerFeatures.SEND_DEPENDS_TREE] 44featureSet = [bb.cooker.CookerFeatures.HOB_EXTRA_CACHES, bb.cooker.CookerFeatures.SEND_DEPENDS_TREE, bb.cooker.CookerFeatures.BASEDATASTORE_TRACKING]
45 45
46logger = logging.getLogger("BitBake") 46logger = logging.getLogger("BitBake")
47interactive = sys.stdout.isatty() 47interactive = sys.stdout.isatty()
diff --git a/bitbake/lib/toaster/bldviewer/templates/configuration.html b/bitbake/lib/toaster/bldviewer/templates/configuration.html
index 052c37c4e8..8db35e0d98 100644
--- a/bitbake/lib/toaster/bldviewer/templates/configuration.html
+++ b/bitbake/lib/toaster/bldviewer/templates/configuration.html
@@ -5,16 +5,18 @@
5 5
6 <tr> 6 <tr>
7 <th>Name</th> 7 <th>Name</th>
8 <th>Value</th>
9 <th>Description</th> 8 <th>Description</th>
9 <th>Definition history</th>
10 <th>Value</th>
10 </tr> 11 </tr>
11 12
12 {% for variable in configuration %} 13 {% for variable in configuration %}
13 14
14 <tr class="data"> 15 <tr class="data">
15 <td>{{variable.variable_name}}</td> 16 <td>{{variable.variable_name}}</td>
16 <td>{{variable.variable_value}}</td>
17 <td>{% if variable.description %}{{variable.description}}{% endif %}</td> 17 <td>{% if variable.description %}{{variable.description}}{% endif %}</td>
18 <td>{% for vh in variable.variablehistory_set.all %}{{vh.operation}} in {{vh.file_name}}:{{vh.line_number}}<br/>{%endfor%}</td>
19 <td>{{variable.variable_value}}</td>
18 {% endfor %} 20 {% endfor %}
19 21
20{% endblock %} 22{% endblock %}
diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py
index 1e82a65f43..cac8367960 100644
--- a/bitbake/lib/toaster/orm/models.py
+++ b/bitbake/lib/toaster/orm/models.py
@@ -239,11 +239,15 @@ class Variable(models.Model):
239 build = models.ForeignKey(Build, related_name='variable_build') 239 build = models.ForeignKey(Build, related_name='variable_build')
240 variable_name = models.CharField(max_length=100) 240 variable_name = models.CharField(max_length=100)
241 variable_value = models.TextField(blank=True) 241 variable_value = models.TextField(blank=True)
242 file = models.FilePathField(max_length=255)
243 changed = models.BooleanField(default=False) 242 changed = models.BooleanField(default=False)
244 human_readable_name = models.CharField(max_length=200) 243 human_readable_name = models.CharField(max_length=200)
245 description = models.TextField(blank=True) 244 description = models.TextField(blank=True)
246 245
246class VariableHistory(models.Model):
247 variable = models.ForeignKey(Variable)
248 file_name = models.FilePathField(max_length=255)
249 line_number = models.IntegerField(null=True)
250 operation = models.CharField(max_length=16)
247 251
248class LogMessage(models.Model): 252class LogMessage(models.Model):
249 INFO = 0 253 INFO = 0