summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2011-02-23 11:48:01 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-02-24 21:38:30 +0000
commit99c38e8e31adf02a1945f54fe47dd1ac7941cb21 (patch)
treeb781230a50070c5a8c5ad7143c1f32809b1caa49
parent1faa0bd624f4f5399ea3fbcc87b109c97b821801 (diff)
downloadbitbake-99c38e8e31adf02a1945f54fe47dd1ac7941cb21.tar.gz
bitbake/data_smart: Improve the way lazyassignment works
Currently, if a variable has been set with ??= and the code looks it up before the data finalisation phase, no value is found. This is causes serious problems for anonymous python functions which manipulate data, or for the fetcher revision handling code where revisions can be set with ??=. There is also a significant performance implication for processing lazy assignment in finalise. Moving the check for a default value into getVarFlag addresses both the timing issue and the performace. This change gives a 7% real time performance improvement to parsing the Poky metadata. The cost of the check at this point is minimal since we have all the data flags available. This should also fix Yocto bug 752. (From Poky rev: 6ea24f04cd635295d826f03d9c7d8a08cc1d5b31) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--lib/bb/data_smart.py2
-rw-r--r--lib/bb/parse/ast.py8
2 files changed, 2 insertions, 8 deletions
diff --git a/lib/bb/data_smart.py b/lib/bb/data_smart.py
index 83e6f70cd..e76fbbf6c 100644
--- a/lib/bb/data_smart.py
+++ b/lib/bb/data_smart.py
@@ -298,6 +298,8 @@ class DataSmart(MutableMapping):
if local_var:
if flag in local_var:
value = copy.copy(local_var[flag])
+ elif flag == "content" and "defaultval" in local_var:
+ value = copy.copy(local_var["defaultval"])
if expand and value:
value = self.expand(value, None)
return value
diff --git a/lib/bb/parse/ast.py b/lib/bb/parse/ast.py
index 8fffe1e8f..b968db40b 100644
--- a/lib/bb/parse/ast.py
+++ b/lib/bb/parse/ast.py
@@ -115,9 +115,6 @@ class DataNode(AstNode):
if 'flag' in groupd and groupd['flag'] != None:
bb.data.setVarFlag(key, groupd['flag'], val, data)
elif groupd["lazyques"]:
- assigned = bb.data.getVar("__lazy_assigned", data) or []
- assigned.append(key)
- bb.data.setVar("__lazy_assigned", assigned, data)
bb.data.setVarFlag(key, "defaultval", val, data)
else:
bb.data.setVar(key, val, data)
@@ -310,11 +307,6 @@ def handleInherit(statements, filename, lineno, m):
statements.append(InheritNode(filename, lineno, classes.split()))
def finalize(fn, d, variant = None):
- for lazykey in bb.data.getVar("__lazy_assigned", d) or ():
- if bb.data.getVar(lazykey, d) is None:
- val = bb.data.getVarFlag(lazykey, "defaultval", d)
- bb.data.setVar(lazykey, val, d)
-
bb.data.expandKeys(d)
bb.data.update_data(d)
code = []