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
next 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