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/pkgcorepm/, gentoopm/paludispm/
Date: Thu, 28 Jul 2011 16:24:35
Message-Id: 7b1ac7e019ac20fbff8ac8514ffb94477a84de9c.mgorny@gentoo
1 commit: 7b1ac7e019ac20fbff8ac8514ffb94477a84de9c
2 Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
3 AuthorDate: Thu Jul 28 14:47:10 2011 +0000
4 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
5 CommitDate: Thu Jul 28 14:47:10 2011 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=7b1ac7e0
7
8 Paludis/pkgcore: introduce initial support for REQUIRED_USE.
9
10 ---
11 gentoopm/paludispm/depend.py | 10 +++++++++-
12 gentoopm/paludispm/pkg.py | 7 +++++++
13 gentoopm/pkgcorepm/depend.py | 19 +++++++++++++++++--
14 gentoopm/pkgcorepm/pkg.py | 10 ++++++++++
15 4 files changed, 43 insertions(+), 3 deletions(-)
16
17 diff --git a/gentoopm/paludispm/depend.py b/gentoopm/paludispm/depend.py
18 index 976fa55..91a2e3c 100644
19 --- a/gentoopm/paludispm/depend.py
20 +++ b/gentoopm/paludispm/depend.py
21 @@ -6,7 +6,7 @@
22 import paludis
23
24 from gentoopm.basepm.depend import PMPackageDepSet, PMConditionalDep, \
25 - PMAnyOfDep, PMAllOfDep, PMBaseDep
26 + PMAnyOfDep, PMAllOfDep, PMExactlyOneOfDep, PMBaseDep
27 from gentoopm.paludispm.atom import PaludisAtom
28
29 class PaludisBaseDep(PMBaseDep):
30 @@ -22,8 +22,13 @@ class PaludisBaseDep(PMBaseDep):
31 yield PaludisAnyOfDep(d, self._pkg)
32 elif isinstance(d, paludis.AllDepSpec):
33 yield PaludisAllOfDep(d, self._pkg)
34 + elif isinstance(d, paludis.ExactlyOneDepSpec):
35 + yield PaludisExactlyOneOfDep(d, self._pkg)
36 elif isinstance(d, paludis.ConditionalDepSpec):
37 yield PaludisConditionalDep(d, self._pkg)
38 + elif isinstance(d, paludis.PlainTextDepSpec):
39 + # XXX: this is in REQUIRED_USE as well
40 + yield str(d)
41 else:
42 raise NotImplementedError('Unable to parse %s' % repr(d))
43
44 @@ -33,6 +38,9 @@ class PaludisAnyOfDep(PMAnyOfDep, PaludisBaseDep):
45 class PaludisAllOfDep(PMAllOfDep, PaludisBaseDep):
46 pass
47
48 +class PaludisExactlyOneOfDep(PMExactlyOneOfDep, PaludisBaseDep):
49 + pass
50 +
51 class PaludisConditionalDep(PMConditionalDep, PaludisBaseDep):
52 @property
53 def enabled(self):
54
55 diff --git a/gentoopm/paludispm/pkg.py b/gentoopm/paludispm/pkg.py
56 index 288bc2b..c29c0d7 100644
57 --- a/gentoopm/paludispm/pkg.py
58 +++ b/gentoopm/paludispm/pkg.py
59 @@ -137,6 +137,13 @@ class PaludisID(PMPackage, PaludisAtom):
60 self)
61
62 @property
63 + def required_use(self):
64 + k = self._pkg.find_metadata('REQUIRED_USE')
65 + if k is None:
66 + return None
67 + return PaludisPackageDepSet(k.parse_value(), self)
68 +
69 + @property
70 def use(self):
71 iuse = self._pkg.find_metadata('IUSE').parse_value()
72 return SpaceSepFrozenSet([PaludisUseFlag(x) for x in iuse])
73
74 diff --git a/gentoopm/pkgcorepm/depend.py b/gentoopm/pkgcorepm/depend.py
75 index 8ebe6cf..fd3dcce 100644
76 --- a/gentoopm/pkgcorepm/depend.py
77 +++ b/gentoopm/pkgcorepm/depend.py
78 @@ -4,11 +4,13 @@
79 # Released under the terms of the 2-clause BSD license.
80
81 from pkgcore.ebuild.atom import atom
82 -from pkgcore.restrictions.boolean import OrRestriction, AndRestriction
83 +from pkgcore.restrictions.boolean import OrRestriction, AndRestriction, \
84 + JustOneRestriction
85 from pkgcore.restrictions.packages import Conditional
86 +from pkgcore.restrictions.values import ContainmentMatch
87
88 from gentoopm.basepm.depend import PMPackageDepSet, PMConditionalDep, \
89 - PMAnyOfDep, PMAllOfDep, PMBaseDep
90 + PMAnyOfDep, PMAllOfDep, PMExactlyOneOfDep, PMBaseDep
91 from gentoopm.pkgcorepm.atom import PkgCoreAtom
92
93 class PkgCoreBaseDep(PMBaseDep):
94 @@ -20,10 +22,15 @@ class PkgCoreBaseDep(PMBaseDep):
95 for d in self._deps:
96 if isinstance(d, atom):
97 yield PkgCoreAtom(d)
98 + elif isinstance(d, ContainmentMatch): # REQUIRED_USE
99 + assert(len(d.vals) == 1)
100 + yield next(iter(d.vals))
101 elif isinstance(d, OrRestriction):
102 yield PkgCoreAnyOfDep(d, self._pkg)
103 elif isinstance(d, AndRestriction):
104 yield PkgCoreAllOfDep(d, self._pkg)
105 + elif isinstance(d, JustOneRestriction):
106 + yield PkgCoreExactlyOneOfDep(d, self._pkg)
107 elif isinstance(d, Conditional) and d.attr == 'use':
108 yield PkgCoreConditionalUseDep(d, self._pkg)
109 else:
110 @@ -36,6 +43,9 @@ class PkgCoreAnyOfDep(PMAnyOfDep, PkgCoreBaseDep):
111 class PkgCoreAllOfDep(PMAllOfDep, PkgCoreBaseDep):
112 pass
113
114 +class PkgCoreExactlyOneOfDep(PMExactlyOneOfDep, PkgCoreBaseDep):
115 + pass
116 +
117 class PkgCoreConditionalUseDep(PMConditionalDep, PkgCoreBaseDep):
118 @property
119 def enabled(self):
120 @@ -63,6 +73,8 @@ class PkgCoreUncondDep(PkgCoreBaseDep):
121 yield PkgCoreUncondAnyOfDep(d)
122 elif isinstance(d, AndRestriction):
123 yield PkgCoreUncondAllOfDep(d, self._pkg)
124 + elif isinstance(d, JustOneRestriction):
125 + yield PkgCoreUncondExactlyOneOfDep(d, self._pkg)
126 else:
127 raise NotImplementedError('Parsing %s not implemented' \
128 % repr(d))
129 @@ -72,3 +84,6 @@ class PkgCoreUncondAnyOfDep(PMAnyOfDep, PkgCoreUncondDep):
130
131 class PkgCoreUncondAllOfDep(PMAllOfDep, PkgCoreUncondDep):
132 pass
133 +
134 +class PkgCoreUncondAllOfDep(PMExactlyOneOfDep, PkgCoreUncondDep):
135 + pass
136
137 diff --git a/gentoopm/pkgcorepm/pkg.py b/gentoopm/pkgcorepm/pkg.py
138 index c21a17a..da81888 100644
139 --- a/gentoopm/pkgcorepm/pkg.py
140 +++ b/gentoopm/pkgcorepm/pkg.py
141 @@ -137,6 +137,11 @@ class PkgCoreInstallablePackage(PkgCorePackage, PMInstallablePackage):
142 return PkgCorePackageDepSet(self._pkg._raw_pkg.post_rdepends,
143 self._pkg)
144
145 + @property
146 + def required_use(self):
147 + return PkgCorePackageDepSet(self._pkg._raw_pkg.required_use,
148 + self._pkg)
149 +
150 def __lt__(self, other):
151 if not isinstance(other, PkgCorePackage):
152 raise TypeError('Unable to compare %s against %s' % \
153 @@ -170,6 +175,11 @@ class PkgCoreInstalledPackage(PkgCorePackage, PMInstalledPackage):
154 self._pkg)
155
156 @property
157 + def required_use(self):
158 + return PkgCorePackageDepSet(self._pkg.required_use,
159 + self._pkg)
160 +
161 + @property
162 def contents(self):
163 return PkgCorePackageContents(self._pkg.contents)