Gentoo Archives: gentoo-commits

From: "Michał Górny" <mgorny@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/gentoopm:master commit in: gentoopm/portagepm/, gentoopm/pkgcorepm/, gentoopm/paludispm/, gentoopm/basepm/
Date: Thu, 28 Jul 2011 19:54:56
Message-Id: 448e5a4f8a9bd934048145b094c4faee3bb7769a.mgorny@gentoo
1 commit: 448e5a4f8a9bd934048145b094c4faee3bb7769a
2 Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
3 AuthorDate: Thu Jul 28 19:39:31 2011 +0000
4 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
5 CommitDate: Thu Jul 28 19:39:31 2011 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=448e5a4f
7
8 Introduce PMRequiredUseAtom type.
9
10 ---
11 gentoopm/basepm/depend.py | 44 +++++++++++++++++++++++++++++++++++++++++-
12 gentoopm/basepm/pkg.py | 9 ++++++++
13 gentoopm/paludispm/depend.py | 6 +++-
14 gentoopm/paludispm/pkg.py | 4 ++-
15 gentoopm/pkgcorepm/depend.py | 4 +-
16 gentoopm/portagepm/pkg.py | 3 +-
17 6 files changed, 63 insertions(+), 7 deletions(-)
18
19 diff --git a/gentoopm/basepm/depend.py b/gentoopm/basepm/depend.py
20 index 923cdbf..307d32d 100644
21 --- a/gentoopm/basepm/depend.py
22 +++ b/gentoopm/basepm/depend.py
23 @@ -5,7 +5,49 @@
24
25 from abc import abstractmethod, abstractproperty
26
27 -from gentoopm.util import ABCObject
28 +from gentoopm.util import ABCObject, StringCompat
29 +
30 +class PMRequiredUseAtom(StringCompat):
31 + """
32 + An atom for C{REQUIRED_USE} specification.
33 + """
34 +
35 + def __init__(self, s):
36 + self._blocks = s.startswith('!')
37 + if self._blocks:
38 + s = s[1:]
39 + self._flag = s
40 +
41 + @property
42 + def name(self):
43 + """
44 + Relevant USE flag name.
45 +
46 + @type: string
47 + """
48 + return self._flag
49 +
50 + @property
51 + def blocking(self):
52 + """
53 + Whether the atom blocks the USE flag (requires it not to be set).
54 +
55 + @type: bool
56 + """
57 + return self._blocks
58 +
59 + @property
60 + def requiring(self):
61 + """
62 + Whether the atom requires the USE flag to be set.
63 +
64 + @type: bool
65 + """
66 + return not self._blocks
67 +
68 + def __str__(self):
69 + return '%s%s' % ('!' if self._blocks else '',
70 + self.name)
71
72 class PMBaseDep(ABCObject):
73 """
74
75 diff --git a/gentoopm/basepm/pkg.py b/gentoopm/basepm/pkg.py
76 index 33a4435..397ff7f 100644
77 --- a/gentoopm/basepm/pkg.py
78 +++ b/gentoopm/basepm/pkg.py
79 @@ -318,6 +318,15 @@ class PMPackage(PMAtom, FillMissingComparisons):
80 pass
81
82 @abstractproperty
83 + def required_use(self):
84 + """
85 + Get the C{REQUIRED_USE} specification.
86 +
87 + @type: L{PMPackageDepSet}
88 + """
89 + pass
90 +
91 + @abstractproperty
92 def slotted(self):
93 """
94 Return an atom matching all packages in the same slot as the associated
95
96 diff --git a/gentoopm/paludispm/depend.py b/gentoopm/paludispm/depend.py
97 index 9084f3d..c16b3d0 100644
98 --- a/gentoopm/paludispm/depend.py
99 +++ b/gentoopm/paludispm/depend.py
100 @@ -20,8 +20,10 @@ class PaludisBaseDep(PMBaseDep):
101 def __iter__(self):
102 for d in self._deps:
103 if isinstance(d, paludis.PackageDepSpec):
104 + assert(self._args.cls is None)
105 yield PaludisAtom(d, self._args.env)
106 elif isinstance(d, paludis.BlockDepSpec):
107 + assert(self._args.cls is None)
108 yield PaludisAtom(d.blocking, self._args.env,
109 block = _block_re.match(d.text).group(0))
110 elif isinstance(d, paludis.AnyDepSpec):
111 @@ -33,8 +35,8 @@ class PaludisBaseDep(PMBaseDep):
112 elif isinstance(d, paludis.ConditionalDepSpec):
113 yield PaludisConditionalDep(d, self._args)
114 elif isinstance(d, paludis.PlainTextDepSpec):
115 - # XXX: this is in REQUIRED_USE as well
116 - yield str(d)
117 + assert(self._args.cls is not None)
118 + yield self._args.cls(str(d))
119 else:
120 raise NotImplementedError('Unable to parse %s' % repr(d))
121
122
123 diff --git a/gentoopm/paludispm/pkg.py b/gentoopm/paludispm/pkg.py
124 index c29c0d7..151cd92 100644
125 --- a/gentoopm/paludispm/pkg.py
126 +++ b/gentoopm/paludispm/pkg.py
127 @@ -5,6 +5,7 @@
128
129 import paludis
130
131 +from gentoopm.basepm.depend import PMRequiredUseAtom
132 from gentoopm.basepm.metadata import PMPackageMetadata
133 from gentoopm.basepm.pkg import PMPackage, PMPackageDescription, \
134 PMInstallablePackage, PMInstalledPackage, PMBoundPackageKey, \
135 @@ -141,7 +142,8 @@ class PaludisID(PMPackage, PaludisAtom):
136 k = self._pkg.find_metadata('REQUIRED_USE')
137 if k is None:
138 return None
139 - return PaludisPackageDepSet(k.parse_value(), self)
140 + return PaludisPackageDepSet(k.parse_value(), self,
141 + PMRequiredUseAtom)
142
143 @property
144 def use(self):
145
146 diff --git a/gentoopm/pkgcorepm/depend.py b/gentoopm/pkgcorepm/depend.py
147 index fd3dcce..3f25576 100644
148 --- a/gentoopm/pkgcorepm/depend.py
149 +++ b/gentoopm/pkgcorepm/depend.py
150 @@ -10,7 +10,7 @@ from pkgcore.restrictions.packages import Conditional
151 from pkgcore.restrictions.values import ContainmentMatch
152
153 from gentoopm.basepm.depend import PMPackageDepSet, PMConditionalDep, \
154 - PMAnyOfDep, PMAllOfDep, PMExactlyOneOfDep, PMBaseDep
155 + PMAnyOfDep, PMAllOfDep, PMExactlyOneOfDep, PMBaseDep, PMRequiredUseAtom
156 from gentoopm.pkgcorepm.atom import PkgCoreAtom
157
158 class PkgCoreBaseDep(PMBaseDep):
159 @@ -24,7 +24,7 @@ class PkgCoreBaseDep(PMBaseDep):
160 yield PkgCoreAtom(d)
161 elif isinstance(d, ContainmentMatch): # REQUIRED_USE
162 assert(len(d.vals) == 1)
163 - yield next(iter(d.vals))
164 + yield PMRequiredUseAtom(next(iter(d.vals)))
165 elif isinstance(d, OrRestriction):
166 yield PkgCoreAnyOfDep(d, self._pkg)
167 elif isinstance(d, AndRestriction):
168
169 diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
170 index 5af125a..9653262 100644
171 --- a/gentoopm/portagepm/pkg.py
172 +++ b/gentoopm/portagepm/pkg.py
173 @@ -5,6 +5,7 @@
174
175 from portage.versions import cpv_getkey, cpv_getversion, vercmp
176
177 +from gentoopm.basepm.depend import PMRequiredUseAtom
178 from gentoopm.basepm.metadata import PMPackageMetadata
179 from gentoopm.basepm.pkg import PMPackage, PMPackageDescription, \
180 PMInstalledPackage, PMInstallablePackage, PMBoundPackageKey, \
181 @@ -186,7 +187,7 @@ class PortageDBCPV(PMPackage, CompletePortageAtom):
182 @property
183 def required_use(self):
184 return PortagePackageDepSet(self._aux_get('REQUIRED_USE'),
185 - self._applied_use, str) # XXX
186 + self._applied_use, PMRequiredUseAtom)
187
188 def __str__(self):
189 return '=%s' % self._cpv