diff options
author | Richard Purdie <rpurdie@linux.intel.com> | 2009-07-23 17:48:18 +0100 |
---|---|---|
committer | Richard Purdie <rpurdie@linux.intel.com> | 2009-07-23 17:48:18 +0100 |
commit | 72bf7476b2492b6524cb8ff87ee5f4e86b28d975 (patch) | |
tree | 5f518d6124cae3b026f87253630cc4d1fa191396 /lib | |
parent | 720df03c5c45810d8ef89a8dbca6edb9301ca262 (diff) | |
download | bitbake-72bf7476b2492b6524cb8ff87ee5f4e86b28d975.tar.gz |
providers.py: Add caching for the dynamic package regexps (from Poky)
Add caching for the dyanmic package regexps which improves task data
performance significantly.
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/bb/providers.py | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/lib/bb/providers.py b/lib/bb/providers.py index 8b78b97bd..8970fb3be 100644 --- a/lib/bb/providers.py +++ b/lib/bb/providers.py @@ -280,6 +280,8 @@ def filterProvidersRunTime(providers, item, cfgData, dataCache): return eligible, numberPreferred +regexp_cache = {} + def getRuntimeProviders(dataCache, rdepend): """ Return any providers of runtime dependency @@ -297,11 +299,16 @@ def getRuntimeProviders(dataCache, rdepend): # Only search dynamic packages if we can't find anything in other variables for pattern in dataCache.packages_dynamic: - try: - regexp = re.compile(pattern.replace('+', "\+")) - except: - bb.msg.error(bb.msg.domain.Provider, "Error parsing re expression: %s" % pattern) - raise + pattern = pattern.replace('+', "\+") + if pattern in regexp_cache: + regexp = regexp_cache[pattern] + else: + 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): rproviders += dataCache.packages_dynamic[pattern] |