1 |
Author: grobian |
2 |
Date: 2009-06-28 13:40:14 +0000 (Sun, 28 Jun 2009) |
3 |
New Revision: 13720 |
4 |
|
5 |
Added: |
6 |
main/branches/prefix/pym/_emerge/__init__.py |
7 |
Modified: |
8 |
main/branches/prefix/bin/emerge |
9 |
main/branches/prefix/bin/repoman |
10 |
main/branches/prefix/pym/_emerge/Package.py |
11 |
main/branches/prefix/pym/_emerge/actions.py |
12 |
main/branches/prefix/pym/portage/dbapi/porttree.py |
13 |
Log: |
14 |
Merged from trunk -r13697:13703 |
15 |
|
16 |
| 13698 | Move __init__.py to main.py. | |
17 |
| zmedico | | |
18 |
|
19 |
| 13699 | Bug #275532 - In action_depclean(), free memory from the dep | |
20 |
| zmedico | calculation before calling unmerge(). | |
21 |
|
22 |
| 13700 | Use clear_caches() to free memory inside action_depclean(). | |
23 |
| zmedico | | |
24 |
|
25 |
| 13701 | Make portdbapi define self.settings, for conformity with | |
26 |
| zmedico | other dbapi classes. | |
27 |
|
28 |
| 13702 | Fix PROVIDE code since the Package class automatically | |
29 |
| zmedico | evaluates USE conditionals now. | |
30 |
|
31 |
| 13703 | Use a property to implement portdbapi.settings. | |
32 |
| zmedico | | |
33 |
|
34 |
|
35 |
Modified: main/branches/prefix/bin/emerge |
36 |
=================================================================== |
37 |
--- main/branches/prefix/bin/emerge 2009-06-28 13:36:35 UTC (rev 13719) |
38 |
+++ main/branches/prefix/bin/emerge 2009-06-28 13:40:14 UTC (rev 13720) |
39 |
@@ -33,13 +33,13 @@ |
40 |
sys.path.insert(0, os.environ["PORTAGE_PYTHONPATH"]) |
41 |
else: |
42 |
sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "pym")) |
43 |
-import _emerge |
44 |
+from _emerge.main import emerge_main |
45 |
|
46 |
if __name__ == "__main__": |
47 |
import sys |
48 |
from portage.exception import ParseError, PermissionDenied |
49 |
try: |
50 |
- retval = _emerge.emerge_main() |
51 |
+ retval = emerge_main() |
52 |
except PermissionDenied, e: |
53 |
sys.stderr.write("Permission denied: '%s'\n" % str(e)) |
54 |
sys.exit(e.errno) |
55 |
|
56 |
Modified: main/branches/prefix/bin/repoman |
57 |
=================================================================== |
58 |
--- main/branches/prefix/bin/repoman 2009-06-28 13:36:35 UTC (rev 13719) |
59 |
+++ main/branches/prefix/bin/repoman 2009-06-28 13:40:14 UTC (rev 13720) |
60 |
@@ -1237,14 +1237,15 @@ |
61 |
# if x.startswith("no"): |
62 |
# print "Bad RESTRICT value: %s" % x |
63 |
try: |
64 |
- myaux["PROVIDE"] = portage.dep.use_reduce( |
65 |
+ portage.dep.use_reduce( |
66 |
portage.dep.paren_reduce(myaux["PROVIDE"]), matchall=1) |
67 |
except portage.exception.InvalidDependString, e: |
68 |
stats["PROVIDE.syntax"] = stats["PROVIDE.syntax"] + 1 |
69 |
fails["PROVIDE.syntax"].append(mykey+".ebuild PROVIDE: "+str(e)) |
70 |
del e |
71 |
continue |
72 |
- myaux["PROVIDE"] = " ".join(portage.flatten(myaux["PROVIDE"])) |
73 |
+ |
74 |
+ # The Package class automatically evaluates USE conditionals. |
75 |
for myprovide in myaux["PROVIDE"].split(): |
76 |
prov_cp = portage.dep_getkey(myprovide) |
77 |
if prov_cp != myprovide: |
78 |
|
79 |
Modified: main/branches/prefix/pym/_emerge/Package.py |
80 |
=================================================================== |
81 |
--- main/branches/prefix/pym/_emerge/Package.py 2009-06-28 13:36:35 UTC (rev 13719) |
82 |
+++ main/branches/prefix/pym/_emerge/Package.py 2009-06-28 13:40:14 UTC (rev 13720) |
83 |
@@ -187,8 +187,12 @@ |
84 |
if k in self._use_conditional_keys: |
85 |
if '?' in v: |
86 |
try: |
87 |
- v = paren_enclose(paren_normalize(use_reduce( |
88 |
- paren_reduce(v), uselist=self._pkg.use.enabled))) |
89 |
+ if self._pkg.root_config.settings.local_config: |
90 |
+ v = paren_enclose(paren_normalize(use_reduce( |
91 |
+ paren_reduce(v), uselist=self._pkg.use.enabled))) |
92 |
+ else: |
93 |
+ v = paren_enclose(paren_normalize(use_reduce( |
94 |
+ paren_reduce(v), matchall=1))) |
95 |
except portage.exception.InvalidDependString: |
96 |
# This error should already have been registered via |
97 |
# self._pkg._invalid_metadata(). |
98 |
|
99 |
Copied: main/branches/prefix/pym/_emerge/__init__.py (from rev 13703, main/trunk/pym/_emerge/__init__.py) |
100 |
=================================================================== |
101 |
--- main/branches/prefix/pym/_emerge/__init__.py (rev 0) |
102 |
+++ main/branches/prefix/pym/_emerge/__init__.py 2009-06-28 13:40:14 UTC (rev 13720) |
103 |
@@ -0,0 +1,3 @@ |
104 |
+# Copyright 2009 Gentoo Foundation |
105 |
+# Distributed under the terms of the GNU General Public License v2 |
106 |
+# $Id$ |
107 |
|
108 |
Modified: main/branches/prefix/pym/_emerge/actions.py |
109 |
=================================================================== |
110 |
--- main/branches/prefix/pym/_emerge/actions.py 2009-06-28 13:36:35 UTC (rev 13719) |
111 |
+++ main/branches/prefix/pym/_emerge/actions.py 2009-06-28 13:40:14 UTC (rev 13720) |
112 |
@@ -560,7 +560,6 @@ |
113 |
# that should have been pulled into the graph. On the other hand, it's |
114 |
# relatively safe to ignore missing deps when only asked to remove |
115 |
# specific packages. |
116 |
- allow_missing_deps = len(myfiles) > 0 |
117 |
|
118 |
msg = [] |
119 |
msg.append("Always study the list of packages to be cleaned for any obvious\n") |
120 |
@@ -582,6 +581,59 @@ |
121 |
for x in msg: |
122 |
portage.writemsg_stdout(colorize("WARN", " * ") + x) |
123 |
|
124 |
+ root_config = trees[settings['ROOT']]['root_config'] |
125 |
+ vardb = root_config.trees['vartree'].dbapi |
126 |
+ |
127 |
+ args_set = InternalPackageSet() |
128 |
+ if myfiles: |
129 |
+ args_set.update(myfiles) |
130 |
+ matched_packages = False |
131 |
+ for x in args_set: |
132 |
+ if vardb.match(x): |
133 |
+ matched_packages = True |
134 |
+ break |
135 |
+ if not matched_packages: |
136 |
+ writemsg_level(">>> No packages selected for removal by %s\n" % \ |
137 |
+ action) |
138 |
+ return 0 |
139 |
+ |
140 |
+ # The calculation is done in a separate function so that depgraph |
141 |
+ # references go out of scope and the corresponding memory |
142 |
+ # is freed before we call unmerge(). |
143 |
+ rval, cleanlist, ordered, req_pkg_count = \ |
144 |
+ calc_depclean(settings, trees, ldpath_mtimes, |
145 |
+ myopts, action, args_set, spinner) |
146 |
+ |
147 |
+ clear_caches(trees) |
148 |
+ |
149 |
+ if rval != os.EX_OK: |
150 |
+ return rval |
151 |
+ |
152 |
+ if cleanlist: |
153 |
+ unmerge(root_config, myopts, "unmerge", |
154 |
+ cleanlist, ldpath_mtimes, ordered=ordered) |
155 |
+ |
156 |
+ if action == "prune": |
157 |
+ return |
158 |
+ |
159 |
+ if not cleanlist and "--quiet" in myopts: |
160 |
+ return |
161 |
+ |
162 |
+ print "Packages installed: " + str(len(vardb.cpv_all())) |
163 |
+ print "Packages in world: " + \ |
164 |
+ str(len(root_config.sets["world"].getAtoms())) |
165 |
+ print "Packages in system: " + \ |
166 |
+ str(len(root_config.sets["system"].getAtoms())) |
167 |
+ print "Required packages: "+str(req_pkg_count) |
168 |
+ if "--pretend" in myopts: |
169 |
+ print "Number to remove: "+str(len(cleanlist)) |
170 |
+ else: |
171 |
+ print "Number removed: "+str(len(cleanlist)) |
172 |
+ |
173 |
+def calc_depclean(settings, trees, ldpath_mtimes, |
174 |
+ myopts, action, args_set, spinner): |
175 |
+ allow_missing_deps = bool(args_set) |
176 |
+ |
177 |
xterm_titles = "notitles" not in settings.features |
178 |
myroot = settings["ROOT"] |
179 |
root_config = trees[myroot]["root_config"] |
180 |
@@ -623,19 +675,6 @@ |
181 |
if action == "depclean": |
182 |
emergelog(xterm_titles, " >>> depclean") |
183 |
|
184 |
- args_set = InternalPackageSet() |
185 |
- if myfiles: |
186 |
- args_set.update(myfiles) |
187 |
- matched_packages = False |
188 |
- for x in args_set: |
189 |
- if vardb.match(x): |
190 |
- matched_packages = True |
191 |
- break |
192 |
- if not matched_packages: |
193 |
- writemsg_level(">>> No packages selected for removal by %s\n" % \ |
194 |
- action) |
195 |
- return |
196 |
- |
197 |
writemsg_level("\nCalculating dependencies ") |
198 |
resolver_params = create_depgraph_params(myopts, "remove") |
199 |
resolver = depgraph(settings, trees, myopts, resolver_params, spinner) |
200 |
@@ -731,7 +770,7 @@ |
201 |
resolver.display_problems() |
202 |
|
203 |
if not success: |
204 |
- return 1 |
205 |
+ return 1, [], False, 0 |
206 |
|
207 |
def unresolved_deps(): |
208 |
|
209 |
@@ -773,7 +812,7 @@ |
210 |
return False |
211 |
|
212 |
if unresolved_deps(): |
213 |
- return 1 |
214 |
+ return 1, [], False, 0 |
215 |
|
216 |
graph = resolver.digraph.copy() |
217 |
required_pkgs_total = 0 |
218 |
@@ -1027,16 +1066,16 @@ |
219 |
priority=UnmergeDepPriority(runtime=True), |
220 |
root=pkg.root)): |
221 |
resolver.display_problems() |
222 |
- return 1 |
223 |
+ return 1, [], False, 0 |
224 |
|
225 |
writemsg_level("\nCalculating dependencies ") |
226 |
success = resolver._complete_graph() |
227 |
writemsg_level("\b\b... done!\n") |
228 |
resolver.display_problems() |
229 |
if not success: |
230 |
- return 1 |
231 |
+ return 1, [], False, 0 |
232 |
if unresolved_deps(): |
233 |
- return 1 |
234 |
+ return 1, [], False, 0 |
235 |
|
236 |
graph = resolver.digraph.copy() |
237 |
required_pkgs_total = 0 |
238 |
@@ -1045,7 +1084,7 @@ |
239 |
required_pkgs_total += 1 |
240 |
cleanlist = create_cleanlist() |
241 |
if not cleanlist: |
242 |
- return 0 |
243 |
+ return 0, [], False, required_pkgs_total |
244 |
clean_set = set(cleanlist) |
245 |
|
246 |
# Use a topological sort to create an unmerge order such that |
247 |
@@ -1137,26 +1176,9 @@ |
248 |
graph.remove(node) |
249 |
cleanlist.append(node.cpv) |
250 |
|
251 |
- unmerge(root_config, myopts, "unmerge", cleanlist, |
252 |
- ldpath_mtimes, ordered=ordered) |
253 |
+ return 0, cleanlist, ordered, required_pkgs_total |
254 |
+ return 0, [], False, required_pkgs_total |
255 |
|
256 |
- if action == "prune": |
257 |
- return |
258 |
- |
259 |
- if not cleanlist and "--quiet" in myopts: |
260 |
- return |
261 |
- |
262 |
- print "Packages installed: "+str(len(vardb.cpv_all())) |
263 |
- print "Packages in world: " + \ |
264 |
- str(len(root_config.sets["world"].getAtoms())) |
265 |
- print "Packages in system: " + \ |
266 |
- str(len(root_config.sets["system"].getAtoms())) |
267 |
- print "Required packages: "+str(required_pkgs_total) |
268 |
- if "--pretend" in myopts: |
269 |
- print "Number to remove: "+str(len(cleanlist)) |
270 |
- else: |
271 |
- print "Number removed: "+str(len(cleanlist)) |
272 |
- |
273 |
def action_deselect(settings, trees, opts, atoms): |
274 |
root_config = trees[settings['ROOT']]['root_config'] |
275 |
world_set = root_config.sets['world'] |
276 |
|
277 |
Modified: main/branches/prefix/pym/portage/dbapi/porttree.py |
278 |
=================================================================== |
279 |
--- main/branches/prefix/pym/portage/dbapi/porttree.py 2009-06-28 13:36:35 UTC (rev 13719) |
280 |
+++ main/branches/prefix/pym/portage/dbapi/porttree.py 2009-06-28 13:40:14 UTC (rev 13720) |
281 |
@@ -110,6 +110,20 @@ |
282 |
"""this tree will scan a portage directory located at root (passed to init)""" |
283 |
portdbapi_instances = [] |
284 |
_use_mutable = True |
285 |
+ |
286 |
+ def _get_settings(self): |
287 |
+ return self.mysettings |
288 |
+ |
289 |
+ def _set_settings(self, settings): |
290 |
+ self.mysettings = settings |
291 |
+ |
292 |
+ def _del_settings (self): |
293 |
+ del self.mysettings |
294 |
+ |
295 |
+ settings = property(_get_settings, _set_settings, _del_settings, |
296 |
+ "Define self.settings as an alias for self.mysettings, " + \ |
297 |
+ "for conformity with other dbapi classes.") |
298 |
+ |
299 |
def __init__(self, porttree_root, mysettings=None): |
300 |
portdbapi.portdbapi_instances.append(self) |