Gentoo Archives: gentoo-commits

From: Thomas Sachau <tommy@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:multilib commit in: pym/_emerge/resolver/, pym/_emerge/
Date: Sun, 06 Feb 2011 13:17:01
Message-Id: 6fbb1c1c70ba82a2a06531e69b9851bf01c42e12.tommy@gentoo
1 commit: 6fbb1c1c70ba82a2a06531e69b9851bf01c42e12
2 Author: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
3 AuthorDate: Sat Jan 29 09:53:36 2011 +0000
4 Commit: Thomas Sachau <tommy <AT> gentoo <DOT> org>
5 CommitDate: Sun Jan 30 09:11:58 2011 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=6fbb1c1c
7
8 Move most of the code to _emerge's Package object. Refine the hardmasking code, optimizing as much as possible.
9
10 ---
11 pym/_emerge/Package.py | 45 ++++++++++++++++++++++++++++++++++++++++
12 pym/_emerge/resolver/output.py | 25 ++-------------------
13 2 files changed, 48 insertions(+), 22 deletions(-)
14
15 diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py
16 index c80bad3..e7302b3 100644
17 --- a/pym/_emerge/Package.py
18 +++ b/pym/_emerge/Package.py
19 @@ -41,6 +41,8 @@ class Package(Task):
20
21 def __init__(self, **kwargs):
22 Task.__init__(self, **kwargs)
23 + # the SlotObject constructor assigns self.root_config from keyword args
24 + # and is an instance of a '_emerge.RootConfig.RootConfig class
25 self.root = self.root_config.root
26 self._raw_metadata = _PackageMetadataWrapperBase(self.metadata)
27 self.metadata = _PackageMetadataWrapper(self, self._raw_metadata)
28 @@ -235,6 +237,49 @@ class Package(Task):
29
30 return True
31
32 + def accepted_keyword(self):
33 + """returns the keyword used from the ebuild's KEYWORDS string"""
34 +
35 + keywords = set(self.metadata.get('KEYWORDS').split())
36 + accept_keywords = set(self.root_config.settings['ACCEPT_KEYWORDS'].split())
37 + used_keyword = list(set.intersection(keywords, accept_keywords))
38 + if used_keyword and len(used_keyword) == 1:
39 + used_keyword = used_keyword[0]
40 + elif len(used_keyword) > 1:
41 + # you can raise an error here if you prefer, remove it, or set the correct levels
42 + writemsg_level( "_emerge.output.resolver.Display(), too many keywords recieved for pkg: %s, %s"
43 + % (pkg.cpv, used_keyword))
44 + used_keyword = used_keyword[0]
45 + #print "pmaskdict", self.root_config.settings.pmaskdict
46 + return used_keyword
47 +
48 + def isHardMasked(self):
49 + """returns a bool if the cpv is in the list of
50 + expanded pmaskdict[cp] availble ebuilds"""
51 + try:
52 + # returns a list of mask atoms
53 + pmask = self.root_config.settings.pmaskdict[self.cp]
54 + except KeyError:
55 + pmask = []
56 + if pmask:
57 + # narrow pmask atoms down to the relevant repo
58 + n=[x for x in pmask if x.split('::')[-1] in [self.repo]]
59 + # hopefully it is down to only 1 mask atom
60 + #print "n =", n
61 + #count = 0
62 + hardmasked = set()
63 + for x in n:
64 + #expand the atom to matching available ebuilds
65 + m = self.root_config.trees['porttree'].dbapi.xmatch("match-all",x)
66 + #print "m =", m
67 + for n in m:
68 + hardmasked.update([n])
69 + #count += 1
70 + #print "for x in n: loop count =", count, hardmasked
71 + return self.cpv in hardmasked
72 + return False
73 +
74 +
75 def _metadata_exception(self, k, e):
76
77 # For unicode safety with python-2.x we need to avoid
78
79 diff --git a/pym/_emerge/resolver/output.py b/pym/_emerge/resolver/output.py
80 index 4b90e9d..f1af30b 100644
81 --- a/pym/_emerge/resolver/output.py
82 +++ b/pym/_emerge/resolver/output.py
83 @@ -163,39 +163,20 @@ class Display(object):
84 @param pkg: _emerge.Package instance
85 Modifies self.verboseadd
86 """
87 - accept_keywords = set(self.portdb.settings['ACCEPT_KEYWORDS'].split())
88 - keywords = set(self.portdb.aux_get(pkg.cpv, ["KEYWORDS"])[0].split())
89 - used_keyword = list(set.intersection(keywords, accept_keywords))
90 - if used_keyword and len(used_keyword) == 1:
91 - used_keyword = used_keyword[0]
92 - elif len(used_keyword) > 1:
93 - # you can raise an error here if you prefer, remove it, or set the correct levels
94 - writemsg_level( "_emerge.output.resolver.Display(), too many keywords recieved for pkg: %s, %s"
95 - % (pkg.cpv, used_keyword))
96 - try:
97 - pmask = self.portdb.settings.pmaskdict[pkg.cp]
98 - except KeyError:
99 - pmask = []
100 - hardmasked = []
101 - for x in pmask:
102 - m = self.portdb.xmatch("match-all",x)
103 - for n in m:
104 - if n not in hardmasked:
105 - hardmasked.append(n)
106 -
107 + used_keyword = pkg.accepted_keyword()
108 + hardmasked = pkg.isHardMasked()
109 text = ''
110 if '~' in used_keyword:
111 text = used_keyword
112 elif not used_keyword:
113 text = '**'
114 if text:
115 - if pkg.cpv in hardmasked:
116 + if hardmasked:
117 self.verboseadd += red('%s ' % text)
118 else:
119 self.verboseadd += yellow('%s ' % text)
120 return
121
122 -
123 def map_to_use_expand(self, myvals, forced_flags=False,
124 remove_hidden=True):
125 """Map use expand variables