]> code.ossystems Code Review - openembedded-core.git/commitdiff
bitbake: Add a cache around PACKAGES_DYNAMIC regexps to help performance a bit
authorRichard Purdie <rpurdie@linux.intel.com>
Thu, 23 Jul 2009 14:59:17 +0000 (15:59 +0100)
committerRichard Purdie <rpurdie@linux.intel.com>
Thu, 23 Jul 2009 14:59:17 +0000 (15:59 +0100)
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
bitbake-dev/lib/bb/providers.py
bitbake/lib/bb/providers.py

index d0e71173df57747e242541043cb3856e65f70474..879f1a00b2df54c265c2f7be8045ad42e19ac384 100644 (file)
@@ -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,12 +299,17 @@ def getRuntimeProviders(dataCache, rdepend):
 
     # Only search dynamic packages if we can't find anything in other variables
     for pattern in dataCache.packages_dynamic:
-        pattern = pattern.replace('+', "\+")
-        try:
-            regexp = re.compile(pattern)
-        except:
-            bb.msg.error(bb.msg.domain.Provider, "Error parsing re expression: %s" % pattern)
-            raise
+
+        if pattern in regexp_cache:
+            regexp = regexp_cache[pattern]
+        else:
+            pattern = pattern.replace('+', "\+")
+            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]
 
index 3e842ee0cabbda638834995e8cd1e015404fe123..5785b704eddafbafce88097f0a1307b71637517e 100644 (file)
@@ -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,12 +299,17 @@ def getRuntimeProviders(dataCache, rdepend):
 
     # Only search dynamic packages if we can't find anything in other variables
     for pattern in dataCache.packages_dynamic:
-        pattern = pattern.replace('+', "\+")
-        try:
-            regexp = re.compile(pattern)
-        except:
-            bb.msg.error(bb.msg.domain.Provider, "Error parsing re expression: %s" % pattern)
-            raise
+
+        if pattern in regexp_cache:
+            regexp = regexp_cache[pattern]
+        else:
+            pattern = pattern.replace('+', "\+")
+            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]