Gentoo Archives: gentoo-commits

From: Slava Bacherikov <slava@××××××××××××××.ua>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/libs/
Date: Tue, 05 Jun 2012 21:46:15
Message-Id: 1338932757.d986533d1aee9e79a33da4aeac2508fc946e69e0.bacher09@gentoo
1 commit: d986533d1aee9e79a33da4aeac2508fc946e69e0
2 Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
3 AuthorDate: Tue Jun 5 21:45:57 2012 +0000
4 Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
5 CommitDate: Tue Jun 5 21:45:57 2012 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=d986533d
7
8 Changes in layer over portage
9
10 ---
11 gpackages/libs/porttree.py | 62 ++++++++++++++++++++++++++++++++++++++++---
12 gpackages/libs/use_info.py | 2 +
13 2 files changed, 59 insertions(+), 5 deletions(-)
14
15 diff --git a/gpackages/libs/porttree.py b/gpackages/libs/porttree.py
16 index fe2c9cf..5a4da3a 100644
17 --- a/gpackages/libs/porttree.py
18 +++ b/gpackages/libs/porttree.py
19 @@ -7,6 +7,7 @@ from portage.exception import PortageException, FileNotFound, InvalidAtom, \
20 from gentoolkit.package import Package as PackageInfo
21 from gentoolkit.metadata import MetaData
22 from generic import ToStrMixin, file_sha1, file_mtime, cached_property
23 +from use_info import get_uses_info, get_local_uses_info
24 import os
25
26 BINDB = portage.db[portage.root]["bintree"].dbapi
27 @@ -33,6 +34,13 @@ def _ebuild_environment(name):
28 return lambda self: self.package_object.environment(name)
29
30
31 +def _get_info_by_func(func, path1, path2):
32 + path = os.path.join(path1, path2)
33 + try:
34 + return func(path)
35 + except IOError:
36 + return None
37 +
38 class Use(ToStrMixin):
39 "Represend Use flag as object"
40 __slots__ = ('name',)
41 @@ -89,27 +97,59 @@ class Keyword(ToStrMixin):
42 "Return arch name"
43 return self.name
44
45 +def _gen_all_use(func, iterator):
46 + use_g = iterator
47 + use_all_dict = next(use_g)
48 + for use_dict in use_g:
49 + if use_dict is not None:
50 + func(use_all_dict, use_dict)
51 + return use_all_dict
52
53 class Portage(object):
54
55 def iter_trees(self):
56 - for tree in PORTDB.porttrees:
57 - yield PortTree(tree)
58 + tree_dict = PORTDB.repositories.treemap
59 + for tree_name in PORTDB.repositories.prepos_order:
60 + yield PortTree(tree_dict[tree_name], tree_name)
61 +
62 + def iter_packages():
63 + for tree in self.iter_trees():
64 + for package in tree.iter_package():
65 + yield package
66
67 def iter_ebuilds():
68 for tree in self.iter_trees():
69 for ebuild in tree.iter_ebuilds():
70 yield ebuild
71
72 + def iter_use_desc(self):
73 + for tree in self.iter_trees():
74 + yield tree.use_desc
75 +
76 + def iter_use_local_desc(self):
77 + for tree in self.iter_trees():
78 + yield tree.use_local_desc
79 +
80 + def get_all_use_desc(self):
81 + return _gen_all_use(lambda x,y: x.update(y), self.iter_use_desc())
82 +
83 + def get_all_use_local_desc(self):
84 + def action(all_dict, use_dict):
85 + for key, value in use_dict.iteritems():
86 + all_dict[key].update(value)
87 +
88 + return _gen_all_use(action, self.iter_use_local_desc())
89 +
90
91 class PortTree(ToStrMixin):
92 "Represent portage tree as object"
93
94 - def __init__(self, porttree = '/usr/portage'):
95 + def __init__(self, tree_path = '/usr/portage', name = 'main'):
96 """Args:
97 - porttree -- full path to portage tree as str
98 + tree_path -- full path to portage tree as str
99 """
100 - self.porttree = porttree # TODO: it should be read-only
101 + self.porttree = tree_path
102 + self.name = name
103
104 def iter_categories(self):
105 for category in sorted(PORTDB.settings.categories):
106 @@ -134,6 +174,18 @@ class PortTree(ToStrMixin):
107 "Full path to portage tree"
108 return self.porttree
109
110 + @cached_property
111 + def use_desc(self):
112 + return _get_info_by_func(get_uses_info,
113 + self.porttree_path,
114 + 'profiles/use.desc')
115 +
116 + @cached_property
117 + def use_local_desc(self):
118 + return _get_info_by_func(get_local_uses_info,
119 + self.porttree_path,
120 + 'profiles/use.local.desc')
121 +
122
123 class Category(ToStrMixin):
124 "Represent category of portage tree as object"
125
126 diff --git a/gpackages/libs/use_info.py b/gpackages/libs/use_info.py
127 index b45cda7..c89dfe6 100644
128 --- a/gpackages/libs/use_info.py
129 +++ b/gpackages/libs/use_info.py
130 @@ -1,6 +1,8 @@
131 import re
132 from collections import defaultdict
133
134 +__all__ = ('get_uses_info', 'get_local_uses_info')
135 +
136 USES_RE = r'(?P<use>[^#].*) - (?P<description>.*)'
137 USES_DESC_RE = r'^%s$' % USES_RE
138 USES_LOCAL_DESC_RE = r'^(?P<package>[^#].*):%s$' % USES_RE