bitbake: Add a cache around PACKAGES_DYNAMIC regexps to help performance a bit

Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
This commit is contained in:
Richard Purdie 2009-07-23 15:59:17 +01:00
parent a6ca63d77a
commit d02379d2df
2 changed files with 26 additions and 12 deletions

View File

@ -280,6 +280,8 @@ def filterProvidersRunTime(providers, item, cfgData, dataCache):
return eligible, numberPreferred return eligible, numberPreferred
regexp_cache = {}
def getRuntimeProviders(dataCache, rdepend): def getRuntimeProviders(dataCache, rdepend):
""" """
Return any providers of runtime dependency Return any providers of runtime dependency
@ -297,12 +299,17 @@ def getRuntimeProviders(dataCache, rdepend):
# Only search dynamic packages if we can't find anything in other variables # Only search dynamic packages if we can't find anything in other variables
for pattern in dataCache.packages_dynamic: for pattern in dataCache.packages_dynamic:
pattern = pattern.replace('+', "\+")
try: if pattern in regexp_cache:
regexp = re.compile(pattern) regexp = regexp_cache[pattern]
except: else:
bb.msg.error(bb.msg.domain.Provider, "Error parsing re expression: %s" % pattern) pattern = pattern.replace('+', "\+")
raise try:
regexp = re.compile(pattern)
except:
bb.msg.error(bb.msg.domain.Provider, "Error parsing re expression: %s" % pattern)
raise
regexp_cache[pattern] = regexp
if regexp.match(rdepend): if regexp.match(rdepend):
rproviders += dataCache.packages_dynamic[pattern] rproviders += dataCache.packages_dynamic[pattern]

View File

@ -280,6 +280,8 @@ def filterProvidersRunTime(providers, item, cfgData, dataCache):
return eligible, numberPreferred return eligible, numberPreferred
regexp_cache = {}
def getRuntimeProviders(dataCache, rdepend): def getRuntimeProviders(dataCache, rdepend):
""" """
Return any providers of runtime dependency Return any providers of runtime dependency
@ -297,12 +299,17 @@ def getRuntimeProviders(dataCache, rdepend):
# Only search dynamic packages if we can't find anything in other variables # Only search dynamic packages if we can't find anything in other variables
for pattern in dataCache.packages_dynamic: for pattern in dataCache.packages_dynamic:
pattern = pattern.replace('+', "\+")
try: if pattern in regexp_cache:
regexp = re.compile(pattern) regexp = regexp_cache[pattern]
except: else:
bb.msg.error(bb.msg.domain.Provider, "Error parsing re expression: %s" % pattern) pattern = pattern.replace('+', "\+")
raise try:
regexp = re.compile(pattern)
except:
bb.msg.error(bb.msg.domain.Provider, "Error parsing re expression: %s" % pattern)
raise
regexp_cache[pattern] = regexp
if regexp.match(rdepend): if regexp.match(rdepend):
rproviders += dataCache.packages_dynamic[pattern] rproviders += dataCache.packages_dynamic[pattern]