Gentoo Archives: gentoo-commits

From: Zac Medico <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: pym/portage/package/ebuild/, pym/portage/dbapi/, ...
Date: Sun, 13 May 2012 01:08:04
Message-Id: 1336871249.af50fee789e71c1fff0b405db4cf55b618b73466.zmedico@gentoo
1 commit: af50fee789e71c1fff0b405db4cf55b618b73466
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Sun May 13 01:07:29 2012 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Sun May 13 01:07:29 2012 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=af50fee7
7
8 _pkg_str: add slot and repo attributes
9
10 ---
11 pym/_emerge/Package.py | 12 ++++++----
12 pym/portage/dbapi/__init__.py | 14 +++++++++---
13 .../package/ebuild/_config/KeywordsManager.py | 21 ++++++++++---------
14 .../package/ebuild/_config/LicenseManager.py | 9 ++++---
15 pym/portage/package/ebuild/_config/UseManager.py | 12 +++++++---
16 pym/portage/package/ebuild/_config/helper.py | 4 +-
17 pym/portage/package/ebuild/config.py | 10 +++++---
18 pym/portage/package/ebuild/getmaskingstatus.py | 14 ++++++++----
19 pym/portage/versions.py | 8 +++++-
20 9 files changed, 64 insertions(+), 40 deletions(-)
21
22 diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py
23 index ec0c3f6..69739ac 100644
24 --- a/pym/_emerge/Package.py
25 +++ b/pym/_emerge/Package.py
26 @@ -10,6 +10,7 @@ from portage.const import EBUILD_PHASES
27 from portage.dep import Atom, check_required_use, use_reduce, \
28 paren_enclose, _slot_re, _slot_separator, _repo_separator, \
29 _unknown_repo
30 +from portage.versions import _pkg_str
31 from portage.eapi import eapi_has_iuse_defaults, eapi_has_required_use
32 from portage.exception import InvalidDependString
33 from portage.repository.config import _gen_valid_repo
34 @@ -50,7 +51,6 @@ class Package(Task):
35 self.metadata = _PackageMetadataWrapper(self, self._raw_metadata)
36 if not self.built:
37 self.metadata['CHOST'] = self.root_config.settings.get('CHOST', '')
38 - self.cp = portage.cpv_getkey(self.cpv)
39 slot = self.slot
40 if _slot_re.match(slot) is None:
41 self._invalid_metadata('SLOT.invalid',
42 @@ -58,6 +58,12 @@ class Package(Task):
43 # Avoid an InvalidAtom exception when creating slot_atom.
44 # This package instance will be masked due to empty SLOT.
45 slot = '0'
46 + repo = _gen_valid_repo(self.metadata.get('repository', ''))
47 + if not repo:
48 + repo = self.UNKNOWN_REPO
49 + self.metadata['repository'] = repo
50 + self.cpv = _pkg_str(self.cpv, slot=slot, repo=repo)
51 + self.cp = self.cpv.cp
52 if (self.iuse.enabled or self.iuse.disabled) and \
53 not eapi_has_iuse_defaults(self.metadata["EAPI"]):
54 if not self.installed:
55 @@ -69,10 +75,6 @@ class Package(Task):
56 self.pv_split = self.cpv_split[1:]
57 if self.inherited is None:
58 self.inherited = frozenset()
59 - repo = _gen_valid_repo(self.metadata.get('repository', ''))
60 - if not repo:
61 - repo = self.UNKNOWN_REPO
62 - self.metadata['repository'] = repo
63
64 self._validate_deps()
65 self.masks = self._masks()
66
67 diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py
68 index 96e85ce..a835d4d 100644
69 --- a/pym/portage/dbapi/__init__.py
70 +++ b/pym/portage/dbapi/__init__.py
71 @@ -1,4 +1,4 @@
72 -# Copyright 1998-2011 Gentoo Foundation
73 +# Copyright 1998-2012 Gentoo Foundation
74 # Distributed under the terms of the GNU General Public License v2
75
76 __all__ = ["dbapi"]
77 @@ -11,7 +11,7 @@ portage.proxy.lazyimport.lazyimport(globals(),
78 'portage.dep:match_from_list',
79 'portage.output:colorize',
80 'portage.util:cmp_sort_key,writemsg',
81 - 'portage.versions:catsplit,catpkgsplit,vercmp',
82 + 'portage.versions:catsplit,catpkgsplit,vercmp,_pkg_str',
83 )
84
85 from portage import os
86 @@ -155,11 +155,13 @@ class dbapi(object):
87 2) Check enabled/disabled flag states.
88 """
89
90 - aux_keys = ["IUSE", "SLOT", "USE"]
91 + aux_keys = ["IUSE", "SLOT", "USE", "repository"]
92 for cpv in cpv_iter:
93 try:
94 metadata = dict(zip(aux_keys,
95 self.aux_get(cpv, aux_keys, myrepo=atom.repo)))
96 + if not metadata["repository"]:
97 + del metadata["repository"]
98 except KeyError:
99 continue
100
101 @@ -209,7 +211,11 @@ class dbapi(object):
102
103 elif not self.settings.local_config:
104 # Check masked and forced flags for repoman.
105 - pkg = "%s:%s" % (cpv, metadata["SLOT"])
106 + if hasattr(cpv, 'slot'):
107 + pkg = cpv
108 + else:
109 + pkg = _pkg_str(cpv, slot=metadata["SLOT"],
110 + repo=metadata.get("repository"))
111 usemask = self.settings._getUseMask(pkg)
112 if usemask.intersection(atom.use.enabled):
113 return False
114
115 diff --git a/pym/portage/package/ebuild/_config/KeywordsManager.py b/pym/portage/package/ebuild/_config/KeywordsManager.py
116 index 2f9f7b3..0c613ce 100644
117 --- a/pym/portage/package/ebuild/_config/KeywordsManager.py
118 +++ b/pym/portage/package/ebuild/_config/KeywordsManager.py
119 @@ -1,4 +1,4 @@
120 -# Copyright 2010-2011 Gentoo Foundation
121 +# Copyright 2010-2012 Gentoo Foundation
122 # Distributed under the terms of the GNU General Public License v2
123
124 __all__ = (
125 @@ -11,7 +11,7 @@ from portage.dep import ExtendedAtomDict, _repo_separator, _slot_separator
126 from portage.localization import _
127 from portage.package.ebuild._config.helper import ordered_by_atom_specificity
128 from portage.util import grabdict_package, stack_lists, writemsg
129 -from portage.versions import cpv_getkey
130 +from portage.versions import cpv_getkey, _pkg_str
131
132 class KeywordsManager(object):
133 """Manager class to handle keywords processing and validation"""
134 @@ -77,10 +77,11 @@ class KeywordsManager(object):
135
136
137 def getKeywords(self, cpv, slot, keywords, repo):
138 - cp = cpv_getkey(cpv)
139 - pkg = "".join((cpv, _slot_separator, slot))
140 - if repo and repo != Package.UNKNOWN_REPO:
141 - pkg = "".join((pkg, _repo_separator, repo))
142 + if not hasattr(cpv, 'slot'):
143 + pkg = _pkg_str(cpv, slot=slot, repo=repo)
144 + else:
145 + pkg = cpv
146 + cp = pkg.cp
147 keywords = [[x for x in keywords.split() if x != "-*"]]
148 for pkeywords_dict in self._pkeywords_list:
149 cpdict = pkeywords_dict.get(cp)
150 @@ -260,18 +261,19 @@ class KeywordsManager(object):
151 """
152
153 pgroups = global_accept_keywords.split()
154 + if not hasattr(cpv, 'slot'):
155 + cpv = _pkg_str(cpv, slot=slot, repo=repo)
156 cp = cpv_getkey(cpv)
157
158 unmaskgroups = []
159 if self._p_accept_keywords:
160 - cpv_slot = "%s:%s" % (cpv, slot)
161 accept_keywords_defaults = tuple('~' + keyword for keyword in \
162 pgroups if keyword[:1] not in "~-")
163 for d in self._p_accept_keywords:
164 cpdict = d.get(cp)
165 if cpdict:
166 pkg_accept_keywords = \
167 - ordered_by_atom_specificity(cpdict, cpv_slot)
168 + ordered_by_atom_specificity(cpdict, cpv)
169 if pkg_accept_keywords:
170 for x in pkg_accept_keywords:
171 if not x:
172 @@ -280,9 +282,8 @@ class KeywordsManager(object):
173
174 pkgdict = self.pkeywordsdict.get(cp)
175 if pkgdict:
176 - cpv_slot = "%s:%s" % (cpv, slot)
177 pkg_accept_keywords = \
178 - ordered_by_atom_specificity(pkgdict, cpv_slot, repo=repo)
179 + ordered_by_atom_specificity(pkgdict, cpv)
180 if pkg_accept_keywords:
181 for x in pkg_accept_keywords:
182 unmaskgroups.extend(x)
183
184 diff --git a/pym/portage/package/ebuild/_config/LicenseManager.py b/pym/portage/package/ebuild/_config/LicenseManager.py
185 index effd55b..f76e7e2 100644
186 --- a/pym/portage/package/ebuild/_config/LicenseManager.py
187 +++ b/pym/portage/package/ebuild/_config/LicenseManager.py
188 @@ -1,4 +1,4 @@
189 -# Copyright 2010 Gentoo Foundation
190 +# Copyright 201-2012 Gentoo Foundation
191 # Distributed under the terms of the GNU General Public License v2
192
193 __all__ = (
194 @@ -10,7 +10,7 @@ from portage.dep import ExtendedAtomDict, use_reduce
195 from portage.exception import InvalidDependString
196 from portage.localization import _
197 from portage.util import grabdict, grabdict_package, writemsg
198 -from portage.versions import cpv_getkey
199 +from portage.versions import cpv_getkey, _pkg_str
200
201 from portage.package.ebuild._config.helper import ordered_by_atom_specificity
202
203 @@ -119,8 +119,9 @@ class LicenseManager(object):
204 cp = cpv_getkey(cpv)
205 cpdict = self._plicensedict.get(cp)
206 if cpdict:
207 - cpv_slot = "%s:%s" % (cpv, slot)
208 - plicence_list = ordered_by_atom_specificity(cpdict, cpv_slot, repo)
209 + if not hasattr(cpv, slot):
210 + cpv = _pkg_str(cpv, slot=slot, repo=repo)
211 + plicence_list = ordered_by_atom_specificity(cpdict, cpv)
212 if plicence_list:
213 accept_license = list(self._accept_license)
214 for x in plicence_list:
215
216 diff --git a/pym/portage/package/ebuild/_config/UseManager.py b/pym/portage/package/ebuild/_config/UseManager.py
217 index 0506af0..e1ec7f4 100644
218 --- a/pym/portage/package/ebuild/_config/UseManager.py
219 +++ b/pym/portage/package/ebuild/_config/UseManager.py
220 @@ -1,4 +1,4 @@
221 -# Copyright 2010-2011 Gentoo Foundation
222 +# Copyright 2010-2012 Gentoo Foundation
223 # Distributed under the terms of the GNU General Public License v2
224
225 __all__ = (
226 @@ -7,10 +7,10 @@ __all__ = (
227
228 from _emerge.Package import Package
229 from portage import os
230 -from portage.dep import ExtendedAtomDict, remove_slot, _get_useflag_re
231 +from portage.dep import dep_getrepo, dep_getslot, ExtendedAtomDict, remove_slot, _get_useflag_re
232 from portage.localization import _
233 from portage.util import grabfile, grabdict_package, read_corresponding_eapi_file, stack_lists, writemsg
234 -from portage.versions import cpv_getkey
235 +from portage.versions import cpv_getkey, _pkg_str
236
237 from portage.package.ebuild._config.helper import ordered_by_atom_specificity
238
239 @@ -148,9 +148,13 @@ class UseManager(object):
240 return frozenset(stack_lists(
241 self._usemask_list, incremental=True))
242
243 + slot = None
244 cp = getattr(pkg, "cp", None)
245 if cp is None:
246 - cp = cpv_getkey(remove_slot(pkg))
247 + slot = dep_getslot(pkg)
248 + repo = dep_getrepo(pkg)
249 + pkg = _pkg_str(remove_slot(pkg), slot=slot, repo=repo)
250 + cp = pkg.cp
251 usemask = []
252 if hasattr(pkg, "repo") and pkg.repo != Package.UNKNOWN_REPO:
253 repos = []
254
255 diff --git a/pym/portage/package/ebuild/_config/helper.py b/pym/portage/package/ebuild/_config/helper.py
256 index 4f46781..ee0c090 100644
257 --- a/pym/portage/package/ebuild/_config/helper.py
258 +++ b/pym/portage/package/ebuild/_config/helper.py
259 @@ -1,4 +1,4 @@
260 -# Copyright 2010-2011 Gentoo Foundation
261 +# Copyright 2010-2012 Gentoo Foundation
262 # Distributed under the terms of the GNU General Public License v2
263
264 __all__ = (
265 @@ -24,7 +24,7 @@ def ordered_by_atom_specificity(cpdict, pkg, repo=None):
266 order to achieve desired results (and thus corrupting
267 the ChangeLog like ordering of the file).
268 """
269 - if repo and repo != Package.UNKNOWN_REPO:
270 + if not hasattr(pkg, 'repo') and repo and repo != Package.UNKNOWN_REPO:
271 pkg = pkg + _repo_separator + repo
272
273 results = []
274
275 diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py
276 index 2434208..aa4a62e 100644
277 --- a/pym/portage/package/ebuild/config.py
278 +++ b/pym/portage/package/ebuild/config.py
279 @@ -43,7 +43,7 @@ from portage.util import ensure_dirs, getconfig, grabdict, \
280 grabdict_package, grabfile, grabfile_package, LazyItemsDict, \
281 normalize_path, shlex_split, stack_dictlist, stack_dicts, stack_lists, \
282 writemsg, writemsg_level
283 -from portage.versions import catpkgsplit, catsplit, cpv_getkey
284 +from portage.versions import catpkgsplit, catsplit, cpv_getkey, _pkg_str
285
286 from portage.package.ebuild._config import special_env_vars
287 from portage.package.ebuild._config.env_var_validation import validate_cmd_var
288 @@ -1239,7 +1239,7 @@ class config(object):
289 slot = pkg_configdict["SLOT"]
290 iuse = pkg_configdict["IUSE"]
291 if pkg is None:
292 - cpv_slot = "%s:%s" % (self.mycpv, slot)
293 + cpv_slot = _pkg_str(self.mycpv, slot=slot, repo=repository)
294 else:
295 cpv_slot = pkg
296 pkginternaluse = []
297 @@ -1691,11 +1691,13 @@ class config(object):
298 @return: A list of properties that have not been accepted.
299 """
300 accept_properties = self._accept_properties
301 + if not hasattr(cpv, 'slot'):
302 + cpv = _pkg_str(cpv, slot=metadata["SLOT"],
303 + repo=metadata.get("repository"))
304 cp = cpv_getkey(cpv)
305 cpdict = self._ppropertiesdict.get(cp)
306 if cpdict:
307 - cpv_slot = "%s:%s" % (cpv, metadata["SLOT"])
308 - pproperties_list = ordered_by_atom_specificity(cpdict, cpv_slot, repo=metadata.get('repository'))
309 + pproperties_list = ordered_by_atom_specificity(cpdict, cpv)
310 if pproperties_list:
311 accept_properties = list(self._accept_properties)
312 for x in pproperties_list:
313
314 diff --git a/pym/portage/package/ebuild/getmaskingstatus.py b/pym/portage/package/ebuild/getmaskingstatus.py
315 index b89fbf5..9bf605d 100644
316 --- a/pym/portage/package/ebuild/getmaskingstatus.py
317 +++ b/pym/portage/package/ebuild/getmaskingstatus.py
318 @@ -1,4 +1,4 @@
319 -# Copyright 2010-2011 Gentoo Foundation
320 +# Copyright 2010-2012 Gentoo Foundation
321 # Distributed under the terms of the GNU General Public License v2
322
323 __all__ = ['getmaskingstatus']
324 @@ -9,7 +9,7 @@ import portage
325 from portage import eapi_is_supported, _eapi_is_deprecated
326 from portage.localization import _
327 from portage.package.ebuild.config import config
328 -from portage.versions import catpkgsplit
329 +from portage.versions import catpkgsplit, _pkg_str
330
331 if sys.hexversion >= 0x3000000:
332 basestring = str
333 @@ -51,9 +51,6 @@ def _getmaskingstatus(mycpv, settings, portdb, myrepo=None):
334 metadata = pkg.metadata
335 installed = pkg.installed
336
337 - mysplit = catpkgsplit(mycpv)
338 - if not mysplit:
339 - raise ValueError(_("invalid CPV: %s") % mycpv)
340 if metadata is None:
341 db_keys = list(portdb._aux_cache_keys)
342 try:
343 @@ -68,6 +65,13 @@ def _getmaskingstatus(mycpv, settings, portdb, myrepo=None):
344 else:
345 metadata["USE"] = ""
346
347 + if not hasattr(mycpv, 'slot'):
348 + try:
349 + mycpv = _pkg_str(mycpv, slot=metadata['SLOT'],
350 + repo=metadata.get('repository'))
351 + except portage.exception.InvalidData:
352 + raise ValueError(_("invalid CPV: %s") % mycpv)
353 +
354 rValue = []
355
356 # package.mask checking
357
358 diff --git a/pym/portage/versions.py b/pym/portage/versions.py
359 index ea8d5ae..33c7159 100644
360 --- a/pym/portage/versions.py
361 +++ b/pym/portage/versions.py
362 @@ -339,10 +339,10 @@ class _pkg_str(_unicode):
363 manually convert them to a plain unicode object first.
364 """
365
366 - def __new__(cls, cpv, eapi=None):
367 + def __new__(cls, cpv, slot=None, repo=None, eapi=None):
368 return _unicode.__new__(cls, cpv)
369
370 - def __init__(self, cpv, eapi=None):
371 + def __init__(self, cpv, slot=None, repo=None, eapi=None):
372 if not isinstance(cpv, _unicode):
373 # Avoid TypeError from _unicode.__init__ with PyPy.
374 cpv = _unicode_decode(cpv)
375 @@ -353,6 +353,10 @@ class _pkg_str(_unicode):
376 self.__dict__['cp'] = self.cpv_split[0] + '/' + self.cpv_split[1]
377 # for match_from_list introspection
378 self.__dict__['cpv'] = self
379 + if slot is not None:
380 + self.__dict__['slot'] = slot
381 + if repo is not None:
382 + self.__dict__['repo'] = repo
383
384 def __setattr__(self, name, value):
385 raise AttributeError("_pkg_str instances are immutable",