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/
Date: Thu, 28 Jul 2011 16:24:40
Message-Id: 5d0ad77204be2449586c1829db33203ffab72f0a.mgorny@gentoo
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