1 |
commit: b178ac66b1bb8bba1cf5037076ca401784a19be5 |
2 |
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org> |
3 |
AuthorDate: Wed Jun 20 17:28:48 2012 +0000 |
4 |
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua> |
5 |
CommitDate: Wed Jun 20 17:28:48 2012 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=b178ac66 |
7 |
|
8 |
Add basic pkgcore layer |
9 |
|
10 |
--- |
11 |
gpackages/libs/pkgcore_porttree.py | 147 ++++++++++++++++++++++++++++++++++++ |
12 |
gpackages/libs/porttree.py | 4 +- |
13 |
2 files changed, 149 insertions(+), 2 deletions(-) |
14 |
|
15 |
diff --git a/gpackages/libs/pkgcore_porttree.py b/gpackages/libs/pkgcore_porttree.py |
16 |
new file mode 100644 |
17 |
index 0000000..ac15e2f |
18 |
--- /dev/null |
19 |
+++ b/gpackages/libs/pkgcore_porttree.py |
20 |
@@ -0,0 +1,147 @@ |
21 |
+from pkgcore.config import load_config |
22 |
+from pkgcore.ebuild.repository import UnconfiguredTree, SlavedTree |
23 |
+from pkgcore.util.repo_utils import get_raw_repos, get_virtual_repos |
24 |
+from pkgcore.ebuild.atom import atom |
25 |
+ |
26 |
+from generic import ToStrMixin |
27 |
+ |
28 |
+from porttree import AutoGeneratorMixin |
29 |
+ |
30 |
+import os.path |
31 |
+ |
32 |
+ |
33 |
+class Portage(AutoGeneratorMixin): |
34 |
+ |
35 |
+ generator_names = ('iter_categories', 'iter_packages', 'iter_ebuilds') |
36 |
+ main_iterator = 'iter_trees' |
37 |
+ |
38 |
+ def __init__(self): |
39 |
+ self._config = load_config() |
40 |
+ self._domains = self._config.domain |
41 |
+ self._set_default_domain('livefs domain') |
42 |
+ self._get_repos() |
43 |
+ |
44 |
+ def _set_default_domain(self, domain_name): |
45 |
+ domain = None |
46 |
+ try: |
47 |
+ domain = self._domains[domain_name] |
48 |
+ except KeyError: |
49 |
+ raise ValueError("Bad domain name - '%s'" % domain_name) |
50 |
+ finally: |
51 |
+ self._domain = domain |
52 |
+ |
53 |
+ def _get_repos(self): |
54 |
+ repo_dict = {} |
55 |
+ repo_list = [] |
56 |
+ repos = get_virtual_repos(get_raw_repos(self._domain.repos), False) |
57 |
+ for repo in repos: |
58 |
+ if isinstance(repo, UnconfiguredTree) or isinstance(repo, SlavedTree): |
59 |
+ repo_dict[repo.repo_id] = repo |
60 |
+ repo_list.append(repo) |
61 |
+ repo_list.reverse() |
62 |
+ self.repo_list = repo_list |
63 |
+ self.repo_dict = repo_dict |
64 |
+ |
65 |
+ def iter_trees(self): |
66 |
+ for tree in self.repo_list: |
67 |
+ yield PortTree(tree) |
68 |
+ |
69 |
+ def get_tree_by_name(self, tree_name): |
70 |
+ if tree_name in self.repo_dict: |
71 |
+ return PortTree(self.tree_dict[tree_name]) |
72 |
+ else: |
73 |
+ raise ValueError |
74 |
+ |
75 |
+class PortTree(ToStrMixin, AutoGeneratorMixin): |
76 |
+ |
77 |
+ generator_names = ('iter_packages', 'iter_ebuilds') |
78 |
+ main_iterator = 'iter_categories' |
79 |
+ |
80 |
+ def __init__(self, repo_obj): |
81 |
+ self._repo_obj = repo_obj |
82 |
+ self.name = repo_obj.repo_id |
83 |
+ self.categories = sorted(repo_obj.categories) |
84 |
+ |
85 |
+ def iter_categories(self): |
86 |
+ for category in self.categories: |
87 |
+ yield Category(category, self) |
88 |
+ |
89 |
+ @property |
90 |
+ def porttree_path(self): |
91 |
+ "Full path to portage tree" |
92 |
+ return self._repo_obj.location |
93 |
+ |
94 |
+ def __unicode__(self): |
95 |
+ return self.name |
96 |
+ |
97 |
+ @property |
98 |
+ def _packages(self): |
99 |
+ return self._repo_obj.packages |
100 |
+ |
101 |
+ def _itermatch(self, res): |
102 |
+ return self._repo_obj.itermatch(res) |
103 |
+ |
104 |
+ @property |
105 |
+ def _versions(self): |
106 |
+ return self._repo_obj.versions |
107 |
+ |
108 |
+class Category(ToStrMixin, AutoGeneratorMixin): |
109 |
+ |
110 |
+ generator_names = ('iter_ebuilds', ) |
111 |
+ main_iterator = 'iter_packages' |
112 |
+ |
113 |
+ def __init__(self, category_name, repo_obj): |
114 |
+ self._repo_obj = repo_obj |
115 |
+ self.name = category_name |
116 |
+ |
117 |
+ def iter_packages(self): |
118 |
+ for package_name in self._get_packages_names(): |
119 |
+ yield Package(package_name, self) |
120 |
+ |
121 |
+ @property |
122 |
+ def category_path(self): |
123 |
+ "Full path to category" |
124 |
+ return os.path.join(self.porttree_path, self.category) |
125 |
+ |
126 |
+ def _get_packages_names(self): |
127 |
+ return self._repo_obj._packages[self.name] |
128 |
+ |
129 |
+ def _get_ebuilds_names_by_name(self, package_name): |
130 |
+ return self._repo_obj._versions[(self.name, package_name)] |
131 |
+ |
132 |
+ def __unicode__(self): |
133 |
+ return self.name |
134 |
+ |
135 |
+class Package(ToStrMixin): |
136 |
+ |
137 |
+ def __init__(self, package_name, category_obj): |
138 |
+ self.name = package_name |
139 |
+ self.category_obj = category_obj |
140 |
+ |
141 |
+ def iter_ebuilds(self): |
142 |
+ for ebuild in self.category_obj._repo_obj._itermatch(atom(self.cp)): |
143 |
+ yield Ebuild(ebuild, self) |
144 |
+ |
145 |
+ def __unicode__(self): |
146 |
+ return self.cp |
147 |
+ |
148 |
+ def _get_ebuilds_versions(self): |
149 |
+ return self.category_obj._get_ebuilds_names_by_name(self.name) |
150 |
+ |
151 |
+ @property |
152 |
+ def cp(self): |
153 |
+ return '%s/%s' % (self.category_obj.name, self.name) |
154 |
+ |
155 |
+ |
156 |
+class Ebuild(ToStrMixin): |
157 |
+ |
158 |
+ def __init__(self, ebuild, package_obj): |
159 |
+ self._ebuild = ebuild |
160 |
+ self.package_obj = package_obj |
161 |
+ |
162 |
+ def __unicode__(self): |
163 |
+ return self.cpv |
164 |
+ |
165 |
+ @property |
166 |
+ def cpv(self): |
167 |
+ return self._ebuild.cpvstr |
168 |
|
169 |
diff --git a/gpackages/libs/porttree.py b/gpackages/libs/porttree.py |
170 |
index 637e198..8adb502 100644 |
171 |
--- a/gpackages/libs/porttree.py |
172 |
+++ b/gpackages/libs/porttree.py |
173 |
@@ -342,7 +342,7 @@ class Category(ToStrMixin, AutoGeneratorMixin): |
174 |
@property |
175 |
def category_path(self): |
176 |
"Full path to category" |
177 |
- return os.path.join(self.porttree.porttree_path, self.category) |
178 |
+ return os.path.join(self.porttree_path, self.category) |
179 |
|
180 |
@property |
181 |
def metadata_path(self): |
182 |
@@ -380,7 +380,7 @@ class Package(ToStrMixin): |
183 |
yield ebuild_obj |
184 |
|
185 |
def __unicode__(self): |
186 |
- return '%s' % self.package |
187 |
+ return unicode(self.cp) |
188 |
|
189 |
@property |
190 |
def package_path(self): |