Gentoo Archives: gentoo-commits

From: "Александр Берсенев" <bay@×××××××××.ru>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/autodep:master commit in: src/autodep/package_utils/
Date: Mon, 03 Oct 2011 19:44:53
Message-Id: e541c423ce50003e05b9a154a0893cafe8bd7445.bay@gentoo
1 commit: e541c423ce50003e05b9a154a0893cafe8bd7445
2 Author: Alexander Bersenev <bay <AT> hackerdom <DOT> ru>
3 AuthorDate: Mon Oct 3 15:22:30 2011 +0000
4 Commit: Александр Берсенев <bay <AT> hackerdom <DOT> ru>
5 CommitDate: Mon Oct 3 15:22:30 2011 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/autodep.git;a=commit;h=e541c423
7
8 minor refactoring, fixed an error when deps weren't calculated
9
10 ---
11 .../package_utils/portage_misc_functions.py | 82 ++++++++------------
12 1 files changed, 34 insertions(+), 48 deletions(-)
13
14 diff --git a/src/autodep/package_utils/portage_misc_functions.py b/src/autodep/package_utils/portage_misc_functions.py
15 index 29fcfec..849c9c8 100644
16 --- a/src/autodep/package_utils/portage_misc_functions.py
17 +++ b/src/autodep/package_utils/portage_misc_functions.py
18 @@ -29,7 +29,8 @@ class portage_api:
19 self.vartree=trees[portage.root]['vartree']
20 self.vardb=self.vartree.dbapi
21 self.portdb=portage.portdb
22 - self.metadata_keys = [k for k in portage.auxdbkeys if not k.startswith("UNUSED_")]
23 + self.metadata_keys = [
24 + k for k in portage.auxdbkeys if not k.startswith("UNUSED_")]
25 self.use=self.settings["USE"]
26
27 # This function is from portage and almost unchanged
28 @@ -96,15 +97,20 @@ class portage_api:
29 yield atom
30
31
32 - def get_best_visible_pkg(self,pkg):
33 + def get_best_visible_pkg(self,pkg,db="portdb"):
34 """
35 Gets best candidate on installing. Returns empty string if no found
36
37 :param pkg: package name
38 -
39 + :param db: name of db to look. Can be "vardb" or "portdb"
40 """
41 try:
42 - return self.portdb.xmatch("bestmatch-visible", pkg)
43 + if db=="portdb":
44 + return self.portdb.xmatch("bestmatch-visible", pkg)
45 + elif db=="vardb":
46 + return self.vardb.match(pkg)[0]
47 + else:
48 + return ''
49 except:
50 return ''
51
52 @@ -164,27 +170,34 @@ class portage_api:
53 return []
54
55 # non-recursive dependency getter
56 - def get_dep(self,pkg,dep_type=["RDEPEND","DEPEND"]):
57 + def get_dep(self,pkg,dep_type=["RDEPEND","DEPEND"],db="portdb"):
58 """
59 - Gets current dependencies of a package. Looks in portage db
60 + Gets current dependencies of a package. Looks in portage db by default
61
62 :param pkg: name of package
63 :param dep_type: type of dependencies to recurse. Can be ["DEPEND"] or
64 ["RDEPEND", "DEPEND"]
65 + :param db: name of db to look. Can be "vardb" or "portdb"
66 :returns: **set** of packages names
67 """
68
69 ret=set()
70
71 - pkg = self.get_best_visible_pkg(pkg)
72 + pkg = self.get_best_visible_pkg(pkg,db)
73 if not pkg:
74 return ret
75 -
76 +
77 # we found the best visible match in common tree
78 #import pdb; pdb.set_trace()
79
80 - metadata = dict(zip(self.metadata_keys,
81 - self.portdb.aux_get(pkg, self.metadata_keys)))
82 + if db=="portdb":
83 + aux_get=self.portdb.aux_get
84 + elif db=="vardb":
85 + aux_get=self.vardb.aux_get
86 + else:
87 + return ret
88 +
89 + metadata = dict(zip(self.metadata_keys, aux_get(pkg, self.metadata_keys)))
90 dep_str = " ".join(metadata[k] for k in dep_type)
91
92 # the IUSE default are very important for us
93 @@ -214,9 +227,9 @@ class portage_api:
94 ret.add(pkg)
95
96 return ret
97 -
98 +
99 # recursive dependency getter
100 - def get_deps(self,pkg,dep_type=["RDEPEND","DEPEND"]):
101 + def get_deps(self,pkg,dep_type=["RDEPEND","DEPEND"],db="portdb"):
102 """
103 Gets current dependencies of a package on any depth
104 All dependencies **must** be installed
105 @@ -224,22 +237,21 @@ class portage_api:
106 :param pkg: name of package
107 :param dep_type: type of dependencies to recurse. Can be ["DEPEND"] or
108 ["RDEPEND", "DEPEND"]
109 + :param db: name of db to look. Can be "vardb" or "portdb"
110 :returns: **set** of packages names
111 """
112 - #pkg="kde-meta"
113 - #print self.vardb.match("<sys-apps/paludis-0.26.0_alpha5")
114 - #metadata = dict(zip(self.metadata_keys, self.vardb.aux_get(pkg, self.metadata_keys)))
115
116 ret=set()
117
118 # get porttree dependencies on the first package
119
120 - pkg = self.portdb.xmatch("bestmatch-visible", pkg)
121 + pkg = self.get_best_visible_pkg(pkg,db)
122 if not pkg:
123 return ret
124 + #print "doing",pkg
125
126 known_packages=set()
127 - unknown_packages=self.get_dep(pkg,dep_type)
128 + unknown_packages=self.get_dep(pkg,dep_type,db)
129 ret=ret.union(unknown_packages)
130
131 while unknown_packages:
132 @@ -249,36 +261,10 @@ class portage_api:
133 continue
134 known_packages.add(p)
135
136 - metadata = dict(zip(self.metadata_keys, self.vardb.aux_get(p, self.metadata_keys)))
137 -
138 - dep_str = " ".join(metadata[k] for k in dep_type)
139 + current_deps=self.get_dep(p,dep_type,'vardb')
140 + unknown_packages=unknown_packages.union(current_deps)
141 + ret=ret.union(current_deps)
142
143 - # the IUSE default are very important for us
144 - iuse_defaults=[
145 - u[1:] for u in metadata.get("IUSE",'').split() if u.startswith("+")]
146 -
147 - use=self.use.split()
148 -
149 - for u in iuse_defaults:
150 - if u not in use:
151 - use.append(u)
152 -
153 - success, atoms = portage.dep_check(dep_str, None, self.settings, myuse=use,
154 - trees=portage.db, myroot=self.settings["ROOT"])
155 -
156 - if not success:
157 - continue
158 -
159 - for atom in atoms:
160 - atomname = self.vartree.dep_bestmatch(atom)
161 - #print atomname
162 - if not atomname:
163 - continue
164 -
165 - for unvirt_pkg in self.expand_new_virt('='+atomname):
166 - for pkg in self.vartree.dep_match(unvirt_pkg):
167 - ret.add(pkg)
168 - unknown_packages.add(pkg)
169 return ret
170
171 def get_deps_for_package_building(self, pkg):
172 @@ -286,10 +272,10 @@ class portage_api:
173 returns buildtime dependencies of current package and
174 all runtime dependencies of that buildtime dependencies
175 """
176 - buildtime_deps=self.get_dep(pkg, ["DEPEND"])
177 + buildtime_deps=self.get_dep(pkg, ["DEPEND"],"portdb")
178 runtime_deps=set()
179 for dep in buildtime_deps:
180 - runtime_deps=runtime_deps.union(self.get_deps(dep,["RDEPEND"]))
181 + runtime_deps=runtime_deps.union(self.get_deps(dep,["RDEPEND"],"vardb"))
182
183 ret=buildtime_deps.union(runtime_deps)
184 return ret