For bug #159224, use separate xmatch caches for each value of ACCEPT_KEYWORDS.
authorZac Medico <zmedico@gentoo.org>
Sun, 31 Dec 2006 15:35:02 +0000 (15:35 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 31 Dec 2006 15:35:02 +0000 (15:35 -0000)
svn path=/main/trunk/; revision=5438

bin/repoman

index 0cc74f42672b21e5320eb754dd3822f8959f748e..fabde28219f838c94f64b85f82c35ea4c43f1a4f 100755 (executable)
@@ -727,6 +727,7 @@ def x11_deprecation_check(depstr):
 
 
 arch_caches={}
+arch_xmatch_caches = {}
 for x in scanlist:
        #ebuilds and digests added to cvs respectively.
        if verbose:
@@ -1136,16 +1137,13 @@ for x in scanlist:
                                profdir = portdir+"/profiles/"+prof[0]
        
                                if prof[0] in arch_caches:
-                                       dep_settings, xcache = arch_caches[prof[0]]
+                                       dep_settings = arch_caches[prof[0]]
                                else:
                                        dep_settings = portage.config(
                                                config_profile_path=profdir,
                                                config_incrementals=portage_const.INCREMENTALS,
                                                local_config=False)
-                                       portdb.melt()
-                                       portdb.freeze()
-                                       xcache = portdb.xcache
-                                       arch_caches[prof[0]] = (dep_settings, xcache)
+                                       arch_caches[prof[0]] = dep_settings
                                        while True:
                                                try:
                                                        # Protect ACCEPT_KEYWORDS from config.regenerate()
@@ -1154,6 +1152,14 @@ for x in scanlist:
                                                except ValueError:
                                                        break
 
+                               xmatch_cache_key = (prof[0], tuple(groups))
+                               xcache = arch_xmatch_caches.get(xmatch_cache_key)
+                               if xcache is None:
+                                       portdb.melt()
+                                       portdb.freeze()
+                                       xcache = portdb.xcache
+                                       arch_xmatch_caches[xmatch_cache_key] = xcache
+
                                trees["/"]["porttree"].settings = dep_settings
                                portdb.mysettings = dep_settings
                                portdb.xcache = xcache