1 |
commit: 5d0ad77204be2449586c1829db33203ffab72f0a |
2 |
Author: Michał Górny <mgorny <AT> gentoo <DOT> org> |
3 |
AuthorDate: Thu Jul 28 15:06:25 2011 +0000 |
4 |
Commit: Michał Górny <mgorny <AT> gentoo <DOT> org> |
5 |
CommitDate: Thu Jul 28 15:06:25 2011 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=5d0ad772 |
7 |
|
8 |
Portage: support REQUIRED_USE. |
9 |
|
10 |
--- |
11 |
gentoopm/portagepm/depend.py | 47 ++++++++++++++++++++--------------------- |
12 |
gentoopm/portagepm/pkg.py | 8 +++--- |
13 |
2 files changed, 27 insertions(+), 28 deletions(-) |
14 |
|
15 |
diff --git a/gentoopm/portagepm/depend.py b/gentoopm/portagepm/depend.py |
16 |
index f33fd5c..232a84b 100644 |
17 |
--- a/gentoopm/portagepm/depend.py |
18 |
+++ b/gentoopm/portagepm/depend.py |
19 |
@@ -3,31 +3,31 @@ |
20 |
# (c) 2011 Michał Górny <mgorny@g.o> |
21 |
# Released under the terms of the 2-clause BSD license. |
22 |
|
23 |
+from collections import namedtuple |
24 |
from portage.dep import paren_reduce, use_reduce |
25 |
|
26 |
from gentoopm.basepm.depend import PMPackageDepSet, PMConditionalDep, \ |
27 |
PMAnyOfDep, PMAllOfDep, PMExactlyOneOfDep, PMBaseDep |
28 |
-from gentoopm.portagepm.atom import PortageAtom |
29 |
|
30 |
class PortageBaseDep(PMBaseDep): |
31 |
- def __init__(self, deps, puse): |
32 |
+ def __init__(self, deps, args): |
33 |
self._deps = deps |
34 |
- self._puse = puse |
35 |
+ self._args = args |
36 |
|
37 |
def __iter__(self): |
38 |
it = iter(self._deps) |
39 |
for d in it: |
40 |
if d == '||': |
41 |
- yield PortageAnyOfDep(next(it), self._puse) |
42 |
+ yield PortageAnyOfDep(next(it), self._args) |
43 |
elif d == '&&': |
44 |
- yield PortageAllOfDep(next(it), self._puse) |
45 |
+ yield PortageAllOfDep(next(it), self._args) |
46 |
elif d == '__xor__?': |
47 |
- yield PortageExactlyOneOfDep(next(it), self._puse) |
48 |
+ yield PortageExactlyOneOfDep(next(it), self._args) |
49 |
elif d.endswith('?'): |
50 |
yield PortageConditionalUseDep(next(it), |
51 |
- self._puse, d.rstrip('?')) |
52 |
+ self._args, d.rstrip('?')) |
53 |
else: |
54 |
- yield PortageAtom(d) |
55 |
+ yield self._args.cls(d) |
56 |
|
57 |
class PortageAnyOfDep(PMAnyOfDep, PortageBaseDep): |
58 |
pass |
59 |
@@ -39,22 +39,23 @@ class PortageExactlyOneOfDep(PMExactlyOneOfDep, PortageBaseDep): |
60 |
pass |
61 |
|
62 |
class PortageConditionalUseDep(PMConditionalDep, PortageBaseDep): |
63 |
- def __init__(self, deps, puse, flag): |
64 |
- PortageBaseDep.__init__(self, deps, puse) |
65 |
+ def __init__(self, deps, args, flag): |
66 |
+ PortageBaseDep.__init__(self, deps, args) |
67 |
self._flag = flag |
68 |
|
69 |
@property |
70 |
def enabled(self): |
71 |
- return self._flag in self._puse |
72 |
+ return self._flag in self._args.puse |
73 |
+ |
74 |
+_argtuple = namedtuple('PortageDepArgTuple', ('puse', 'cls')) |
75 |
|
76 |
class PortagePackageDepSet(PMPackageDepSet, PortageBaseDep): |
77 |
- def __init__(self, s, puse): |
78 |
+ def __init__(self, s, *args): |
79 |
self._use_reducable = not '^^' in s |
80 |
- if not self._use_reducable: |
81 |
- # ARGV, paren_reduce() doesn't handle ^^ |
82 |
- # so we hack it to a __xor__?, UGLY! |
83 |
- self._depstr = s.replace('^^', '__xor__?') |
84 |
- PortageBaseDep.__init__(self, None, puse) |
85 |
+ # ARGV, paren_reduce() doesn't handle ^^ |
86 |
+ # so we hack it to a __xor__?, UGLY! |
87 |
+ self._depstr = s.replace('^^', '__xor__?') |
88 |
+ PortageBaseDep.__init__(self, None, _argtuple(*args)) |
89 |
|
90 |
def __iter__(self): |
91 |
if self._deps is None: |
92 |
@@ -65,13 +66,11 @@ class PortagePackageDepSet(PMPackageDepSet, PortageBaseDep): |
93 |
def without_conditionals(self): |
94 |
if self._use_reducable: |
95 |
return PortageUncondAllOfDep( |
96 |
- use_reduce(self._depstr, self._puse)) |
97 |
+ use_reduce(self._depstr, self._args.puse), |
98 |
+ self._args) |
99 |
return PMPackageDepSet.without_conditionals.fget(self) |
100 |
|
101 |
class PortageUncondDep(PortageBaseDep): |
102 |
- def __init__(self, deps): |
103 |
- self._deps = deps |
104 |
- |
105 |
@property |
106 |
def without_conditionals(self): |
107 |
return self |
108 |
@@ -80,11 +79,11 @@ class PortageUncondDep(PortageBaseDep): |
109 |
it = iter(self._deps) |
110 |
for d in it: |
111 |
if d == '||': |
112 |
- yield PortageUncondAnyOfDep(next(it)) |
113 |
+ yield PortageUncondAnyOfDep(next(it), self._args) |
114 |
elif d == '&&': |
115 |
- yield PortageUncondAllOfDep(next(it)) |
116 |
+ yield PortageUncondAllOfDep(next(it), self._args) |
117 |
else: |
118 |
- yield PortageAtom(d) |
119 |
+ yield self._args.cls(d) |
120 |
|
121 |
class PortageUncondAnyOfDep(PMAnyOfDep, PortageUncondDep): |
122 |
pass |
123 |
|
124 |
diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py |
125 |
index 221e728..5af125a 100644 |
126 |
--- a/gentoopm/portagepm/pkg.py |
127 |
+++ b/gentoopm/portagepm/pkg.py |
128 |
@@ -171,22 +171,22 @@ class PortageDBCPV(PMPackage, CompletePortageAtom): |
129 |
@property |
130 |
def build_dependencies(self): |
131 |
return PortagePackageDepSet(self._aux_get('DEPEND'), |
132 |
- self._applied_use) |
133 |
+ self._applied_use, PortageAtom) |
134 |
|
135 |
@property |
136 |
def run_dependencies(self): |
137 |
return PortagePackageDepSet(self._aux_get('RDEPEND'), |
138 |
- self._applied_use) |
139 |
+ self._applied_use, PortageAtom) |
140 |
|
141 |
@property |
142 |
def post_dependencies(self): |
143 |
return PortagePackageDepSet(self._aux_get('PDEPEND'), |
144 |
- self._applied_use) |
145 |
+ self._applied_use, PortageAtom) |
146 |
|
147 |
@property |
148 |
def required_use(self): |
149 |
return PortagePackageDepSet(self._aux_get('REQUIRED_USE'), |
150 |
- self._applied_use) |
151 |
+ self._applied_use, str) # XXX |
152 |
|
153 |
def __str__(self): |
154 |
return '=%s' % self._cpv |