Nove to new layout
This commit is contained in:
126
bin/get_preserved_libs
Executable file
126
bin/get_preserved_libs
Executable file
@@ -0,0 +1,126 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import sys
|
||||
|
||||
from _emerge.actions import load_emerge_config
|
||||
import portage.dep
|
||||
|
||||
settings, trees, mtimedb = load_emerge_config()
|
||||
vardb = trees[settings["ROOT"]]["vartree"].dbapi
|
||||
|
||||
linkmap = vardb._linkmap
|
||||
reg = vardb._plib_registry
|
||||
|
||||
reg.lock()
|
||||
try:
|
||||
plibdata = reg.getPreservedLibs()
|
||||
|
||||
if plibdata:
|
||||
sys.stdout.write("# list of bumped libraries:\n")
|
||||
|
||||
for cpv, paths in plibdata.items():
|
||||
sys.stdout.write("%s\n" % (cpv,))
|
||||
for path in sorted(paths):
|
||||
sys.stderr.write(" %s\n" % (path,))
|
||||
|
||||
if plibdata:
|
||||
sys.stdout.write("# list of inverse deps:\n")
|
||||
|
||||
# taken from display_preserved_libs.py, Portage
|
||||
linkmap.rebuild() # can raise CommandNotFound
|
||||
consumer_map = {}
|
||||
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)
|
||||
|
||||
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
|
||||
|
||||
all_preserved = set()
|
||||
all_preserved.update(*plibdata.values())
|
||||
owners_map = {}
|
||||
|
||||
for cpv in plibdata:
|
||||
sys.stdout.write("%s\n" % (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:
|
||||
sys.stderr.write(" - %s" % (p,))
|
||||
f = alt_paths[0]
|
||||
consumers = consumer_map.get(f, [])
|
||||
|
||||
consumers_non_preserved = [c for c in consumers
|
||||
if c not in all_preserved]
|
||||
if consumers_non_preserved:
|
||||
# Filter the consumers that are preserved libraries, since
|
||||
# they don't need to be rebuilt (see bug #461908).
|
||||
consumers = consumers_non_preserved
|
||||
|
||||
for c in consumers:
|
||||
owner_pkgs = []
|
||||
if c in all_preserved:
|
||||
# The owner is displayed elsewhere due to having
|
||||
# its libs preserved, so distinguish this special
|
||||
# case (see bug #461908).
|
||||
owners_desc = "preserved"
|
||||
else:
|
||||
owner_cpvs = [x.mycpv for x in owners.get(c, [])]
|
||||
owner_pkgs.extend(owner_cpvs)
|
||||
owners_desc = ", ".join(owner_cpvs)
|
||||
|
||||
sys.stderr.write(" used by %s (%s)\n" % (c, owners_desc))
|
||||
|
||||
for owner_pkg in owner_pkgs:
|
||||
cp_slot = "%s:%s" % (
|
||||
portage.dep.dep_getkey("=" + owner_pkg),
|
||||
vardb.aux_get(owner_pkg, ["SLOT"])[0]
|
||||
)
|
||||
obj = owners_map.setdefault(cp_slot, set())
|
||||
obj.add(c)
|
||||
|
||||
sys.stdout.flush()
|
||||
sys.stderr.flush()
|
||||
|
||||
if owners_map:
|
||||
sys.stdout.write("# grouped list of rebuilds:\n")
|
||||
|
||||
for owner_pkg in sorted(owners_map.keys()):
|
||||
owner_files = sorted(owners_map[owner_pkg])
|
||||
sys.stdout.write("%s\n" % (owner_pkg,))
|
||||
for owner_file in owner_files:
|
||||
sys.stderr.write(" %s\n" % (owner_file,))
|
||||
|
||||
sys.stdout.flush()
|
||||
sys.stderr.flush()
|
||||
|
||||
finally:
|
||||
reg.unlock()
|
||||
Reference in New Issue
Block a user