Inside calc_depclean(), use LinkageMap.findConsumers() for checking
authorZac Medico <zmedico@gentoo.org>
Mon, 10 Aug 2009 02:31:51 +0000 (02:31 -0000)
committerZac Medico <zmedico@gentoo.org>
Mon, 10 Aug 2009 02:31:51 +0000 (02:31 -0000)
intersection of files being removed with providers in the LinkageMap (a
KeyError is raised when there is no intersection).

svn path=/main/trunk/; revision=13968

pym/_emerge/actions.py

index 4632c10f24fb6369104928913e03e3bf9963fa3c..cd980231fc6b3c0e6d56d912ceecfbeba395f7cf 100644 (file)
@@ -901,7 +901,6 @@ def calc_depclean(settings, trees, ldpath_mtimes,
                # packages and any dependencies need to be added to the graph.
                real_vardb = trees[myroot]["vartree"].dbapi
                linkmap = real_vardb.linkmap
-               liblist = linkmap.listLibraryObjects()
                consumer_cache = {}
                provider_cache = {}
                soname_cache = {}
@@ -911,23 +910,20 @@ def calc_depclean(settings, trees, ldpath_mtimes,
 
                for pkg in cleanlist:
                        pkg_dblink = real_vardb._dblink(pkg.cpv)
-                       provided_libs = set()
-
-                       for lib in liblist:
-                               if pkg_dblink.isowner(lib, myroot):
-                                       provided_libs.add(lib)
-
-                       if not provided_libs:
-                               continue
-
                        consumers = {}
-                       for lib in provided_libs:
-                               lib_consumers = consumer_cache.get(lib)
+
+                       for lib in pkg_dblink.getcontents():
+                               lib = lib[len(myroot):]
+                               lib_key = linkmap._obj_key(lib)
+                               lib_consumers = consumer_cache.get(lib_key)
                                if lib_consumers is None:
-                                       lib_consumers = linkmap.findConsumers(lib)
-                                       consumer_cache[lib] = lib_consumers
+                                       try:
+                                               lib_consumers = linkmap.findConsumers(lib_key)
+                                       except KeyError:
+                                               continue
+                                       consumer_cache[lib_key] = lib_consumers
                                if lib_consumers:
-                                       consumers[lib] = lib_consumers
+                                       consumers[lib_key] = lib_consumers
 
                        if not consumers:
                                continue