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/
Date: Mon, 25 Jul 2011 20:02:50
Message-Id: bfdcf993f4fb3cbaf8acd4a779b0404ca96cadc7.mgorny@gentoo
1 commit: bfdcf993f4fb3cbaf8acd4a779b0404ca96cadc7
2 Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
3 AuthorDate: Mon Jul 25 19:07:30 2011 +0000
4 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
5 CommitDate: Mon Jul 25 19:07:30 2011 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoopm.git;a=commit;h=bfdcf993
7
8 pkgcore: support getting deps.
9
10 ---
11 gentoopm/pkgcorepm/depend.py | 39 +++++++++++++++++++++++++++++++++++++++
12 gentoopm/pkgcorepm/pkg.py | 16 ++++++++++++++++
13 2 files changed, 55 insertions(+), 0 deletions(-)
14
15 diff --git a/gentoopm/pkgcorepm/depend.py b/gentoopm/pkgcorepm/depend.py
16 new file mode 100644
17 index 0000000..80d697b
18 --- /dev/null
19 +++ b/gentoopm/pkgcorepm/depend.py
20 @@ -0,0 +1,39 @@
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 pkgcore.ebuild.atom import atom
27 +from pkgcore.restrictions.boolean import OrRestriction
28 +
29 +from gentoopm.basepm.depend import PMPackageDepSet, PMPackageFinalDepSet
30 +from gentoopm.pkgcorepm.atom import PkgCoreAtom
31 +
32 +class PkgCorePackageDepSet(PMPackageDepSet):
33 + def __init__(self, deps, pkg):
34 + self._deps = deps
35 + self._pkg = pkg
36 +
37 + @property
38 + def evaluated(self):
39 + return PkgCorePackageFinalDepSet(
40 + self._deps.evaluate_depset(self._pkg.use))
41 +
42 +class PkgCorePackageFinalDepSet(PMPackageFinalDepSet):
43 + def __init__(self, deps):
44 + self._deps = deps
45 +
46 + def _iter_deps(self, deps):
47 + for d in deps:
48 + if isinstance(d, atom):
49 + yield d
50 + elif isinstance(d, OrRestriction):
51 + for d in self._iter_deps((next(iter(d)),)): # XXX
52 + yield d
53 + else:
54 + raise NotImplementedError('Parsing %s not implemented' \
55 + % repr(d))
56 +
57 + def __iter__(self):
58 + for d in self._iter_deps(self._deps):
59 + yield PkgCoreAtom(d)
60
61 diff --git a/gentoopm/pkgcorepm/pkg.py b/gentoopm/pkgcorepm/pkg.py
62 index dff02ed..d50d0fe 100644
63 --- a/gentoopm/pkgcorepm/pkg.py
64 +++ b/gentoopm/pkgcorepm/pkg.py
65 @@ -10,6 +10,7 @@ from gentoopm.basepm.pkg import PMPackage, PMPackageDescription, \
66 from gentoopm.basepm.pkgset import PMPackageSet, PMFilteredPackageSet
67 from gentoopm.pkgcorepm.atom import PkgCoreAtom, PkgCorePackageKey
68 from gentoopm.pkgcorepm.contents import PkgCorePackageContents
69 +from gentoopm.pkgcorepm.depend import PkgCorePackageDepSet
70 from gentoopm.util import SpaceSepTuple
71
72 class PkgCorePackageSet(PMPackageSet):
73 @@ -85,6 +86,21 @@ class PkgCorePackage(PMPackage, PkgCoreAtom):
74 def repository(self):
75 return self._pkg.repo.repo_id
76
77 + @property
78 + def build_dependencies(self):
79 + return PkgCorePackageDepSet(self._pkg.depends,
80 + self._pkg)
81 +
82 + @property
83 + def run_dependencies(self):
84 + return PkgCorePackageDepSet(self._pkg.rdepends,
85 + self._pkg)
86 +
87 + @property
88 + def post_dependencies(self):
89 + return PkgCorePackageDepSet(self._pkg.pdepends,
90 + self._pkg)
91 +
92 def __str__(self):
93 if self._repo_index != 0:
94 s = '%s::%s' % (self._pkg.cpvstr, self._pkg.repo.repo_id)