Gentoo Archives: gentoo-commits

From: "Fabian Groffen (grobian)" <grobian@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r13720 - in main/branches/prefix: bin pym/_emerge pym/portage/dbapi
Date: Sun, 28 Jun 2009 13:40:16
Message-Id: E1MKucA-0005lH-RT@stork.gentoo.org
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)