public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Thomas Sachau" <tommy@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/portage:multilib commit in: pym/_emerge/resolver/, pym/_emerge/
Date: Sun,  6 Feb 2011 13:09:48 +0000 (UTC)	[thread overview]
Message-ID: <6fbb1c1c70ba82a2a06531e69b9851bf01c42e12.tommy@gentoo> (raw)

commit:     6fbb1c1c70ba82a2a06531e69b9851bf01c42e12
Author:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
AuthorDate: Sat Jan 29 09:53:36 2011 +0000
Commit:     Thomas Sachau <tommy <AT> gentoo <DOT> org>
CommitDate: Sun Jan 30 09:11:58 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=6fbb1c1c

Move most of the code to _emerge's Package object. Refine the hardmasking code, optimizing as much as possible.

---
 pym/_emerge/Package.py         |   45 ++++++++++++++++++++++++++++++++++++++++
 pym/_emerge/resolver/output.py |   25 ++-------------------
 2 files changed, 48 insertions(+), 22 deletions(-)

diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py
index c80bad3..e7302b3 100644
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@ -41,6 +41,8 @@ class Package(Task):
 
 	def __init__(self, **kwargs):
 		Task.__init__(self, **kwargs)
+		# the SlotObject constructor assigns self.root_config from keyword args
+		# and is an instance of a '_emerge.RootConfig.RootConfig class
 		self.root = self.root_config.root
 		self._raw_metadata = _PackageMetadataWrapperBase(self.metadata)
 		self.metadata = _PackageMetadataWrapper(self, self._raw_metadata)
@@ -235,6 +237,49 @@ class Package(Task):
 
 		return True
 
+	def accepted_keyword(self):
+		"""returns the keyword used from the ebuild's KEYWORDS string"""
+		
+		keywords = set(self.metadata.get('KEYWORDS').split())
+		accept_keywords = set(self.root_config.settings['ACCEPT_KEYWORDS'].split())
+		used_keyword = list(set.intersection(keywords, accept_keywords))
+		if used_keyword and len(used_keyword) == 1:
+			used_keyword = used_keyword[0]
+		elif len(used_keyword) > 1:
+			# you can raise an error here if you prefer, remove it, or set the correct levels
+			writemsg_level( "_emerge.output.resolver.Display(), too many keywords recieved for pkg: %s, %s"
+					% (pkg.cpv, used_keyword))
+			used_keyword = used_keyword[0]
+		#print "pmaskdict", self.root_config.settings.pmaskdict
+		return used_keyword
+
+	def isHardMasked(self):
+		"""returns a bool if the cpv is in the list of 
+		expanded pmaskdict[cp] availble ebuilds"""
+		try:
+			# returns a list of mask atoms
+			pmask = self.root_config.settings.pmaskdict[self.cp]
+		except KeyError:
+			pmask = []
+		if pmask:
+			# narrow pmask atoms down to the relevant repo
+			n=[x for x in pmask if x.split('::')[-1] in [self.repo]]
+			# hopefully it is down to only 1 mask atom
+			#print "n =", n
+			#count = 0
+			hardmasked = set()
+			for x in n:
+				#expand the atom to matching available ebuilds
+				m = self.root_config.trees['porttree'].dbapi.xmatch("match-all",x)
+				#print "m =", m
+				for n in m:
+					hardmasked.update([n])
+				#count += 1
+			#print "for x in n: loop count =", count, hardmasked
+			return self.cpv in hardmasked
+		return False
+
+
 	def _metadata_exception(self, k, e):
 
 		# For unicode safety with python-2.x we need to avoid

diff --git a/pym/_emerge/resolver/output.py b/pym/_emerge/resolver/output.py
index 4b90e9d..f1af30b 100644
--- a/pym/_emerge/resolver/output.py
+++ b/pym/_emerge/resolver/output.py
@@ -163,39 +163,20 @@ class Display(object):
 		@param pkg: _emerge.Package instance
 		Modifies self.verboseadd
 		"""
-		accept_keywords = set(self.portdb.settings['ACCEPT_KEYWORDS'].split())
-		keywords = set(self.portdb.aux_get(pkg.cpv, ["KEYWORDS"])[0].split())
-		used_keyword = list(set.intersection(keywords, accept_keywords))
-		if used_keyword and len(used_keyword) == 1:
-			used_keyword = used_keyword[0]
-		elif len(used_keyword) > 1:
-			# you can raise an error here if you prefer, remove it, or set the correct levels
-			writemsg_level( "_emerge.output.resolver.Display(), too many keywords recieved for pkg: %s, %s"
-					% (pkg.cpv, used_keyword))
-		try:
-			pmask = self.portdb.settings.pmaskdict[pkg.cp]
-		except KeyError:
-			pmask = []
-		hardmasked = []
-		for x in pmask:
-			m = self.portdb.xmatch("match-all",x)
-			for n in m:
-				if n not in hardmasked:
-					hardmasked.append(n)
-
+		used_keyword = pkg.accepted_keyword()
+		hardmasked = pkg.isHardMasked()
 		text = ''
 		if '~' in used_keyword:
 			text = used_keyword
 		elif not used_keyword:
 			text = '**'
 		if text:
-			if pkg.cpv in hardmasked:
+			if hardmasked:
 				self.verboseadd += red('%s ' % text)
 			else:
 				self.verboseadd += yellow('%s ' % text)
 		return
 
-
 	def map_to_use_expand(self, myvals, forced_flags=False,
 		remove_hidden=True):
 		"""Map use expand variables



             reply	other threads:[~2011-02-06 13:17 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-06 13:09 Thomas Sachau [this message]
  -- strict thread matches above, loose matches on Subject: below --
2011-02-06 13:09 [gentoo-commits] proj/portage:multilib commit in: pym/_emerge/resolver/, pym/_emerge/ Thomas Sachau
2011-02-06 13:09 Thomas Sachau

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=6fbb1c1c70ba82a2a06531e69b9851bf01c42e12.tommy@gentoo \
    --to=tommy@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