summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/data.py
diff options
context:
space:
mode:
authorPeter Seebach <peter.seebach@windriver.com>2013-01-18 11:47:34 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-01-18 12:35:19 +0000
commitfe30cbc2cb0719092f19cba3b06a37e93260994c (patch)
tree715c87a0c77aa75255395b3e70796811ddce3859 /bitbake/lib/bb/data.py
parent4dd6d9139cb77f2b0ff7ab9482e853108efad5aa (diff)
downloadpoky-fe30cbc2cb0719092f19cba3b06a37e93260994c.tar.gz
bitbake: bitbake: data_smart.py and friends: Track variable history
This patch adds tracking of the history of variable assignments. The changes are predominantly localized to data_smart.py and parse/ast.py. cooker.py and data.py are altered to display the recorded data, and turn tracking on for the bitbake -e case. The data.py update_data() function warns DataSmart.finalize() to report the caller one further back up the tree. In general, d.setVar() does what it used to do. Optionally, arguments describing an operation may be appended; if none are present, the operation is implicitly ignored. If it's not ignored, it will attempt to infer missing information (name of variable, value assigned, file and line) by examining the traceback. This slightly elaborate process eliminates a category of problems in which the 'var' member of the keyword arguments dict is set, and a positional argument corresponding to 'var' is also set. It also makes calling much simpler for the common cases. The resulting output gives you a pretty good picture of what values got set, and how they got set. RP Modifications: a) Split from IncludeHistory to separate VariableHistory b) Add dedicated copy function instead of deepcopy c) Use COW for variables dict d) Remove 'value' loginfo value and just use 'details' e) Desensitise code for calling order (set 'op' before/after infer_caller_details was error prone) f) Fix bug where ?= "" wasn't shown correctly g) Log more set operations as some variables mysteriously acquired values previously h) Standardise infer_caller_details to be triggered from .record() where at all possible to reduce overhead in non-enabled cases i) Rename variable parameter names to match inference code j) Add VariableHistory emit() function to match IncludeHistory k) Fix handling of appendVar, prependVar and matching flag ops l) Use ignored=True to stop logging further events where appropriate (Bitbake rev: f00524a3729000cbcb3317fee933ac448fae5e2d) Signed-off-by: Peter Seebach <peter.seebach@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/data.py')
-rw-r--r--bitbake/lib/bb/data.py9
1 files changed, 4 insertions, 5 deletions
diff --git a/bitbake/lib/bb/data.py b/bitbake/lib/bb/data.py
index 2c3e905a77..7047f48934 100644
--- a/bitbake/lib/bb/data.py
+++ b/bitbake/lib/bb/data.py
@@ -166,9 +166,9 @@ def inheritFromOS(d, savedenv, permitted):
166 for s in savedenv.keys(): 166 for s in savedenv.keys():
167 if s in permitted: 167 if s in permitted:
168 try: 168 try:
169 d.setVar(s, getVar(s, savedenv, True)) 169 d.setVar(s, getVar(s, savedenv, True), op = 'from env')
170 if s in exportlist: 170 if s in exportlist:
171 d.setVarFlag(s, "export", True) 171 d.setVarFlag(s, "export", True, op = 'auto env export')
172 except TypeError: 172 except TypeError:
173 pass 173 pass
174 174
@@ -194,8 +194,7 @@ def emit_var(var, o=sys.__stdout__, d = init(), all=False):
194 return 0 194 return 0
195 195
196 if all: 196 if all:
197 commentVal = re.sub('\n', '\n#', str(oval)) 197 d.varhistory.emit(var, oval, val, o)
198 o.write('# %s=%s\n' % (var, commentVal))
199 198
200 if (var.find("-") != -1 or var.find(".") != -1 or var.find('{') != -1 or var.find('}') != -1 or var.find('+') != -1) and not all: 199 if (var.find("-") != -1 or var.find(".") != -1 or var.find('{') != -1 or var.find('}') != -1 or var.find('+') != -1) and not all:
201 return 0 200 return 0
@@ -274,7 +273,7 @@ def emit_func(func, o=sys.__stdout__, d = init()):
274 273
275def update_data(d): 274def update_data(d):
276 """Performs final steps upon the datastore, including application of overrides""" 275 """Performs final steps upon the datastore, including application of overrides"""
277 d.finalize() 276 d.finalize(parent = True)
278 277
279def build_dependencies(key, keys, shelldeps, vardepvals, d): 278def build_dependencies(key, keys, shelldeps, vardepvals, d):
280 deps = set() 279 deps = set()