From: "Zac Medico" <zmedico@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/portage:master commit in: pym/portage/util/_dyn_libs/
Date: Fri, 22 Jul 2011 20:38:17 +0000 (UTC) [thread overview]
Message-ID: <53bce8a6d96f04acc97871712c107387d14f45e6.zmedico@gentoo> (raw)
commit: 53bce8a6d96f04acc97871712c107387d14f45e6
Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Fri Jul 22 20:38:04 2011 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Fri Jul 22 20:38:04 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=53bce8a6
LinkageMapELF: use a class for _obj_properies
This simplifies the interface, avoiding the need for hardcoded indexes
and making it easy to add new attributes.
---
pym/portage/util/_dyn_libs/LinkageMapELF.py | 42 ++++++++++++++++++++-------
1 files changed, 31 insertions(+), 11 deletions(-)
diff --git a/pym/portage/util/_dyn_libs/LinkageMapELF.py b/pym/portage/util/_dyn_libs/LinkageMapELF.py
index 49a7d35..90d43e7 100644
--- a/pym/portage/util/_dyn_libs/LinkageMapELF.py
+++ b/pym/portage/util/_dyn_libs/LinkageMapELF.py
@@ -26,6 +26,25 @@ class LinkageMapELF(object):
_soname_map_class = slot_dict_class(
("consumers", "providers"), prefix="")
+ class _obj_properies_class(object):
+
+ __slots__ = ("arch", "needed", "runpaths", "soname", "alt_paths",)
+
+ def __init__(self, arch, needed, runpaths, soname, alt_paths):
+ self.arch = arch
+ self.needed = needed
+ self.runpaths = runpaths
+ self.soname = soname
+ self.alt_paths = alt_paths
+
+ def __iter__(self):
+ """Backward compatibility with 5-tuples."""
+ yield self.arch
+ yield self.needed
+ yield self.runpaths
+ yield self.soname
+ yield self.alt_paths
+
def __init__(self, vardbapi):
self._dbapi = vardbapi
self._root = self._dbapi.settings['ROOT']
@@ -295,10 +314,11 @@ class LinkageMapELF(object):
myprops = obj_properties.get(obj_key)
if myprops is None:
indexed = False
- myprops = (arch, needed, path, soname, [])
+ myprops = self._obj_properies_class(
+ arch, needed, path, soname, [])
obj_properties[obj_key] = myprops
# All object paths are added into the obj_properties tuple.
- myprops[4].append(obj)
+ myprops.alt_paths.append(obj)
# Don't index the same file more that once since only one
# set of data can be correct and therefore mixing data
@@ -430,7 +450,7 @@ class LinkageMapELF(object):
writemsg_level(
_("Found provider outside of findProviders:") + \
(" %s -> %s %s\n" % (os.path.join(directory, soname),
- self._obj_properties[cachedKey][4], libraries)),
+ self._obj_properties[cachedKey].alt_paths, libraries)),
level=logging.DEBUG,
noiselevel=-1)
# A valid library has been found, so there is no need to
@@ -516,7 +536,7 @@ class LinkageMapELF(object):
if obj_key not in self._obj_properties:
raise KeyError("%s (%s) not in object list" % (obj_key, obj))
basename = os.path.basename(obj)
- soname = self._obj_properties[obj_key][3]
+ soname = self._obj_properties[obj_key].soname
return len(basename) < len(soname) and \
basename.endswith(".so") and \
soname.startswith(basename[:-3])
@@ -537,7 +557,7 @@ class LinkageMapELF(object):
for arch_map in self._libs.values():
for soname_map in arch_map.values():
for obj_key in soname_map.providers:
- rValue.extend(self._obj_properties[obj_key][4])
+ rValue.extend(self._obj_properties[obj_key].alt_paths)
return rValue
def getSoname(self, obj):
@@ -556,10 +576,10 @@ class LinkageMapELF(object):
obj_key = obj
if obj_key not in self._obj_properties:
raise KeyError("%s not in object list" % obj_key)
- return self._obj_properties[obj_key][3]
+ return self._obj_properties[obj_key].soname
if obj not in self._obj_key_cache:
raise KeyError("%s not in object list" % obj)
- return self._obj_properties[self._obj_key_cache[obj]][3]
+ return self._obj_properties[self._obj_key_cache[obj]].soname
def findProviders(self, obj):
"""
@@ -608,7 +628,7 @@ class LinkageMapELF(object):
# For each potential provider of the soname, add it to rValue if it
# resides in the obj's runpath.
for provider_key in self._libs[arch][soname].providers:
- providers = self._obj_properties[provider_key][4]
+ providers = self._obj_properties[provider_key].alt_paths
for provider in providers:
if self._path_key(os.path.dirname(provider)) in path_keys:
rValue[soname].add(provider)
@@ -667,7 +687,7 @@ class LinkageMapELF(object):
obj_key = obj
if obj_key not in self._obj_properties:
raise KeyError("%s not in object list" % obj_key)
- objs = self._obj_properties[obj_key][4]
+ objs = self._obj_properties[obj_key].alt_paths
else:
objs = set([obj])
obj_key = self._obj_key(obj)
@@ -679,7 +699,7 @@ class LinkageMapELF(object):
# other version, this lib will be shadowed and won't
# have any consumers.
if not isinstance(obj, self._ObjectKey):
- soname = self._obj_properties[obj_key][3]
+ soname = self._obj_properties[obj_key].soname
soname_link = os.path.join(self._root,
os.path.dirname(obj).lstrip(os.path.sep), soname)
obj_path = os.path.join(self._root, obj.lstrip(os.sep))
@@ -706,7 +726,7 @@ class LinkageMapELF(object):
if exclude_providers is not None:
relevant_dir_keys = set()
for provider_key in soname_node.providers:
- provider_objs = self._obj_properties[provider_key][4]
+ provider_objs = self._obj_properties[provider_key].alt_paths
for p in provider_objs:
provider_excluded = False
for excluded_provider_isowner in exclude_providers:
next reply other threads:[~2011-07-22 20:38 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-22 20:38 Zac Medico [this message]
-- strict thread matches above, loose matches on Subject: below --
2018-05-25 16:12 [gentoo-commits] proj/portage:master commit in: pym/portage/util/_dyn_libs/ Zac Medico
2018-01-02 23:04 Zac Medico
2016-12-27 21:43 Zac Medico
2016-06-06 16:03 Zac Medico
2015-06-02 3:48 Zac Medico
2015-04-24 17:53 Zac Medico
2013-03-18 23:43 Zac Medico
2013-03-18 23:35 Zac Medico
2013-02-22 18:52 Arfrever Frehtes Taifersar Arahesis
2012-03-22 15:24 Zac Medico
2012-03-21 21:24 Zac Medico
2012-03-05 7:32 Zac Medico
2012-02-18 3:11 Zac Medico
2012-02-18 2:06 Zac Medico
2012-02-01 2:04 Zac Medico
2011-07-24 2:58 Zac Medico
2011-07-24 2:58 Zac Medico
2011-07-24 2:15 Zac Medico
2011-07-23 6:23 Zac Medico
2011-07-22 8:03 Zac Medico
2011-07-20 8:05 Zac Medico
2011-07-20 4:51 Zac Medico
2011-07-01 4:02 Zac Medico
2011-07-01 4:02 Zac Medico
2011-07-01 1:37 Zac Medico
2011-06-30 10:17 Zac Medico
2011-06-30 10:01 Zac Medico
2011-05-08 21:31 Zac Medico
2011-05-08 7:10 Zac Medico
2011-05-08 5:02 Zac Medico
2011-05-07 17:25 Zac Medico
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53bce8a6d96f04acc97871712c107387d14f45e6.zmedico@gentoo \
--to=zmedico@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox