aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2015-07-24 11:41:44 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-07-24 11:53:42 +0100
commit100b447a161ef20fa559e39516cd32fa78e38262 (patch)
treef443f2bb633fe2787f59c588fa502555a201db1c
parent7be76d8f79ea92fd4bd36146eb9a4b86551b526d (diff)
downloadbitbake-100b447a161ef20fa559e39516cd32fa78e38262.tar.gz
data_smart: Improve override history logging
Calling record() for each override alteration is slow. Since we now expand overrides dynamically we don't have to record the log data at each alteration, we can instead print it directly from the existing data stores at variable history print time using the exact same data stores. This massively improves performance of the data store when parsing with bitbake -e for example, it will improve memory overhead as well. The only downside is that VariableHistory has to poke into the datastore for some of its data but that seems an acceptable tradeoff rather than double caching. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--lib/bb/data.py2
-rw-r--r--lib/bb/data_smart.py23
2 files changed, 14 insertions, 11 deletions
diff --git a/lib/bb/data.py b/lib/bb/data.py
index a21de112e..f6415a467 100644
--- a/lib/bb/data.py
+++ b/lib/bb/data.py
@@ -202,7 +202,7 @@ def emit_var(var, o=sys.__stdout__, d = init(), all=False):
return False
if all:
- d.varhistory.emit(var, oval, val, o)
+ d.varhistory.emit(var, oval, val, o, d)
if (var.find("-") != -1 or var.find(".") != -1 or var.find('{') != -1 or var.find('}') != -1 or var.find('+') != -1) and not all:
return False
diff --git a/lib/bb/data_smart.py b/lib/bb/data_smart.py
index f0187b7a1..26f69d105 100644
--- a/lib/bb/data_smart.py
+++ b/lib/bb/data_smart.py
@@ -252,8 +252,20 @@ class VariableHistory(object):
else:
return []
- def emit(self, var, oval, val, o):
+ def emit(self, var, oval, val, o, d):
history = self.variable(var)
+
+ # Append override history
+ if var in d.overridedata:
+ for (r, override) in d.overridedata[var]:
+ for event in self.variable(r):
+ loginfo = event.copy()
+ if 'flag' in loginfo and not loginfo['flag'].startswith("_"):
+ continue
+ loginfo['variable'] = var
+ loginfo['op'] = 'override[%s]:%s' % (override, loginfo['op'])
+ history.append(loginfo)
+
commentVal = re.sub('\n', '\n#', str(oval))
if history:
if len(history) == 1:
@@ -496,15 +508,6 @@ class DataSmart(MutableMapping):
# Force CoW by recreating the list first
self.overridedata[shortvar] = list(self.overridedata[shortvar])
self.overridedata[shortvar].append([var, override])
- for event in self.varhistory.variable(var):
- if 'flag' in loginfo and not loginfo['flag'].startswith("_"):
- continue
- loginfo = event.copy()
- loginfo['variable'] = shortvar
- loginfo['op'] = 'override[%s]:%s' % (override, loginfo['op'])
- loginfo['nodups'] = True
- self.varhistory.record(**loginfo)
-
override = None
if "_" in shortvar:
override = var[shortvar.rfind('_')+1:]