display_preserved_libs: move to separate file
authorZac Medico <zmedico@gentoo.org>
Sun, 14 Oct 2012 22:36:37 +0000 (15:36 -0700)
committerZac Medico <zmedico@gentoo.org>
Sun, 14 Oct 2012 22:36:37 +0000 (15:36 -0700)
pym/_emerge/main.py
pym/portage/util/_dyn_libs/display_preserved_libs.py [new file with mode: 0644]

index adb6327c8ecd1a7c695eeb03aa32cc952167c691..9fb42752d2e27b4def8ea7880ba2d39991623ac1 100644 (file)
@@ -14,6 +14,7 @@ import portage
 portage.proxy.lazyimport.lazyimport(globals(),
        'portage.news:count_unread_news,display_news_notifications',
        'portage.emaint.modules.logs.logs:CleanLogs',
+       'portage.util._dyn_libs.display_preserved_libs:display_preserved_libs',
 )
 from portage import os
 from portage import _encodings
@@ -240,94 +241,6 @@ def chk_updated_info_files(root, infodirs, prev_mtimes, retval):
                                if icount > 0 and portage.util.noiselimit >= 0:
                                        out.einfo("Processed %d info files." % (icount,))
 
-def display_preserved_libs(vardbapi, myopts):
-       MAX_DISPLAY = 3
-
-       if vardbapi._linkmap is None or \
-               vardbapi._plib_registry is None:
-               # preserve-libs is entirely disabled
-               return
-
-       # Explicitly load and prune the PreservedLibsRegistry in order
-       # to ensure that we do not display stale data.
-       vardbapi._plib_registry.load()
-
-       if vardbapi._plib_registry.hasEntries():
-               if "--quiet" in myopts:
-                       print()
-                       print(colorize("WARN", "!!!") + " existing preserved libs found")
-                       return
-               else:
-                       print()
-                       print(colorize("WARN", "!!!") + " existing preserved libs:")
-
-               plibdata = vardbapi._plib_registry.getPreservedLibs()
-               linkmap = vardbapi._linkmap
-               consumer_map = {}
-               owners = {}
-
-               try:
-                       linkmap.rebuild()
-               except portage.exception.CommandNotFound as e:
-                       writemsg_level("!!! Command Not Found: %s\n" % (e,),
-                               level=logging.ERROR, noiselevel=-1)
-                       del e
-               else:
-                       search_for_owners = set()
-                       for cpv in plibdata:
-                               internal_plib_keys = set(linkmap._obj_key(f) \
-                                       for f in plibdata[cpv])
-                               for f in plibdata[cpv]:
-                                       if f in consumer_map:
-                                               continue
-                                       consumers = []
-                                       for c in linkmap.findConsumers(f):
-                                               # Filter out any consumers that are also preserved libs
-                                               # belonging to the same package as the provider.
-                                               if linkmap._obj_key(c) not in internal_plib_keys:
-                                                       consumers.append(c)
-                                       consumers.sort()
-                                       consumer_map[f] = consumers
-                                       search_for_owners.update(consumers[:MAX_DISPLAY+1])
-
-                       owners = {}
-                       for f in search_for_owners:
-                               owner_set = set()
-                               for owner in linkmap.getOwners(f):
-                                       owner_dblink = vardbapi._dblink(owner)
-                                       if owner_dblink.exists():
-                                               owner_set.add(owner_dblink)
-                               if owner_set:
-                                       owners[f] = owner_set
-
-               for cpv in plibdata:
-                       print(colorize("WARN", ">>>") + " package: %s" % cpv)
-                       samefile_map = {}
-                       for f in plibdata[cpv]:
-                               obj_key = linkmap._obj_key(f)
-                               alt_paths = samefile_map.get(obj_key)
-                               if alt_paths is None:
-                                       alt_paths = set()
-                                       samefile_map[obj_key] = alt_paths
-                               alt_paths.add(f)
-
-                       for alt_paths in samefile_map.values():
-                               alt_paths = sorted(alt_paths)
-                               for p in alt_paths:
-                                       print(colorize("WARN", " * ") + " - %s" % (p,))
-                               f = alt_paths[0]
-                               consumers = consumer_map.get(f, [])
-                               for c in consumers[:MAX_DISPLAY]:
-                                       print(colorize("WARN", " * ") + "     used by %s (%s)" % \
-                                               (c, ", ".join(x.mycpv for x in owners.get(c, []))))
-                               if len(consumers) == MAX_DISPLAY + 1:
-                                       print(colorize("WARN", " * ") + "     used by %s (%s)" % \
-                                               (consumers[MAX_DISPLAY], ", ".join(x.mycpv \
-                                               for x in owners.get(consumers[MAX_DISPLAY], []))))
-                               elif len(consumers) > MAX_DISPLAY:
-                                       print(colorize("WARN", " * ") + "     used by %d other files" % (len(consumers) - MAX_DISPLAY))
-               print("Use " + colorize("GOOD", "emerge @preserved-rebuild") + " to rebuild packages using these libraries")
-
 def post_emerge(myaction, myopts, myfiles,
        target_root, trees, mtimedb, retval):
        """
@@ -404,7 +317,21 @@ def post_emerge(myaction, myopts, myfiles,
                        if vdb_lock:
                                vardbapi.unlock()
 
-       display_preserved_libs(vardbapi, myopts)
+       # Explicitly load and prune the PreservedLibsRegistry in order
+       # to ensure that we do not display stale data.
+       vardbapi._plib_registry.load()
+
+       if vardbapi._plib_registry.hasEntries():
+               if "--quiet" in myopts:
+                       print()
+                       print(colorize("WARN", "!!!") + " existing preserved libs found")
+               else:
+                       print()
+                       print(colorize("WARN", "!!!") + " existing preserved libs:")
+                       display_preserved_libs(vardbapi)
+                       print("Use " + colorize("GOOD", "emerge @preserved-rebuild") +
+                               " to rebuild packages using these libraries")
+
        chk_updated_cfg_files(settings['EROOT'], config_protect)
 
        display_news_notification(root_config, myopts)
diff --git a/pym/portage/util/_dyn_libs/display_preserved_libs.py b/pym/portage/util/_dyn_libs/display_preserved_libs.py
new file mode 100644 (file)
index 0000000..bcb7827
--- /dev/null
@@ -0,0 +1,79 @@
+# Copyright 2007-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+from __future__ import print_function
+
+import logging
+
+import portage
+from portage.output import colorize
+
+def display_preserved_libs(vardb):
+
+       MAX_DISPLAY = 3
+
+       plibdata = vardb._plib_registry.getPreservedLibs()
+       linkmap = vardb._linkmap
+       consumer_map = {}
+       owners = {}
+
+       try:
+               linkmap.rebuild()
+       except portage.exception.CommandNotFound as e:
+               portage.util.writemsg_level("!!! Command Not Found: %s\n" % (e,),
+                       level=logging.ERROR, noiselevel=-1)
+       else:
+               search_for_owners = set()
+               for cpv in plibdata:
+                       internal_plib_keys = set(linkmap._obj_key(f) \
+                               for f in plibdata[cpv])
+                       for f in plibdata[cpv]:
+                               if f in consumer_map:
+                                       continue
+                               consumers = []
+                               for c in linkmap.findConsumers(f):
+                                       # Filter out any consumers that are also preserved libs
+                                       # belonging to the same package as the provider.
+                                       if linkmap._obj_key(c) not in internal_plib_keys:
+                                               consumers.append(c)
+                               consumers.sort()
+                               consumer_map[f] = consumers
+                               search_for_owners.update(consumers[:MAX_DISPLAY+1])
+
+               owners = {}
+               for f in search_for_owners:
+                       owner_set = set()
+                       for owner in linkmap.getOwners(f):
+                               owner_dblink = vardb._dblink(owner)
+                               if owner_dblink.exists():
+                                       owner_set.add(owner_dblink)
+                       if owner_set:
+                               owners[f] = owner_set
+
+       for cpv in plibdata:
+               print(colorize("WARN", ">>>") + " package: %s" % cpv)
+               samefile_map = {}
+               for f in plibdata[cpv]:
+                       obj_key = linkmap._obj_key(f)
+                       alt_paths = samefile_map.get(obj_key)
+                       if alt_paths is None:
+                               alt_paths = set()
+                               samefile_map[obj_key] = alt_paths
+                       alt_paths.add(f)
+
+               for alt_paths in samefile_map.values():
+                       alt_paths = sorted(alt_paths)
+                       for p in alt_paths:
+                               print(colorize("WARN", " * ") + " - %s" % (p,))
+                       f = alt_paths[0]
+                       consumers = consumer_map.get(f, [])
+                       for c in consumers[:MAX_DISPLAY]:
+                               print(colorize("WARN", " * ") + "     used by %s (%s)" % \
+                                       (c, ", ".join(x.mycpv for x in owners.get(c, []))))
+                       if len(consumers) == MAX_DISPLAY + 1:
+                               print(colorize("WARN", " * ") + "     used by %s (%s)" % \
+                                       (consumers[MAX_DISPLAY], ", ".join(x.mycpv \
+                                       for x in owners.get(consumers[MAX_DISPLAY], []))))
+                       elif len(consumers) > MAX_DISPLAY:
+                               print(colorize("WARN", " * ") + "     used by %d other files" %
+                                       (len(consumers) - MAX_DISPLAY))