public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
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:



             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