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: Tue, 26 Jul 2011 18:03:16
Message-Id: 3760928e4d4c083bba6539f628ea37a8d3c99729.mgorny@gentoo
1 commit: 3760928e4d4c083bba6539f628ea37a8d3c99729
2 Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
3 AuthorDate: Tue Jul 26 17:19:10 2011 +0000
4 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
5 CommitDate: Tue Jul 26 17:19:10 2011 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=3760928e
7
8 Portage: support a subset of dependency parsing.
9
10 ---
11 gentoopm/portagepm/depend.py | 42 ++++++++++++++++++++++++++++++++++++++++++
12 gentoopm/portagepm/pkg.py | 13 +++++++++++++
13 2 files changed, 55 insertions(+), 0 deletions(-)
14
15 diff --git a/gentoopm/portagepm/depend.py b/gentoopm/portagepm/depend.py
16 new file mode 100644
17 index 0000000..6c06693
18 --- /dev/null
19 +++ b/gentoopm/portagepm/depend.py
20 @@ -0,0 +1,42 @@
21 +#!/usr/bin/python
22 +# vim:fileencoding=utf-8
23 +# (c) 2011 Michał Górny <mgorny@g.o>
24 +# Released under the terms of the 2-clause BSD license.
25 +
26 +from portage.dep import paren_reduce
27 +
28 +from gentoopm.basepm.depend import PMPackageDepSet, PMConditionalDep, \
29 + PMOneOfDep, PMAllOfDep, PMBaseDep
30 +from gentoopm.portagepm.atom import CompletePortageAtom
31 +
32 +class PortageBaseDep(PMBaseDep):
33 + def __init__(self, deps):
34 + self._deps = deps
35 +
36 + def __iter__(self):
37 + it = iter(self._deps)
38 + for d in it:
39 + if d == '||':
40 + yield PortageOneOfDep(next(it))
41 + elif d == '&&':
42 + yield PortageAllOfDep(next(it))
43 + elif d.endswith('?'):
44 + yield PortageConditionalUseDep(next(it))
45 + else:
46 + yield CompletePortageAtom(d)
47 +
48 +class PortageOneOfDep(PMOneOfDep, PortageBaseDep):
49 + pass
50 +
51 +class PortageAllOfDep(PMAllOfDep, PortageBaseDep):
52 + pass
53 +
54 +class PortageConditionalUseDep(PMConditionalDep, PortageBaseDep):
55 + @property
56 + def enabled(self):
57 + # XXX
58 + raise NotImplementedError()
59 +
60 +class PortagePackageDepSet(PMPackageDepSet, PortageBaseDep):
61 + def __init__(self, s):
62 + self._deps = paren_reduce(s)
63
64 diff --git a/gentoopm/portagepm/pkg.py b/gentoopm/portagepm/pkg.py
65 index d2ee87b..9922af3 100644
66 --- a/gentoopm/portagepm/pkg.py
67 +++ b/gentoopm/portagepm/pkg.py
68 @@ -13,6 +13,7 @@ from gentoopm.basepm.pkgset import PMPackageSet, PMFilteredPackageSet
69 from gentoopm.portagepm.atom import PortageAtom, CompletePortageAtom, \
70 PortagePackageKey, PortagePackageVersion, _get_atom
71 from gentoopm.portagepm.contents import PortagePackageContents
72 +from gentoopm.portagepm.depend import PortagePackageDepSet
73 from gentoopm.util import SpaceSepTuple
74
75 class PortagePackageSet(PMPackageSet):
76 @@ -118,6 +119,18 @@ class PortageDBCPV(PMPackage, CompletePortageAtom):
77 def _atom(self):
78 return _get_atom(str(self))
79
80 + @property
81 + def build_dependencies(self):
82 + return PortagePackageDepSet(self._aux_get('DEPEND'))
83 +
84 + @property
85 + def run_dependencies(self):
86 + return PortagePackageDepSet(self._aux_get('RDEPEND'))
87 +
88 + @property
89 + def post_dependencies(self):
90 + return PortagePackageDepSet(self._aux_get('PDEPEND'))
91 +
92 def __str__(self):
93 return '=%s' % self._cpv