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