bitbake: data_smart: Cache set(self.overrides)

This performs better than continually regeneratiing the set().

Also only use set comparisions when its necessary to save some overhead
as issubset() is slower in the single item case.

(Bitbake rev: db9a4eedcf78969ec50bf0e4a8defba8ff0daa4a)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2015-05-29 10:33:04 +00:00
parent 0ac9c80e08
commit 816acb6ee8

View File

@@ -369,7 +369,9 @@ class DataSmart(MutableMapping):
self.inoverride = True
# Can end up here recursively so setup dummy values
self.overrides = []
self.overridesset = set()
self.overrides = (self.getVar("OVERRIDES", True) or "").split(":") or []
self.overridesset = set(self.overrides)
self.inoverride = False
self.expand_cache = {}
@@ -450,10 +452,10 @@ class DataSmart(MutableMapping):
active = []
self.need_overrides()
for (r, o) in self.overridedata[var]:
if o in self.overrides:
if o in self.overridesset:
active.append(r)
elif "_" in o:
if set(o.split("_")).issubset(set(self.overrides)):
if set(o.split("_")).issubset(self.overridesset):
active.append(r)
for a in active:
self.delVar(a)
@@ -600,10 +602,12 @@ class DataSmart(MutableMapping):
self.need_overrides()
for (r, o) in self.overridedata[var]:
# What about double overrides both with "_" in the name?
if o in self.overrides:
active[o] = r
elif set(o.split("_")).issubset(set(self.overrides)):
if o in self.overridesset:
active[o] = r
elif "_" in o:
if set(o.split("_")).issubset(self.overridesset):
active[o] = r
mod = True
while mod:
mod = False